ctf中web解题方法
看到登录框就头疼?题方别急,先打开浏览器开发者工具。题方CTF的题方Web题,八成答案藏在源码、题方请求头或者Cookie里。题方我见过太多人一上来就掏sqlmap,题方结果题目考的题方是JavaScript原型链污染。
先看URL。题方有时候路径里带着?题方file=flag,直接改参数就能读文件。题方这叫任意文件读取,题方简单粗暴。题方要是题方遇到?url=这种,试试file:///etc/passwd,题方或者用dict://探端口。题方SSRF的题,内网地址往往就是flag所在。
源码里搜关键词:flag、secret、key、admin。F12看Elements不够,得看Sources。有时候flag被切成几段藏在注释里,或者base64编码后放在JS变量里。我习惯直接Ctrl+F搜flag{ ,十次有三次能中。
Cookie和请求头是重灾区。把role=user改成role=admin,或者isAdmin=0改成1。有些题用JWT,那就去jwt.io解码,看看能不能把alg改成none,或者暴力破解弱密钥。我遇到过密钥是secret的,两秒就破了。
SQL注入现在很少直接考' or 1=1--。更常见的是盲注,或者过滤了空格和注释。用/**/代替空格,用%0a换行。时间盲注的话,sleep(3)看响应延迟。布尔盲注就一位一位猜,写个脚本跑,别手动。sqlmap能用,但记得加--tamper绕WAF。
文件上传题,先看前端有没有校验。禁用JS,或者直接改Content-Type。黑名单过滤.php?试试.phtml、.php5、.phar。白名单只让传图片?那就传.htaccess或者.user.ini,把图片解析成PHP。我见过最阴间的题,上传后文件名被重写成MD5,但路径可预测,直接访问/uploads/xxx.jpg,里面是。
命令执行题,先看有没有回显。没回显就反弹shell,或者写文件到web目录。cat /flag被过滤?用tac、nl、sort。空格被过滤?用$IFS或者${ IFS}。flag被过滤?用fla?或者fla*。Windows下用type和dir,别忘了%00截断。
PHP伪协议是常客。php://filter/read=convert.base64-encode/resource=index.php,直接读源码。要是allow_url_include开着,data://text/plain,就完事了。我见过phar://反序列化的题,得先传个phar文件,再触发。
反序列化题,先找__destruct和__wakeup。POP链构造是难点,但CTF里往往只考一两个魔术方法。PHP 7.4以上注意__wakeup绕过,用C:代替O:。Python的pickle反序列化,__reduce__直接执行命令。Java的ysoserial,打CommonsCollections链。
SSRF题,gopher://打内网Redis,写计划任务或者写webshell。dict://探端口,file://读文件。记得用127.0.0.1、0.0.0.0、[::1]绕localhost过滤。DNS重绑定有时候能过,但CTF里少见。
最后,别忽略robots.txt和备份文件。www.zip、index.php.bak、.git/泄露,这些能直接拿源码。我见过.DS_Store泄露文件列表的,顺着路径就找到flag了。工具用Burp Suite抓包改包,用dirsearch扫目录,但别全依赖自动化。手测往往更快。
Web题的核心是观察和试错。看到什么参数就改什么,看到什么功能就测什么。别想太复杂,flag经常就在你第一眼忽略的地方。
(责任编辑:娱乐)














