CISP-PTE备考笔记|SQL注入(联合查询)手工复现与原理分析
发布时间:2026/10/30 2:25:50 锦皓数字建站
手工复现与原理分析`)
本文为 CISP-PTE 备考学习笔记所有操作仅在官方授权靶场、本地自建靶场环境完成。 文中 Payload 仅用于原理学习、靶场练习。严禁直接套用在任何未授权公网业务系统。未经授权对网站进行注入、扫描属于违法行为请遵守《网络安全法》。 本文目的理解漏洞原理、学习漏洞防御请勿用于非法测试。SQL 注入本质是程序把用户输入的内容直接拼接到 SQL 语句里面执行了。攻击者输入的不是普通文本而是能修改 SQL 逻辑的 SQL 代码数据库就会执行攻击者写的指令。Web 网站大多是「网页程序 数据库」。网站后台需要查询数据库拿数据比如查账号、查文章。 正常开发正确做法使用预编译 / 参数化查询用户输入永远只当做普通字符串不会被数据库当成代码执行。有漏洞的错误写法直接拼接字符串用户输入的内容会变成 SQL 语句的一部分数据库分不清哪段是开发者写的代码、哪段是用户输入。一、SQL 注入详细种类1. 按数据提交方式划分1GET 注入参数放在 URL 地址栏最常见。 示例?id1 and 11特点日志容易记录直接抓 URL 就能测试。2POST 注入参数在请求 body表单、ajax、json不在 url 里。 比如登录框、搜索框提交的数据。 特点抓包改 POST 参数URL 看不出注入点。3Cookie 注入Cookie 里面的参数直接拼入 SQL 语句。 例Cookie: userid1 and sleep(5)很多开发只过滤 GET/POST忽略 Cookie。4HTTP 头注入User-Agent、Referer、X-Forwarded-For 等请求头直接拼 SQL。 多用于日志写入类功能将请求头存入数据库。5JSON 注入接口接收 JSON 格式数据{user:admin or 11--}很多 WAF 对 JSON 解析存在缺陷。2. 按注入回显 / 数据获取方式划分1Union 联合查询注入最常用原理用union select把额外查询结果和原有查询合并页面直接返回数据。 前提前后查询列数一致页面能正常输出查询结果。 payload 示例?id-1 union select 1,version(),database()--2布尔盲注Boolean-based页面不返回数据库内容只返回两种页面状态正常 / 报错。 通过and 11页面正常and 12页面异常逐个猜字符。 payload 示例?id1 and ascii(substr(database(),1,1))100--用二分法逐位猜库名、表名、字段。3时间盲注Time-based页面无论真假返回一模一样没有页面差异依靠sleep()/benchmark()延时判断条件真假。 payload 示例?id1 and if(ascii(substr(database(),1,1))100,sleep(3),1)--MySQL 专用其他数据库函数不同。4报错注入Error-based利用数据库报错机制报错信息带出查询数据。 适合页面会输出数据库报错信息的场景。 MySQL 常用updatexml()、extractvalue()、floor(rand()*2)。 payload 示例?id1 and updatexml(1,concat(0x7e,database(),0x7e),1)--5堆查询注入堆叠注入 Stacked injection用分号;分隔多条 SQL 语句执行多条命令。MySQL 默认支持取决于驱动PHPmysql_i 一般支持mysqli 部分情况关闭。 payload 示例?id1;drop table test;--6带外注入OOB 注入Out-of-band数据库把查询数据主动带出到外部服务器DNS/HTTP 请求。 适合盲注、页面无回显无延时的场景。 MySQLload_file、select ... into outfileMSSQL 的 xp_dirtreeOracle utl_http。3. 按注入位置 语法特性字符型注入SQL 语句参数带引号包裹where id1payload 需要闭合单 / 双引号。?id1 or 11--数字型注入参数直接数字不带引号不需要闭合引号。?id1 and 11搜索型注入like %参数%一般需要闭合%Order by 注入order by 参数不能 union可盲注常用于排序参数。Limit 注入limit 后的参数注入。4. 按数据库类型MySQL 注入、MSSQL (SQL Server) 注入、Oracle 注入、PostgreSQL、Access 注入函数、注释、语法各不相同。二、SQL 过滤原理防护手段开发 / WAF 常用的 SQL 关键字过滤方式过滤本质黑名单匹配拦截危险字符串。1. 关键字过滤黑名单过滤关键词and、or、union、select、sleep、and、or、/**/、--、#、updatexml等。 例子输入union→ 直接拦截输入and 11→ 拦截 and2. 符号过滤过滤单引号、双引号、分号;、括号()、星号*、、.、~3. 空格过滤过滤空格 很多 WAF 会拦截空格。4. 正则过滤正则匹配危险模式例如匹配select.*from这类连续语句。❗黑名单过滤最大缺陷只要能变形绕过关键词防护直接失效。✅真正安全的方案预编译参数化查询、ORM 框架、最小权限白名单而不是单纯过滤。以下为cisp-pte的练习笔记第一题根据题目答案在 /tmp/360/key 中进入题目环境很明显我们要注入id并且害给出了当前执行的sql语句根据给出的sql语句我们使用 ) 进行闭合页面无回显内容使用#进行注释#被过滤了使用#的url编码%23试试页面回显正常使用order by进行查询字段数发现空格被过滤了使用/**/代替空格到5的时候没有回显说明有4个字段接下来进行联合查询union select查询回显点咱们这里发现union被过滤掉了 这里想到大写混淆和双写双写成功了发现使用双写可以成功绕过234均为回显点我们使用load_file() 直接读取/tmp/360/keyload_file(/tmp/360/key)找到key重要声明SQL 注入属于网络攻击技术本内容仅用于安全学习、漏洞测试仅限自己授权的靶场 / 自己的系统严禁用于未授权的网站渗透、攻击违者承担法律责任。参考法规《网络安全法》《刑法》285/286 条未经授权对任何系统进行注入测试属于违法行为
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。