一、简介
SQLMap是一个开源的渗透测试工具,可以自动检测和利用SQL漏洞,并且在sectools.org注入工具中一直排名第一。
SQLMap分配有一个强大的搜索引擎,如果URL存在注入漏洞,它就可以从数据库中直接提取数据,如果数据库用户权限较大的话甚至可以直接执行操作系统的一些命令、读取文件。
SQLMap是使用python进行编写的,所以任何一台安装了python的操作兄台那个都可以使用它。
其特点如下:
- 支持众多数据库:Oracle、MySQL、Sql server、access、SQLlite等
- 支持多种注入类型:盲注、UNION注入、报错注入等。
- 支持枚举用户、密码、权限、数据库、表和列。
- 自动识别密码加密方式,并且可以使用字典解密。
- 支持数据导出功能。
二、基本使用命令
使用环境: kali、python3。
要实现的功能 | 注入语法 | 简单讲解 |
---|---|---|
注入点探测 | sqlmap -u "URL" |
使用-u 指定URL进行探测,如果存在注入点,将会显示Web容器和数据库版本 |
获取数据库 | sqlmap -u "URL" --dbs |
使用--dbs 参数获取所有数据库名 |
查看当前数据库 | sqlmap -u "URL" --current-db |
使用--current-db 参数获取当前程序所用数据库 |
列出数据库所有表 | sqlmap -u "URL" --table -D "database_name" |
--table 参数获取数据表,-D 参数指定数据库 |
读取表中字段名 | sqlmap -u "URL" --columns -T "table_name" -D "database_name" |
使用--columns 参数获取字段名,-T 参数指定表名 |
读取字段内容 | sqlmap -u "URL" --dump -C "column1,column2column3" -T "[table_name]" -D "database_name" |
--dump 意为转存数据,-C 指定字段名 |
数据探测到之后,SQLMap会将数据转存到CSQLMap/output目录下,文件以Table.cvs保存。
三、适用参数
SQLMap中的参数对于SQL漏洞测试来说至关重要,只有一一了解了相关参数,才能更好的使用SQLMap并了解其强大之处。
1)测试注入点权限
sqlmap -u "URL" --privileges //测试所有用户权限
sqlmap -u "URL" --privileges -U sa //测试sa用户权限
2)执行Shell命令
sqlmap -u "URL" --os-cmd="ipconfig" //执行ipconfig命令
sqlmap -u "URL" --os-shell //执行系统交互的shell
3)执行SQL命令
sqlmap -u "URL" --sql-shell //返回SQL交互的Shell,可以执行SQL语句
sqlmap -u "URL" --sql-query="sql_commond" //执行的单一SQL语句
4)使用POST提交方式
sqlmap -u "URL" --data "POST参数"
5)设置显示详细等级
sqlmap -u "URL" --dbs -v 1
SQLMap中 -v参数设置了7个等级:
- 0:只显示python的回溯、错误和关键信息
- 1:显示信息和警告信息
- 2:显示调试信息
- 3:有效荷载注入
- 4:显示HTTP请求头
- 5:显示HTTP响应头
- 6:显示HTTP响应页面的内容
6)注入HTTP请求头
sqlmap -u "URL" -r head.txt --dbs //head.txt的内容为HTTP请求头
7)直接连接数据库
sqlmap -d "mysql://admin:[email protected]:3306/testdb" --dbs
8)设置注入等级
sqlmap -u "URL" --level 3 //注入等级共有5个,默认为1
9) 补充参数
1、 sqlmap -u "URL" --data="id=1" //把注入的参数以post放回寺提交
2、 sqlmap -u "URL" --cookie //当web需要登录是通过抓包获取cookie值,用于登录
3、 sqlmap -u "URL" --random-agent //该参数会从sqlmap/txt/user-agent文件红随机产生user-agent。当 level>=3才会去检查user-agent头是否存在注入漏洞
4、其他参数:
--users 列数据库管理用户,当前用户有权限读取包含所有用户的表的权限时,就可以列出所有管理用户。
--current-user 在大多数据库中可以获取到管理数据的用户。
--is-dba 判断当前的用户是否为管理,是的话会返回True。
--proxy 指定一个代理服务器 eg: –proxy http://xxxxx:8080
--os-shell 前提:需要网站的物理路径,其次是需要有FIILE权限。