新手也能看懂的BUUCTF Web题通关笔记:从SQL注入到SSTI的实战避坑指南

张开发
2026/4/20 11:40:25 15 分钟阅读

分享文章

新手也能看懂的BUUCTF Web题通关笔记:从SQL注入到SSTI的实战避坑指南
BUUCTF Web安全实战从SQL注入到SSTI的深度通关手册刚接触CTF Web安全的新手常会遇到这样的困境明明看懂了漏洞原理实战时却总被各种过滤规则和WAF机制卡住。本文将以BUUCTF平台典型题目为例拆解Web安全竞赛中的高频漏洞类型通过12个关键技巧点帮助新手建立系统的解题思维框架。1. SQL注入的实战进阶路线1.1 万能密码的底层逻辑初学者接触的第一个SQL注入案例往往是万能密码。假设登录逻辑为SELECT * FROM users WHERE username$user AND password$pwd构造admin OR 11作为用户名时实际执行的语句变为SELECT * FROM users WHERE usernameadmin OR 11 AND password任意值这里需要注意三点布尔运算优先级AND优先级高于OR所以条件等效于usernameadmin OR (true AND false)闭合方式选择单引号闭合比注释符更可靠如admin--在某些场景可能失效编码问题特殊字符需要URL编码空格转为%20单引号转为%271.2 过滤空格的六种绕过方案当题目过滤空格时Linux环境下可用这些替代方案方案示例适用场景${IFS}cat${IFS}flag.txtBash环境$IFS$9cat$IFS$9flag.txt多数Shell重定向符catflag.txt文件读取制表符cat%09flag.txtURL编码连续引号catflag.txt引号包裹花括号{cat,flag.txt}命令参数在[GXYCTF2019]Ping Ping Ping题目中使用cat$IFS$1flag.php成功绕过过滤。1.3 联合注入的实战要点手工联合注入时需要掌握这些关键步骤确定列数通过ORDER BY或UNION SELECT递增测试获取数据库信息UNION SELECT 1,database(),3,4提取表名的高级技巧UNION SELECT 1,(SELECT GROUP_CONCAT(table_name) FROM information_schema.tables WHERE table_schemadatabase()),3处理数据截断使用SUBSTR()和LIMIT分片获取长数据2. 文件包含的三种攻击模式2.1 伪协议读取源码PHP伪协议是文件包含的核心武器?filephp://filter/convert.base64-encode/resourceflag.php需要注意include和require的区别在于错误处理方式allow_url_include需要开启才能使用远程包含Base64编码可以绕过死亡代码和特殊标签2.2 备份文件泄露利用常见的备份文件路径/index.php.bak /.index.php.swp /www.zip /.git/config在[ACTF2020]BackupFile题目中通过扫描发现index.php.bak获取源码。2.3 日志注入技巧当其他方法失效时可以尝试通过User-Agent注入PHP代码访问不存在的路径记录错误日志包含Apache/Nginx日志文件执行代码3. 代码审计的四个关键点3.1 弱类型比较漏洞PHP的会进行类型转换典型漏洞代码if(intval($key) $str) { echo $flag; }解决方案使用123匹配123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3注意0e开头的哈希值会被识别为科学计数法3.2 黑名单绕过手法[极客大挑战 2019]Secret File题目中的过滤规则strstr($file,../) || stristr($file, tp) || stristr($file,input) || stristr($file,data)绕过方案使用php://代替php://input双写特殊字符phphp://input大小写混合PhP://FilTer3.3 变量解析特性在[RoarCTF 2019]Easy Calc中利用PHP的变量解析特性// 原始请求 calc.php?numphpinfo() // 绕过WAF calc.php?%20numphpinfo()原理PHP会自动去除变量名前的空格而WAF可能严格匹配参数名。3.4 危险函数清单审计时需要重点关注的函数函数类别典型函数风险等级命令执行system(), exec()高危文件操作file_get_contents()中危代码执行eval(), assert()高危反序列化unserialize()高危4. SSTI模板注入深度解析4.1 漏洞检测方法论服务端模板注入检测流程识别模板引擎通过错误信息或特殊语法判断测试基本表达式{{7*7}}、% 7*7 %等验证命令执行逐步升级payload复杂度4.2 Tornado框架利用[护网杯 2018]easy_tornado题目暴露的漏洞# 获取配置信息 {{handler.settings}} # 读取文件内容 {{handler.application.loader.load_module(os).popen(whoami).read()}}4.3 防御方案对比方案优点缺点沙箱环境隔离彻底性能损耗大白名单过滤实现简单可能被绕过静态渲染绝对安全灵活性差内容转义通用性强需要全面覆盖5. 高效解题的六个习惯查看源码Chrome开发者工具检查HTML注释和JS代码扫描目录使用dirsearch等工具发现隐藏资源分析网络请求Burp Suite抓包观察响应头和行为尝试非常规扩展名.phtml、.phps等绕过上传限制活用编码转换Hex、Base64、URL编码互相转换建立漏洞库分类整理常见payload和绕过技巧在CTF比赛中真正的难点往往不是漏洞本身而是如何绕过各种防御机制。建议新手在本地搭建测试环境通过修改防御规则来验证不同绕过方法的有效性。例如尝试用这些字符替代空格[%09, %0a, %0b, %0c, %0d, %a0]记住每个漏洞都有多种解法当一种方法失效时立即切换到其他思路。保持耐心和创造力才是成为Web安全高手的关键。

更多文章