SQLMap进阶:参数讲解
(1)--level 5:探测等级。
参数“--level 5”指需要执行的测试等级,一共有5个等级(1~5级),可不加“level”,默认是1级。可以在xml/payloads.xml中看到SQLMap使用的Payload,也可以根据相应的格式添加自己的Payload,其中5级包含的Payload最多,会自动破解Cookie、XFF等头部注入。当然,5级的运行速度也比较慢。
这个参数会影响测试的注入点,GET和POST的数据都会进行测试,HTTP Cookie在等级为2时会进行测试,HTTP User-Agent/Referer头在等级为3时会进行测试。总之,在不确定哪个Payload或参数为注入点时,为了保证全面性,建议使用高的等级值。
(2)--is-dba:当前用户是否有管理权限。
该命令用于查看当前账户是否为数据库管理员账户,命令如下:
python sqlmap.py –u "http://10.211.55.6/Less-1/?id=1" --is-dba
在本例中输入该命令,会返回True,如图3-15所示。
(3)--roles:查看数据库用户的角色。
该命令用于查看数据库用户的角色。如果当前用户有权限读取包含所有用户的表,则输入该命令会列举出每个用户的角色,也可以用参数“-U”指定查看某个用户的角色。该命令仅适用于当前数据库是Oracle时。在本例中输入该命令的结果如图3-16所示。
(4)--referer:HTTP Referer头。
SQLMap可以在请求中伪造HTTP中的Referer,当参数“--level”设定为3或3以上时,会尝试对Referer注入。可以使用参数“--referer”伪造一个HTTP Referer头,如--referer http://10.211.55.6。
(5)--sql-shell:运行自定义SQL语句。
该命令用于执行指定的SQL语句,命令如下:
python sqlmap.py –u "http://10.211.55.6/Less-1/?id=1" --sql-shell
假设执行“select * from security.users limit 0,2”语句,结果如图3-17所示。
(6)--os-cmd或--os-shell:运行任意操作系统命令。
当数据库为MySQL、PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数时,可以使用参数“--os-cmd”执行系统命令。如果数据库为MySQL或PostgreSQL,则SQLMap会上传一个二进制库,包含用户自定义的函数sys_exec()和sys_eval(),通过创建的这两个函数就可以执行系统命令。如果数据库为Microsoft SQL Server,则SQLMap将使用xp_cmdshell存储过程执行系统命令。如果xp_cmdshell被禁用(在Microsoft SQL Server 2005及以上版本中默认被禁用),则SQLMap会重新启用它;如果xp_cmdshell不存在,则SQLMap将创建它。
使用参数“--os-shell”可以模拟一个真实的Shell,与服务器进行交互。当不能执行多语句时(如PHP或ASP的后端数据库为MySQL),SQLMap可以通过SELECT语句中的INTO OUTFILE在Web服务器的可写目录中创建Web后门,从而执行命令。参数“--os-shell”支持ASP、ASP.NET、JSP和PHP四种语言。
(7)--file-read:从数据库服务器中读取执行文件。
该命令用于从数据库服务器中读取执行文件。当数据库为MySQL、PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数时,读取的文件可以是文本,也可以是二进制文件。下面以Microsoft SQL Server 2005为例,说明参数“--file-read”的用法,命令如下:
$ python sqlmap.py -u http://10.211.55.6/Less-1/?id=1 --file-read "/etc/passwd" -v 1
[...]
[17:45:15] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: Apache 2.4.7, PHP 5.5.9
back-end DBMS: MySQL >= 5.5
[17:45:15] [I