sqlmap基本使用

liuyang000 2020-03-05

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*/)进行注入

很多选项没有一一尝试,如有错误,请师傅们指出。

参考链接:

  https://www.freebuf.com/sectool/164608.html

  https://blog.csdn.net/T780000063/article/details/78900474

相关推荐