Python武器库开发-武器库篇之SQL注入扫描器(五十九)

Python武器库开发-武器库篇之SQL注入扫描器(五十九)

SQL注入漏洞简介以及危害

SQL注入漏洞是一种常见的Web应用程序漏洞,攻击者可以利用该漏洞在应用程序的数据库中执行恶意的SQL查询或指令。这可能导致数据泄露、数据损坏、应用程序崩溃或未经授权的访问。

SQL注入的危害主要体现在以下几个方面:

  1. 数据泄露:攻击者可以利用SQL注入漏洞来获取数据库中的敏感信息,如用户账号、密码、个人信息等。这些泄露的数据可能被用于进一步的攻击,如身份盗用、网络钓鱼等。

  2. 数据篡改:攻击者可以修改数据库中的数据,例如增加、删除、修改记录等。这可能导致数据的完整性受到破坏,影响系统的正常运行。

  3. 命令执行:攻击者可以执行任意的SQL语句,包括创建、删除数据库、修改数据库结构等危险操作。这可能导致系统的瘫痪或被完全控制。

  4. 拒绝服务:攻击者可以利用SQL注入来消耗服务器资源,例如通过构造复杂的SQL查询来耗尽服务器的CPU、内存等资源,导致服务器无法正常工作。

总的来说,SQL注入漏洞给网站和用户带来的危害非常大,因此开发者在设计和编写web应用程序时,应该注意防范SQL注入漏洞,并采取相应的安全措施,如输入验证、参数化查询等。同时,用户也应该保持警惕,避免在不可靠的网站上输入个人敏感信息。

SQL注入漏洞扫描器

SQL注入漏洞扫描器是一种用于检测和识别Web应用程序中的SQL注入漏洞的工具。它通过向目标应用程序发送特定的SQL注入测试输入,然后分析应用程序的响应来确定是否存在SQL注入漏洞。使用SQL注入漏洞扫描器可以帮助发现应用程序中的安全漏洞,从而提供给开发人员修复这些漏洞的机会。它可以扫描整个应用程序或者特定的页面,检测是否存在可能导致SQL注入漏洞的输入点。

一些常见的SQL注入漏洞扫描器包括:

  1. SQLMap:一个功能强大的开源工具,可以自动检测和利用SQL注入漏洞。
  2. Acunetix:一个商业漏洞扫描器,可以检测多种类型的Web应用程序漏洞,包括SQL注入漏洞。
  3. Nessus:一个流行的漏洞扫描器,可以检测和报告多种类型的安全漏洞,包括SQL注入漏洞。
  4. Burp Suite:一个常用的Web应用程序渗透测试工具,可以使用其SQL注入扩展来检测和利用SQL注入漏洞

SQL注入漏洞扫描器代码实现

接下来我们就用python开发一段 SQL注入漏洞的扫描器,代码内容如下:

import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
from fake_useragent import UserAgent

URL = "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.random


def 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 = None
    method = 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"] = action
    details["method"] = method
    details["inputs"] = inputs
    return details


def is_vulnerable(response):
    for error in ERRORS:
        if error in response.content.decode().lower():
            return True
    return False


def 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)
            return

    forms = 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"] + c
                    except:
                        pass
                elif 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)
            break


if __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注入漏洞:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

L51--- 144. 二叉树的前序遍历(深搜)---Java版

1.题目描述 2.思路 二叉树的前序遍历遵循 根左右 (1)方法 preorderTraversal 输入参数: TreeNode root root是二叉树的根节点。 返回值: List 返回一个包含二叉树节点值的列表,这些值按照前序遍历的顺序排列。 功能: 这个方法是前序遍历的…

剖析 Kafka 消息丢失的原因

文章目录 前言一、生产者导致的消息丢失的场景场景1:消息太大解决方案 :1、减少生产者发送消息体体积2、调整参数max.request.size 场景2:异步发送机制解决方案 :1、使用带回调函数的发送方法 场景3:网络问题和配置不当…

React 中的 ErrorBoundary

在 React 中,如果不做任何控制,当组件出现异常时,React 渲染就会停止,页面出现白屏,这种体验很不好。例如当用户输入某些非法数据,而前端都没有进行校验,页面出现白屏。这种情况下,最…

如何训练AI大模型?熬夜爆肝整理大全

随着人工智能技术的快速发展,大型预训练模型在自然语言处理、计算机视觉、语音识别等领域取得了显著成果。这些模型通过在海量数据上进行预训练,能够捕捉到丰富的特征信息,为各种下游任务提供强大的支持。然而,训练AI大模型面临着…

20240616日志:大模型压缩方法DMS

Location: Beijing 1 大模型剪枝 Fig. 1.1大模型压缩-剪枝 剪枝的理论来源基于彩票假设(Lottery Ticket Hypothesis),指在神经网络中存在一种稀疏连接模式,即仅利用网络的一小部分连接(彩票)就足以实现与整…

npm语义化版本和版本运算符

版本号组成 一个完整的版本号,由三部分组成:主版本号(major)、次版本号(minor)、修订版本号(patch),简称X.Y.Z,具体含义: 主版本号(major):项目&#xff08…

环境搭建---单机k8s

配置基础环境 关闭防火墙 [rootVM-20-14-centos ~]# systemctl stop firewalld && systemctl disable firewalld关闭selinux [rootVM-20-14-centos ~]# setenforce 0 && sed -i "s/SELINUXenforcing/SELINUXdisabled/g" /etc/selinux/config禁止s…

【Java】已解决java.lang.NullPointerException异常

文章目录 一、问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.lang.NullPointerException异常 一、问题背景 在Java编程中,java.lang.NullPointerException(空指针异常)是一种常见的运行时异常。当应…

封装音视频编解码和渲染的动态链接库编译和测试

1.动态链接库的编译 生成了以下几个文件 我们把生成的lib文件复制到lib文件夹中 其余三个文件不变动 2.进行测试看是否可以用生成的xcodec.lib库文件里的接口函数 以上是重新创建的新项目,导入了xcodec.lib,其他配置同以前项目 库测试结果 运行显示我们…

【Linux环境下Hadoop部署】— 报错“bash: myhadoop.sh: command not found“

项目场景: 执行 “myhadoop.sh stop” 命令。 问题描述 bash: myhadoop.sh: command not found 原因分析: 查看我们的系统配置,发现没有myhadoop.sh文件存放的路径。 解决方案: 1、执行 “sudo vim /etc/profile” 命令&#xff…

不入耳的蓝牙耳机平价推荐,五大爆款分析测评

开放式耳机在如今社会中已经迅速成为大家购买耳机的新趋势。它作为骨传导耳机,深受用户的喜爱,不仅可以随时感知周围环境,还提供了高质量的音效体验,对于热爱运动的人士而言,高品质的骨传导耳机无疑是首选。同时&#…

看完轻松解决家里灰尘毛絮多难题?除粉尘的空气净化器品牌分享

家里的空气中弥漫着灰尘和毛絮,让人呼吸不畅,也影响着家人的健康。灰尘中含有各种有害物质,如细菌、病毒、花粉等,长期吸入会导致呼吸道疾病、皮肤过敏等问题。尤其是对于有宠物、孩子、过敏人群来说,空气质量更是至关…

【Linux】进程间通信3——system V共享内存

1.system V进程间通信 管道通信本质是基于文件的,也就是说操作系统并没有为此做过多的设计工作,而system V IPC是操作系统特地设计的一种通信方式。但是不管怎么样,它们的本质都是一样的,都是在想尽办法让不同的进程看到同一份由操…

鸿蒙实现自定义Tabbar样式,显示数字红点提示

前言: DevEco Studio版本:4.0.0.600 Tabs的链接参考:OpenHarmony Tabs TabContent的链接参考:OpenHarmony TabContent 通过查看链接参考我们知道可以通过TabContent的tabBar来实现自定义TabBar样式(CustomBuilder&…

SAP ABAP开发:如何读取物料主数据中的长文本?

在SAP ERP系统中,物料的基本描述可存储40个字符,见下图: 但长文本信息如何从系统中读取呢? 在SAP ABAP开发中,读取物料主数据(Material Master Data)中的基本视图(Basic View&#…

UNetMultiLane 多车道线、车道线类型识别【训练+部署】

基于UNet 分割模型增加了检测头来识别车道线的类型(单实线、双黄线等10种),同时可以识别出"所在车道"和"车道线类型"。 训练代码【训练练手代码】 1 数据说明 基于开源数据集 VIL100。其中数据标注了所在的六个车道的车…

《python程序语言设计》2018版第5章第49题l利用turtle绘制乘法口诀表,结果放在最后

2024.06.09 05.49.01version 2024.06.10 05.49.02 经历了一天的奔波,发了两篇博客 开始来到这道题。已经22点了 turtle.penup() turtle.goto(-80, 0) turtle.pendown() turtle.write("Multiplication Table\n", font("", 18, "")) t…

005-OSPF基本配置

OSPF基本配置 OSPF (Open Shortest Path First) 是一种链路状态路由协议,它属于内部网关协议(IGP)类别,用于在自治系统(AS)内部路由 IP 数据包。OSPF 通过使用 Dijkstra 算法计算最短路径树来确定到达每个…

SpringBoot + thymeleaf 修改文件,刷新页面不能实时展示修改后的内容问题解决

修改页面后文件后,刷新页面,内容不变,是因为项目没有编译,没有将新的页面文件编译,以下方法可以完美解决次问题 具体内容请查看:http://www.haozgx.top/blog/article/2

三星S20以上手机中的动态相片及其分解

三星S20以后的相机,相机拍出来的图片,用三星手机自带的“相册”打开之后,还会有“查看动态照片”的选项,点击之后就能查看拍照片时前后2秒左右的视频! 不知道这个功能是不是三星独有的。 这样得到的图片非常大。因为…