Python武器库开发-武器库篇之SQL注入扫描器(五十九)
Python武器库开发-武器库篇之SQL注入扫描器(五十九)
SQL注入漏洞简介以及危害
SQL注入漏洞是一种常见的Web应用程序漏洞,攻击者可以利用该漏洞在应用程序的数据库中执行恶意的SQL查询或指令。这可能导致数据泄露、数据损坏、应用程序崩溃或未经授权的访问。
SQL注入的危害主要体现在以下几个方面:
-
数据泄露:攻击者可以利用SQL注入漏洞来获取数据库中的敏感信息,如用户账号、密码、个人信息等。这些泄露的数据可能被用于进一步的攻击,如身份盗用、网络钓鱼等。
-
数据篡改:攻击者可以修改数据库中的数据,例如增加、删除、修改记录等。这可能导致数据的完整性受到破坏,影响系统的正常运行。
-
命令执行:攻击者可以执行任意的SQL语句,包括创建、删除数据库、修改数据库结构等危险操作。这可能导致系统的瘫痪或被完全控制。
-
拒绝服务:攻击者可以利用SQL注入来消耗服务器资源,例如通过构造复杂的SQL查询来耗尽服务器的CPU、内存等资源,导致服务器无法正常工作。
总的来说,SQL注入漏洞给网站和用户带来的危害非常大,因此开发者在设计和编写web应用程序时,应该注意防范SQL注入漏洞,并采取相应的安全措施,如输入验证、参数化查询等。同时,用户也应该保持警惕,避免在不可靠的网站上输入个人敏感信息。
SQL注入漏洞扫描器
SQL注入漏洞扫描器是一种用于检测和识别Web应用程序中的SQL注入漏洞的工具。它通过向目标应用程序发送特定的SQL注入测试输入,然后分析应用程序的响应来确定是否存在SQL注入漏洞。使用SQL注入漏洞扫描器可以帮助发现应用程序中的安全漏洞,从而提供给开发人员修复这些漏洞的机会。它可以扫描整个应用程序或者特定的页面,检测是否存在可能导致SQL注入漏洞的输入点。
一些常见的SQL注入漏洞扫描器包括:
- SQLMap:一个功能强大的开源工具,可以自动检测和利用SQL注入漏洞。
- Acunetix:一个商业漏洞扫描器,可以检测多种类型的Web应用程序漏洞,包括SQL注入漏洞。
- Nessus:一个流行的漏洞扫描器,可以检测和报告多种类型的安全漏洞,包括SQL注入漏洞。
- Burp Suite:一个常用的Web应用程序渗透测试工具,可以使用其SQL注入扩展来检测和利用SQL注入漏洞
SQL注入漏洞扫描器代码实现
接下来我们就用python开发一段 SQL注入漏洞的扫描器,代码内容如下:
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
from fake_useragent import UserAgentURL = "http://39.101.162.123:48387/Less-1/?id=1"
ERRORS = [# MySQL"you have an error in your sql syntax;","warning:mysql",# SQL Server"unclosed quotation mark after the charcter string",# Oracle"qupted string not properly terminated",
]ua = UserAgent()
s = requests.Session()
s.headers["User-Agent"] = ua.randomdef get_all_forms(url):soup = BeautifulSoup(s.get(url).content, 'lxml')return soup.find_all("form")def get_form_details(form):details = {}try:action = form.attrs.get("action").lower()except:action = Nonemethod = form.attrs.get("method", "get").lower()inputs = []for input_tag in form.find_all("input"):input_type = input_tag.attrs.get("type", "text")input_name = input_tag.attrs.get("name")input_value = input_tag.attrs.get("value")inputs.append({"type": input_type, "name": input_name, "value": input_value})details["action"] = actiondetails["method"] = methoddetails["inputs"] = inputsreturn detailsdef is_vulnerable(response):for error in ERRORS:if error in response.content.decode().lower():return Truereturn Falsedef scan_sql_injection(url):for c in "\"'":new_url = f"{url}{c}"print("正在尝试", new_url)res = s.get(new_url)if is_vulnerable(res):print("找到SQL注入漏洞 链接:", new_url)returnforms = get_all_forms(url)for form in forms:form_details = get_form_details(form)for c in "\"'":data = {}for input_tag in form_details["inputs"]:if input_tag["type"] == "hidden" or input_tag["value"]:try:data[input_tag["name"]] = input_tag["value"] + cexcept:passelif input_tag["type"] != "submit":data[input_tag["name"]] = f"test{c}"url = urljoin(url, form_details["action"])if form_details["method"] == "post":res = s.post(url, data=data)elif form_details["method"] == "get":res = s.get(url, params=data)if is_vulnerable(res):print("SQL注入漏洞存在 链接:", url)print("Form:")print(form_details)breakif __name__ == '__main__':scan_sql_injection(URL)
代码分析
这串代码是一个用于检测和利用SQL注入漏洞的脚本。它使用了requests库来发送HTTP请求和接收响应,使用了BeautifulSoup库来解析网页内容,使用了urllib库中的urljoin函数来处理URL,以及使用了fake_useragent库来生成随机的User-Agent。
首先,定义了一些常量,包括目标URL和可能表示SQL注入错误的字符串列表。
然后,创建了一个会话对象,并设置了随机的User-Agent头。
接下来,定义了两个辅助函数。get_all_forms函数接收一个URL作为参数,发送GET请求并使用BeautifulSoup解析响应内容,然后找到页面中的所有表单,并返回一个包含所有表单的列表。get_form_details函数接收一个表单作为参数,解析表单的属性和输入标签,并返回一个包含表单详细信息的字典。
然后,定义了一个判断响应是否包含可能的SQL注入错误的函数is_vulnerable。该函数遍历错误列表,如果任意一个错误字符串在响应内容中出现,则返回True,否则返回False。
接下来,定义了一个scan_sql_injection函数,接收一个URL作为参数。首先,通过在URL后面拼接特殊字符进行GET请求,检查是否存在SQL注入漏洞。如果存在漏洞,打印漏洞的URL并返回。然后,获取URL中的所有表单,并遍历每个表单,尝试在每个输入标签中添加特殊字符进行POST和GET请求,检查是否存在SQL注入漏洞。如果存在漏洞,打印漏洞的URL和表单详细信息,并跳出循环。
最后,如果该脚本是直接运行的而不是作为模块导入的,调用scan_sql_injection函数并传入目标URL。
运行效果图
如下是我们这串代码的实际运行效果图,这里我们使用SQL-labs靶场作为演示:

如图,成功的判断了以下几处存在SQL注入漏洞:




相关文章:
Python武器库开发-武器库篇之SQL注入扫描器(五十九)
Python武器库开发-武器库篇之SQL注入扫描器(五十九) SQL注入漏洞简介以及危害 SQL注入漏洞是一种常见的Web应用程序漏洞,攻击者可以利用该漏洞在应用程序的数据库中执行恶意的SQL查询或指令。这可能导致数据泄露、数据损坏、应用程序崩溃或未经授权的访问。 SQL注…...
图说设计模式:单例模式
更多C学习笔记,关注 wx公众号:cpp读书笔记 5. 单例模式 单例模式 模式动机模式定义模式结构时序图代码分析模式分析实例优点缺点适用环境模式应用模式扩展总结 5.1. 模式动机 对于系统中的某些类来说,只有一个实例很重要,例如…...
探索设计模式——单例模式详解
前言:设计模式的作用主要是为了——利用设计方式的重用来自动地提高代码的重新利用、提高代码的灵活性、节省时间, 提高开发效率、低耦合,封装特性显著, 接口预留有利于扩展。 设计模式的种类有很多种,本篇内容主要讲解…...
建筑垃圾/城市固废倾倒转移乱象:EasyCVR+AI智能视频监控方案助力城市环保监管
近日有新闻记者报道,中央生态环境保护督察组在上海、浙江、江西、湖北、湖南、重庆、云南7省市督察发现,一些地方建筑垃圾处置工作存在明显短板,乱堆乱倒问题时有发生,比如,江西湘东区在杨家田地块违规设置弃土场&…...
C的I/O操作
目录 引言 一、文件与目录操作 1. 打开与关闭文件 2. 文件读写操作 3. 文件定位与错误处理 二、字符流与字节流 1. 字符流处理 2. 字节流处理 三、序列化与反序列化 1. 序列化 2. 反序列化 四、新的I/O(NIO) 表格总结 文件与目录操作 字符…...
Android Audio实战——声道信息回调(五)
在前面的 AudioTrack 构造中,我们传入了音频的声道信息,这一节我们就来详细介绍一下声道的配置信息。 一、声道介绍 音频中的声道配置从单声道到双声道(立体声)、再到多声道系统(如5.1和7.1),代表了声音录制和回放技术的发展,旨在提供越来越丰富和沉浸式的听觉体验。 …...
ThreeJS给模型添加介绍文字(贴在模型上 不会一直面向我们)
使用到 FontLoader跟 TextGeometry 引包 import {TextGeometry} from "three/examples/jsm/geometries/TextGeometry"; import {FontLoader} from "three/examples/jsm/loaders/FontLoader";使用 // 创建字体加载器并加载字体 const fontLoader new Fo…...
[Qt] Qt Creator 以及 Qt 在线安装教程
一、Qt Creator 下载及安装 1、从以下镜像源下载安装包常规安装即可 Qt Creator 也可以在第二步Qt 在线安装时一次性勾选安装,见后文 Qt Creator 中科大源下载地址 二、Qt 在线安装 1、根据所在平台选择对应的安装器下载 Qt 在线安装器下载 2、可能的安装报错…...
【大分享05】动态容差归档,打通不动产登记管理“最后一公里”
关注我们 - 数字罗塞塔计划 - 本篇是参加由电子文件管理推进联盟联合数字罗塞塔计划发起的“大分享”活动投稿文章,来自上海涵妍档案信息技术有限责任公司,作者:陈雪。 一、政策背景 在“互联网政务服务”的浪潮下,各级政府机构…...
嵌入式模拟电路面试题大全及参考答案(持续更新)
目录 理想运算放大器的两个基本特性 共模抑制比(CMRR)及其重要性 负反馈在放大器中的作用 差分放大电路的工作原理 使用运算放大器构建非反相放大器 电源抑制比(PSRR) 带宽(BW)在放大器中的含义 计算RC低通滤波器的截止频率 基本的积分电路及其时间常数 增益-带…...
【C语言】解决C语言报错:Uninitialized Variable
文章目录 简介什么是Uninitialized VariableUninitialized Variable的常见原因如何检测和调试Uninitialized Variable解决Uninitialized Variable的最佳实践详细实例解析示例1:局部变量未初始化示例2:数组未初始化示例3:指针未初始化示例4&am…...
RabbitMQ实践——交换器(Exchange)绑定交换器
在《RabbitMQ实践——交换器(Exchange)和绑定(Banding)》一文中,我们实验了各种交换器。我们可以把交换器看成消息发布的入口,而消息路由规则则是由“绑定关系”(Banding)来定义&…...
使用 Vue 官方脚手架初始化 Vue3 项目
Vite 官网:https://cn.vitejs.dev/ Vue 官网:https://vuejs.org/ Vue 官方文档:https://cn.vuejs.org/guide/introduction.html Element Plus 官网:https://element-plus.org/ Tailwind CSS 官网:https://tailwindcss.…...
C语言中的宏定义(#define)和函数调用的区别
C语言中的宏定义(#define)和函数调用在概念、工作方式以及它们对代码的影响上有显著的区别。以下是它们之间的主要差异: 宏定义(#define) 工作方式:宏定义是在预处理阶段进行的文本替换。预处理器会在编译…...
196. 删除重复的电子邮箱
196. 删除重复的电子邮箱 题目链接:196. 删除重复的电子邮箱 代码如下: # Write your MySQL query statement below delete from Person as p where p.id not in(select e.id from (select min(id) as idfrom Person group by email ) as e )...
Android 大话binder通信 (上)
戳蓝字“牛晓伟”关注我哦! 用心坚持输出易读、有趣、有深度、高质量、体系化的技术文章 本文摘要 用故事的方式把binder通信的整个过程都描述出来,binder通信都经历了哪些节点,在这些节点上的数据有哪些变化,同时还对binder通…...
DevOps学习回顾01-技能发展路线-岗位能力-体系认知
事为先,人为重–事在人为 参考来源: 极客时间专栏:DevOps实战笔记,作者:石雪峰 课程链接:https://time.geekbang.org/column/intro/235 时代的典型特征 VUCA VUCA 是指易变性(Volatility&…...
【MySQL】复合查询和内外连接
文章目录 MySQL复合查询和内外连接1. 复合查询1.1 多表查询1.2 自连接1.3 子查询单行子查询多行子查询多列子查询from中使用子查询合并查询 2. 内外连接1. INNER JOIN2. LEFT JOIN3. RIGHT JOIN4. FULL JOIN5. CROSS JOIN MySQL复合查询和内外连接 1. 复合查询 1.1 多表查询 …...
【星海随笔】云解决方案学习日志篇(二) kafka、Zookeeper、Fielbeat
Elastic 中国社区官方博客 https://blog.csdn.net/ubuntutouch/category_9209092.html Kafka kafka的源代码是基于Scala语言编写的,运行在Java虚拟机(即:JVM)上。因此,在安装kafka之前需要先安装JDK Kafka 为什么依赖 Zookeepe…...
【测试专题】系统测试报告(原件Word)
软件测试报告在软件开发过程中起着至关重要的作用,主要有以下几个主要原因: 1、确保软件质量 2、提供决策支持 3、记录测试过程和结果 4、促进沟通和协作 5、符合标准和法规要求 6、改进测试流程和策略 7、降低风险 软件开发全套资料获取进主页或者本文末…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...
链式法则中 复合函数的推导路径 多变量“信息传递路径”
非常好,我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题,统一使用 二重复合函数: z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y)) 来全面说明。我们会展示其全微分形式(偏导…...
