SQLMap学习笔记从入门还是到入门详细指南
SQLMap是什么
SQLMap是一个开源的渗透测试工具,可以用来进行自动化检测,利用SQL注入漏洞,获取数据库服务器的权限。它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可以通过外带数据连接的浪执行操作系统命令。
同时它也支持五种注入模式:
- 基于布尔的盲注,即可以根据返回页面判断条件真假的注入
- 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中
- 基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断
- 联合查询注入,可以使用union的情况下的注入
- 堆查询注入,可以同时执行多条语句的执行时的注入
熟练掌握SQLMap工具的使用来进行SQL注入漏洞的检测是每一个脚本小子必备的路程
SQLMap常用命令
SQLMap是比较好学的一个工具,因为实际的日常使用里,用到的占比挺大的,通过SQLMap的-hh命令你可以看到SQLMap里面的各种命令的介绍。看不懂英文可以复制粘贴去翻译,总之要熟能生巧
1.输岀等级V
-V这个命令,在SQLMap里可以理解成是一共输出的信息,他的测试等级是非常多的, 一共分了七个等级出来,这七个等级在测试的时候会在界面里返回不同的内容。
默认是1,也可以在命令后指定-V 3
就是等级3的输出
0:只显示Python的【tracebacks信息】、错误信息【ERROR】和关键信息 【CRITICAL】
1:同时显示普通信息[INFO]和警告信息[WARNING]
2:同时显示调试信息[DEBUG]
3:同时显示注入使用的攻击荷载
4:同时显示HTTP请求
5:同时显示HTTP响应头
6:同时显示HTTP响应体
推荐大家在初学的时候指定为3等级,这样会给出payload,方便于学习,明白当前工具怎么去注入攻击的原理
2.指定目标U
使用参数-u
指定一个URL作为目标,该参数后跟一个表示URL的字符串,还可以指定端口
如:
- sqlmap.py -u "http://192.168.1.107/sql/Less-1/?id=1"
- sqlmap.py -url "http://192.168.1.107/sql/Less-1/?id=1"
3.列库 dbs
在检测出了存在注入后,就要进行对数据库的列举,命令是-dbs
还可列出当前使用的数据库名字--current-db
- sqlmap -u "http://192.168.1.107/sql/Less-1/?id=1" -v 3 -dbs --batch
- sqlmap -u "http://192.168.1.107/sql/Less-1/?id=1" -v 3 --current-db --batch
4.列表 tables
在列出了Web程序的库后,要根据这个库来列出表,命令是-D "库名" --tables
- sqlmap -u "http://192.168.1.107/sql/Less-1/?id=1" -v 3 -D pikachu --tables --batch
5.列岀表中字段 columns
得到了库和表之后,可以根据这个库表来列出表里的字段进行数据的读取
命令是-D "数据库名字" -T "表的名字" --columns
- sqlmap -u "http://192.168.1.107/sql/Less-1/?id=1" -v 3 -D pikachu -T users --columns --batch
6.列岀字段中信息 dump
得到了有哪些字段之后,可以根据这个字段来列出信息进行数据的读取
命令是-D "数据库名字" -T "表的名字" -C 字段1,字段2,字段3 --dump
- sqlmap -u "http://192.168.1.107/sql/Less-1/?id=1" -v 3 -D pikachu -T users -C username,password --dump --batch
7.默许所有操作均为YES batch
我们可以在所有命令后加上--batch
,来默许所有的操作均为yes
这样直接讲命令未免有些枯燥,用一个注入实例来进行讲解
SQLMap使用实例
首先使用sqlmap -u
进行把你怀疑存在注入的URL放进SQLMap里让他进行自动化的测试
SQLMap识别后数据库为“MySQL”是否要继续进行测试
后面SQLMap开始测试数据库的版本号,并进行联合字符的注入测试
测试完毕后,SQLMap提示有四种注入方式
最后得到了信息:
- 后端DBMS是MySQL
- web服务器操作系统:Windows
- web应用技术:PHP 5.6.27, Apache 2.4.23
- 后端DBMS: MySQL >= 5.0
- 获取了记录在
/root/.local/share/sqlmap/output/192.168.1.107
下的文本文件中的数据
获得了注入点,就可以进行数据库名的读取
因为是基于盲注的,所以读库的时候并不会很快速,而且是一个一个的慢慢去列
这里一共列出来十个库,查看一下该Web程序使用的什么库
使用命令:--current-db
得到了这个应用使用的是security库,接下来只要针对这个库进行操作就可以了
这里使用的-D security --tables
参数,但是是用了字典的方式去尝试暴力列举他的表名
另外还有几个常用的命令可以了解一下
- sqlmap -u "http://192.168.1.107/sql/Less-1/?id=1" -D security --tables --users
- sqlmap -u "http://192.168.1.107/sql/Less-1/?id=1" -D security --tables --passwords
—users 列出所有的用户
--passwords 列出数据库用户账号和密码
后面的操作和之前一致,拿到库名跑表名,拿到表面跑字段名,拿到字段名直接拿数据就行了
SQLMap的其他命令
1.level
开始在前面说了,level算是一共注入测试等级,一共是五级,级别越高,检测的内容也就越多,等级大于等于2时会去检测cookie是否有注入,级别大于3时会检测User-Agent和Referer是否有注入。
- sqlmap -u "http://192.168.1.107/sql/Less-1/?id=1" --level 5
2.risk
设置测试风险参数,默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加OR语句的SQL注入测试,默认是1
- sqlmap -u "http://192.168.1.107/sql/Less-1/?id=1" --risk 2
3.指定注入点
SQLMap可以区分一个URL里面的参数来进行注入点测试,但在遇到了一些做了伪静态的网页就无法自动识别了
/admin/1/
类似于这种,SQLMap便无法进行注入测试,但它实际上可能是这样的:/admin.php?-id=1
它只是把参数藏在了 URL中,对于这种网页,直接在参数后加上星号即可
或者这样也是可以的-p 指定的参数名
- sqlmap -u "www.baidu.com/admin/1*"
- sqlmap -u "http://192.168.1.107/sql/Less-1/?id=1" -p id
星号之后,众生平等
4.POST数据
使用参数:-data
在URL后跟上你要提交的POST数据,SQLMap也会去自动测试
- sqlmap -u "http://baidu.com/admin.php” --data="id=1&name=admin"
5.cookie
使用参数:-cookie
这种方式多半来进行cookie的注入检测,设置比较繁琐
也可以像我之前所说的直接设置测试等级为3,会自动测试是否存在cookie注入
- sqlmap -u "http://baidu.com/admin.php” --cookie "customerld=591edabaab5b52292042df8a"
6.从文件载入HTTP请求测试
使用参数:-r
可以可以理解抓个包下来,获取HTTP请求然后保存在文件里,然后让SQLMap自己去 解権就进行测试
可以从burp suite上抓包下来配合SQLMap进行联合使用
- sqlmap -r 1.txt
7.Google搜索进行测试
使用参数:-g
SQLMap会自动爬取谷歌上的搜索结果来进行注入,对带有GET参数的URL进行挨个测试,前提是你能够科学上网
8.超时延迟
使用参数:-timeout
默认的超时时间是30秒,可以使用命令-timeout 31
来进行修改,比如修改为31秒超时
9.注入测试的脚本
使用参数:-tamper
SQLMap是自带了脚本库的,内置的脚本库对payload进行了混淆,可能有些可以有效的规避防火墙规则
在SQLMap的安装目录tamper文件夹内,脚本文件可以自己编写的
转载:猫因的安全
编辑:WANGHAHA
文章地址:https://www.wanghaha.cn/656.html
温馨提示:若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除

共有 0 条评论