序言
记录一次在三天内斩获1.3万分的攻防演练靶标过程复盘总结。
突破
通过互联网公开的Web服务进行子域名信息收集,最终定位到目标单位的教务管理系统,该系统由南京某公司开发并提供服务。

通过目录遍历成功获取到系统源码,随即展开代码审计。按照常规思路,首先查看文件上传功能。在审计过程中,发现了一处名为 uploadFile() 的方法。

其对应的API页面存在未授权访问漏洞,可直接通过路径 .aspx?action=uploadFile 调用该方法。其中,fileName 参数是直接从 httpPostedFile.FileName 获取,未经过任何安全检查。因此,只需构造一个文件上传数据包,即可直接上传Webshell。

根据 base.Server.MapPath 定义的常量,可以确定文件的上传路径为:/UpLoadFile/YHB/文件名。拼接完整路径在浏览器中访问,发现文件确实成功落地,但返回了403禁止访问的错误,这个问题我们稍后再来绕过。

审计中发现了第二处文件上传点。该文件管理功能的代码并未封装在 bin 文件中,而是单独写在一个 .cs 文件里,推测是后续新增的功能。这里存在一个 uploadQTFile() 方法,同样地,uploadFile.FileName 没有对文件后缀进行任何检查就直接保存到服务器。

此接口需要进行Cookie验证,要求教师及以上身份权限。但系统存在另一个逻辑漏洞,导致越权,可以轻易获取到教师甚至管理员的Token信息。我们只需随便登录一个账号即可。

前端对文件类型做了静态校验,但这无关紧要。我们可以先上传一个正常的PNG文件以绕过前端JavaScript验证,然后在发送的数据包中将文件名修改为.aspx。

然而,即使文件上传成功,我们依然遇到了之前提到的403问题。这是因为ASP.NET的上传目录通常被配置为禁止解析动态脚本,导致上传的Webshell无法执行。难道就无计可施了吗?

我们可以转换思路,上传一个.soap格式的木马。这种木马通过创建危险函数并注册为Web Service来获取命名空间,从而绕过ASPX文件无法被解析的限制。

将.soap木马上传后,访问确认无问题,即可使用哥斯拉(Godzilla)等Webshell管理工具进行连接。

内网
成功连接Webshell后,首先执行命令查看当前主机的权限。当前为IIS服务账户权限,后续需要考虑提权。

执行 Tasklist /SVC 查看进程列表,并将结果丢到在线进程识别网站上进行分析,发现系统中存在火绒安全软件。

制作一个Cobalt Strike的免杀马,并上传到目标机器执行,使其成功上线。接着查看当前用户的特权信息。

执行 systeminfo 查询主机版本和补丁信息。目标系统为Windows Server 2016,后续可以尝试通过创建命名管道(pipe)等方式来绕过火绒进行提权。

使用哥斯拉内置的PetitPotam模块进行权限提升操作。当然,也可以使用土豆(Potato)家族系列或其他最新公开的、能覆盖Server 2016版本的EXP。

获得SYSTEM权限后,操作空间就变得非常大了。执行 query user 查询当前正在运行的用户会话,发现Administrator管理员正在远程登录这台主机。

果断从SYSTEM权限切换到Administrator用户的上下文,尝试远程查看其桌面活动。

(远程桌面会话当时忘记截图,此处补充一张IIS管理器界面图示意)

从 lsass.exe 进程的内存中抓取管理员的密码哈希。

可以通过在线网站对NTLM哈希进行解密,或者直接使用哈希传递(Pass-the-Hash)攻击。

对内网进行SMB协议的主机存活探测,发现多台在线主机。

上线Cobalt Strike的Beacon,并利用其在目标机器上搭建流量代理(如socks5),同时配置服务或计划任务实现持久化。

使用超级弱口令检查工具对内网进行探测,发现了大量使用默认或弱口令的主机,范围不限于当前C段。



最终,通过一台双网卡主机突破了逻辑网段隔离。此外,利用某管理员WPS云文档的登录缓存,收集到堡垒机的账号密码。成功登录堡垒机后,发现了大量服务器列表,其中就包含了本次攻防演练的靶标服务器。

列表中包含了目标AD服务器的主机、备机,以及各类门户网站和核心数据服务器。

最后
在一次实际的渗透测试项目中,我们发现了某小程序的Fastjson漏洞,可以触发DNSLog解析。但当我们想复现并撰写文章时,该小程序的版本已经进行了大规模更新。

漏洞的挖掘与利用往往具有很强的时效性,环境的变化常常让复现和总结变得困难。保持对技术细节的持续记录和复盘,是每一位安全研究者成长的关键。如果你对这类内网渗透与横向移动的技术细节感兴趣,欢迎到云栈社区与更多同行交流探讨。