sqlmap参数说明

特殊参数

-v

-v表示显示sqlmap在进行注入时的详细信息,一共有七个等级,默认为1

  • 0,只显示python错误以及严重的信息
  • 1,同时显示基本信息和警告信息
  • 2,同时显示debug信息
  • 3,同时显示注入的payload
  • 4,同时显示HTTP请求
  • 5,同时显示HTTP响应头
  • 6,同时显示HTTP响应页面

–level

默认情况下SQLMAP只支持GET/POST参数的注入测试,但是当使用–level参数且数值>=2的时候会进行cookie注入测试;当>=3时,会进行User-Agent和Referer的注入测试。

–risk

risk设定风险等级,默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加OR测试语句。

-f或者–fingerprint

执行检查广泛的DBMS版本指纹,这个参数用得不多。

-u或者–url

最常见、常用的用法

python sqlmap.py -u "http://www.example.com/index.php?id=1"

-r

从文本文件中获取HTTP请求(这就要求此文本文件保存的信息是HTTP请求的),这样HTTP就可以利用HTTP请求中的参数。

例如文本文件中的内容为:

POST /index.php HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/4.0
id=1

那么使用sqlmap进行注入时,sqlmap自动将HOST和User-Agent设置为文本文件中的值

当处理的请求是HTTPS的时候,则需要使用–force-ssl参数来使用,或者在HOST头后面加上:443。

POST请求

参数:–data

–data主要适用于POST方式提交。用法如下:

python sqlmap.py -u "http://www.example.com/index.php" --data="id=1"

cookie相关

参数:-cookie,–load-cookies,–drops-set-cookie

cookie参数在sqlmap中的应用主要是有2个方面:

  • Web应用需要进行登陆的时候
  • 测试cookie注入

如果需要使用cookie进行登陆,则需要通过–cookie将cookie进行赋值。在HTTP请求中,遇到Set-cookie时,sqlmap会自动获取并且在以后的请求中加入,并且会尝试SQL注入。

当–level>=2时,则会尝试进行cookie的注入测试。

User-Agent相关

参数:–user-agent,–random-agent

默认情况下sqlmap的HTTP请求头中的User-Agent是:

sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org)

可以使用–user-agent参数来进行修改,同时也可以使用–random-agent参数来随机化的从./txt/user-agents.txt中获取。

当–level参数设定为3或者是3以上时,会尝试对User-Agent进行注入测试。

Referer头

参数:–referer

sqlmap可以在请求中伪造HTTP中的referer,用法与user-agent的用法相同。当–level参数设定为3或者3以上的时候会尝试对referer注入。

参数:–delay

设定两次请求间的时间间隔。若设定为0.5则表示间隔时间是半秒,默认是没有延迟

参数:–tiemout

设定超时时间,主要是设定一个请求超过多久被判定为超市。弱设定为10.5表示是10.5秒,默认是30秒。

参数:–retries

当请求超时时,设定重新尝试连接次数,默认是3次。

参数:–skip-urlencode

关闭URL编码,这个参数一般用得比较少。目前几乎所有的web服务器都支持RFC标准

执行自定义Python代码

参数:–eval

在有些时候,需要根据一个参数的变化而修改另一个参数,才能形成正常的请求。此时就需要使用到–eval。例子如下

python sqlmap.py -u "http://www.example.com?id=1&hash=c4ca4238a0b923820dcc509a6f75849b" --eval="import hashlib;hash=hashlib.md5(id).hexdigest()"

上面的请求参数中的hash值就是id值的md5,这时就需要使用到自定义Python代码了。

注入测试参数

参数:-p,–skip

-p,表示的就是需要进行注入测试的参数。例如,-p “id,user-agent”

–skip,表示不不需要进行测试的参数,例如–skip=”user-agent”

伪静态注入

很多框架会使用URL重写技术,此时sqlmap就无法使用参数注入,但是可以在需要测试的参数后面加上*

例子如下

python sqlmap.py -u "http://blog.spoock.com/2016/09/04*/sqli-bypass/"

绕WAF

参数:–tamper

很多时候有WAF设备会拦截sqlmap的注入,此时就需要使用–tamper对注入的SQL语句进行变形来进行绕过。所有的tamper脚本都是在sqlmap中的tamper中的脚本有定义的,可以进入到tamper目录下进行查看。

python sqlmap.py - u"http://www.example.com?id=1" --tamper tamper/between.py,tamper/randomcase.py

提取数据

参数:-b,–banner

检索数据库管理系统的标识

参数:–current-user

返回当前数据库的管理用户

当前数据库

参数:–current-db

返回当前连接的数据库

DBA检测

参数:–is-dba

检测当前的管理用户是否是DBA

数据库枚举

参数:–dbs

如果当前的用户可以读取所有的数据库的信息,即可列出所有的数据库

数据库表枚举

参数:–tables -D someDatabase

列出某个数据库(someDatabase)中所有的表名,例子如下:

python sqlmap.py -u "http://www.example.com?id=1" --tables -D cms

字段枚举

参数:–columns -D someDatabase -T someTable

列出someDatabase数据库中的someTable表中的所有的字段信息。如果没有使用-D参数指定某个数据库的时候,则默认使用当前数据库

Python sqlamp.py -u "http://www.example.com?id=1" --columns -D cms -T users

获取表中数据的数目

参数:–count

使用–count就可以获取表中数据的个数

python sqlmap.py -u"http://www.example.com?id=1" --count -D cms
上述的sqlmap的语句会列出在cms数据库中所有的表的数据

下载表中的数据

参数:–dump -D someDatabase -T someTable -C someColumns

使用–dump就可以将某个表中的数据下载到本地。指定-C的值表示是下载某一列所有的数据,如果没有指定则是下载表中所有的数据。

python sqlmap.py -u "http://www.example.com?id=1" --dump -D cms - T users
MISC

自定义SQL语句

参数:–sql-query,–sql-shell

虽然sqlmap会自行选择sql语句进行测试,但是也可以选择执行自定义的SQL语句。

python sqlmap.py -u"http://www.example.com?id=1" --sql-query "select database()"

获取shell

参数:–os-cmd,–os-shell

使用–os-shell参数可以模拟一个真实的shell,在此shell上可以输入任何想执行的命令。

这个命令平时使用得较少,等有一定的使用体会再来进行详细的补充说明。

参考:https://blog.spoock.com/2016/10/09/sqlmap-notes/

参数:–proxy

常用语法:配合ssr或者ss使用。

–proxy=sock5://127.0.0.1:1080

为您推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注

1条评论