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

 

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

参考链接:

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

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