1. sqlmap简介
sqlmap支持MySQL, Oracle,PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird,Sybase和SAP MaxDB等数据库的各种安全漏洞检测。
sqlmap支持五种不同的注入模式:
- 基于布尔的盲注,即可以根据返回页面判断条件真假的注入;
- 基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断;
- 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中;
- 联合查询注入,可以使用union的情况下的注入;
- 堆查询注入,可以同时执行多条语句的执行时的注入。
2. 下载及安装
(1)linux下git直接安装
gitclone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
(2)windows下安装
windows下下载sqlmap的压缩包,解压后即可使用。但需要一些组件包的支持,需要有python2.7.x或者2.6.x环境支持。
(3)kali及PentestBox默认安装sqlmap
3. SQL使用参数详解
本文以SQLmap 1.1.8-8版本为例,对其所有参数进行详细的分析和讲解,便于在使用时进行查询。
用法:
sqlmap.py [
选项
]
3.1 选项
3.2 目标
在这些选项中必须提供至少有一个确定目标
3.3 请求
参考文章:sqlmap设置参数
这些选项可以用来指定如何连接到目标URL
- -method=METHOD 强制使用给定的HTTP方法(例如put)
3.4 优化
这些选项可用于优化sqlmap性能
3.5 注入
这些选项可用于指定要测试的参数、提供自定义注入有效载荷和可选的篡改脚本。
3.6 检测
这些选项可以用来指定在SQL盲注时如何解析和比较HTTP响应页面的内容
3.7 技巧
这些选项可用于调整具体的SQL注入测试
3.8 指纹
3.9 枚举
这些选项可以用来列举后端数据库管理系统的信息、表中的结构和数据。此外,您还可以运行自定义的SQL语句。
3.10 暴力
这些选项可以被用来运行暴力检查
3.11 用户自定义函数注入
这些选项可以用来创建用户自定义函数
3.12 访问文件系统
这些选项可以被用来访问后端数据库管理系统的底层文件系统
3.13 操作系统访问
这些选项可以用于访问后端数据库管理系统的底层操作系统
3.14 Windows注册表访问
这些选项可以被用来访问后端数据库管理系统Windows注册表
3.15 一般选项
这些选项可以用来设置一些一般的工作参数
3.16 其他
4.实际利用
4.1 检测和利用SQL注入
1.手工判断是否存在漏洞
对动态网页进行安全审计,通过接受动态用户提供的GET、POST、Cookie参数值、User-Agent请求头。
如果url1访问结果跟原始网页一致,而url2跟原始网页不一致,有出错信息或者显示内容不一致,则证明存在SQL注入。
2. sqlmap自动检测
检测语法:
sqlmap.py -u
http://192.168.136.131/sqlmap/mysql/get_int.php?id=1
技巧:在实际检测过程中,sqlmap会不停的询问,需要手工输入Y/N来进行下一步操作,可以使用参数“--batch”命令来自动答复和判断。
3. 寻找和判断实例
通过百度对“inurl:news.asp?id=site:edu.cn”、“inurl:news.php?id= site:edu.cn”、“inurl:news.aspx?id=site:edu.cn”进行搜索,搜索news.php/asp/aspx,站点为edu.cn,如图1所示。随机打开一个网页搜索结果,如图2所示,如果能够正常访问,则复制该URL地址。

图1搜索目标

图2测试网页能否正常访问
将该url使用sqlmap进行注入测试,如图3所示,测试结果可能存在SQL注入,也可能不存在SQL注入,存在则可以进行数据库名称,数据库表以及数据的操作。本例中是不存在SQL注入漏洞。

图3检测URL地址是否存在漏洞
4. 批量检测
将目标url搜集并整理为txt文件,如图4所示,所有文件都保存为tg.txt,然后使用“
sqlmap.py-m tg.txt
”,注意tg.txt跟sqlmap在同一个目录下。
图4批量整理目标地址
4.2 直接连接数据库
sqlmap.py -d"mysql://admin:admin@192.168.21.17:3306/testdb" -f --banner --dbs--users
4.3数据库相关操作
5.SQLMAP实用技巧
1. mysql的注释方法进行绕过WAF进行SQL注入
(1)修改
C:\Python27\sqlmap\tamper\halfversionedmorekeywords.py
(2)修改
C:\Python27\sqlmap\xml\queries.xml
(3)使用sqlmap进行注入测试
其它绕过waf脚本方法:
(4)tamper目录下文件具体含义:
space2dash.py
绕过过滤‘=’ 替换空格字符(”),(’–‘)后跟一个破折号注释,一个随机字符串和一个新行(’n’)
greatest.py
绕过过滤’>’ ,用GREATEST替换大于号。
apostrophenullencode.py
绕过过滤双引号,替换字符和双引号。
halfversionedmorekeywords.py
当数据库为mysql时绕过防火墙,每个关键字之前加注释,添加mysql版本评论
base64encode.py
对给定的payload全部字符使用Base64编码
modsecurityversioned.py
过滤空格,包含完整的查询版本注释
sp_password.py
从DBMS日志有效载荷的末尾追加sp_password’以自动模糊处理
chardoubleencode.py
双url编码(不处理以编码的)
randomcomments.py
用/**/分割sql关键字
securesphere.py
追加特制的字符串
space2comment.py
替换空格字符串(‘‘) 使用注释‘/**/’
apostrophemask.py
用UTF-8全角字符替换单引号字符
appendnullbyte.py
在payload末尾添加空字符编码
between.py
分别用“NOT BETWEEN 0 AND #”替换大于号“>”,“BETWEEN # AND #”替换等于号“=”
bluecoat.py
在SQL语句之后用有效的随机空白符替换空格符,随后用“LIKE”替换等于号“=”
charencode.py
对给定的payload全部字符使用URL编码(不处理已经编码的字符)
charunicodeencode.py
对给定的payload的非编码字符使用Unicode URL编码(不处理已经编码的字符)
concat2concatws.py
用“CONCAT_WS(MID(CHAR(0), 0, 0), A, B)”替换像“CONCAT(A, B)”的实例
equaltolike.py
用“LIKE”运算符替换全部等于号“=”
ifnull2ifisnull.py
用“IF(ISNULL(A), B, A)”替换像“IFNULL(A, B)”的实例
lowercase.py
用小写值替换每个关键字字符,绕过对IFNULL过滤
modsecurityzeroversioned.py
用当中带有数字零的注释包围完整的查询
multiplespaces.py
在SQL关键字周围添加多个空格
nonrecursivereplacement.py
用representations替换预定义SQL关键字,适用于过滤器
overlongutf8.py
转换给定的payload当中的所有字符
percentage.py
在每个字符之前添加一个百分号
randomcase.py
随机转换每个关键字字符的大小写
space2hash.py
用磅注释符“#”其次是一个随机字符串和一个换行符替换空格符
space2morehash.py
用磅注释符“#”其次是一个随机字符串和一个换行符替换空格符
space2mssqlblank.py
用一组有效的备选字符集当中的随机空白符替换空格符
space2mssqlhash.py
用磅注释符“#”其次是一个换行符替换空格符
space2mysqlblank.py
用一组有效的备选字符集当中的随机空白符替换空格符
space2mysqldash.py
用破折号注释符“--”其次是一个换行符替换空格符
space2plus.py
用加号“+”替换空格符
space2randomblank.py
用一组有效的备选字符集当中的随机空白符替换空格符
unionalltounion.py
用“UNION SELECT”替换“UNION ALL SELECT”
unmagicquotes.py
用一个多字节组合%bf%27和末尾通用注释一起替换空格符,宽字符绕过 GPCaddslashes
varnish.py
添加一个HTTP头“X-originating-IP”来绕过WAF
versionedkeywords.py
用MySQL注释包围每个非函数关键字
versionedmorekeywords.py
用MySQL注释包围每个关键字,注释绕过
xforwardedfor.py
添加一个伪造的HTTP头“X-Forwarded-For”来绕过WAF
2. URL重写SQL注入测试
value1为测试参数,加“*”即可,sqlmap将会测试value1的位置是否可注入。
3. 列举并破解密码哈希值
当前用户有权限读取包含用户密码的权限时,sqlmap会现列举出用户,然后列出hash,并尝试破解。
4. 获取表中的数据个数
5.对网站secbang.com进行漏洞爬去
6.基于布尔SQL注入预估时间
7.使用hex避免字符编码导致数据丢失
8.模拟测试手机环境站点
9.智能判断测试
10.结合burpsuite进行注入
(1)burpsuite抓包,需要设置burpsuite记录请求日志
(2)指定表单注入
11.sqlmap自动填写表单注入
自动填写表单:
12.读取linux下文件
13.延时注入
14. sqlmap 结合burpsuite进行post注入
参考文章:sqlmap进行post注入两种方式
结合burpsuite来使用sqlmap:
(1)浏览器打开目标地址http://www.antian365.com
(2)配置burp代理(127.0.0.1:8080)以拦截请求
(3)点击登录表单的submit按钮
(4)Burp会拦截到了我们的登录POST请求
(5)把这个post请求复制为txt, 我这命名为post.txt 然后把它放至sqlmap目录下
(6)运行sqlmap并使用如下命令:
15.sqlmap cookies注入
参考文章:sqlmap设置参数
默认情况下SQLMAP只支持GET/POST参数的注入测试,但是当使用–level 参数且数值>=2的时候也会检查cookie里面的参数,当>=3的时候将检查User-agent和Referer。可以通过burpsuite等工具获取当前的cookie值,然后进行注入:
16.mysql提权
(1)连接mysql数据打开一个交互shell:
(2)利用sqlmap上传lib_mysqludf_sys到MySQL插件目录:
17.执行shell命令
18.延时注入
19.waf脚本绕过
参考文章
本文章仅提供学习使用,有任何问题,欢迎您在底部评论区留言,一起交流~
- Author:KoGe
- URL:https://www.shipangshuo.xyz/article/sqlmap
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts