ctf渗透

CTF比赛里最刺激的环节,永远是渗透测试那部分。你拿到的可能是一个IP,一个域名,甚至只是一段源码,目标就一个:拿到flag。别指望有什么标准答案,每次都是新坑。

我打的第一场线下赛,题目给了一个Web服务。首页是个登录框,admin/admin试了没反应,sqlmap跑了一遍也没注入。当时差点放弃,后来随手在URL后面加了/robots.txt,里面躺着一行Disallow: /backup.zip。下载解压,源码到手,数据库配置文件里明文写着密码。登录后台,文件上传,传了个php马,连上菜刀,flag就在/root/flag.txt里。整个过程不到二十分钟,但那种“原来如此”的快感,比拿奖还爽。

这就是CTF渗透的常态——信息收集比漏洞利用重要得多。很多人一上来就对着输入框狂怼payload,方向错了。先看HTTP响应头,看cookie结构,看有没有.git泄露、有没有swp文件、有没有备份目录。这些“边角料”往往才是入口。有一次题目只给了一个静态页面,连个表单都没有。我用dirsearch扫了一遍,发现/api/v1/user/list返回了JSON,里面带着所有用户的手机号和邮箱。用手机号当密码去撞登录接口,直接进了管理员账户。

工具要用,但别依赖。Burp Suite的Intruder跑字典确实快,可字典不对就是白费电。我见过有人拿几万条弱口令去爆一个明显有验证码的登录口,跑了一下午,IP还被封了。正确做法是先手动试几个常见组合,看看错误提示有没有差异——是“用户名不存在”还是“密码错误”?如果提示不一样,就能枚举用户名。如果登录失败几次后出现验证码,那就换思路,别硬刚。

权限提升是另一个分水岭。拿到webshell只是第一步,通常权限很低,连flag文件都读不了。这时候要看系统版本、内核版本、有没有SUID文件、有没有计划任务。Linux下find / -perm -4000 -type f 2>/dev/null是必敲的。有次找到个/usr/bin/find带SUID位,直接find . -exec /bin/sh -p \\;就提权了。Windows下更麻烦些,但whoami /priv看看有没有SeImpersonate,有的话用JuicyPotato或者PrintSpoofer,基本稳了。

内网渗透才是CTF里最折磨人的部分。你拿下一台边缘机器,发现它连着内网,但只有一台跳板。这时候得做端口转发,用frp或者ssh隧道,把内网端口映射出来。然后扫内网段,找域控、找数据库、找运维机。有次内网里有一台Redis未授权,写了个ssh公钥进去,直接连上了另一台机器。再用那台机器上的mimikatz抓哈希,横向到域管,最后在域控的共享目录里翻到flag。整个过程像拼图,少一块都完不成。

CTF渗透和真实渗透最大的区别是:CTF有终点,真实环境没有。但CTF教会你的东西——信息收集的耐心、漏洞链的串联、权限提升的细致——在真实场景里一样管用。别只盯着flag,多想想“为什么这个漏洞能成立”“如果我是防守方怎么修”。这才是打CTF的意义。