SQLMap命令使用教程-入门-进阶

566 阅读4分钟

博客内容摘录至《Web安全攻防渗透测试实战指南》电子工业出版社

环境要求

安装sqlmap需要安装python环境,具体python版本见官网要求(http://www.sqlmap.org)下载最新版的sqlmap
下载到python的安装目录下,并把sqlmap目录加到环境变量中。
打开cmd,输入sqlmap.py命令后工具即可正常运行(Kali默认安装)

SQLMap入门

搭建sqli-labs靶场环境进行测试或寻找目标注入点

1.判断是否存在注入

判断目标是否存在注入的命令如下:

root@kali:~# sqlmap -u http://192.168.96.1:82/sqli-labs-master/Less-1/?id=1

结果显示存在注入,如下所示:

在这里插入图片描述

在这里插入图片描述

ps:当注入点后面的参数大于等于两个时,需要加双引号"

2.判断文本中的请求是否存在注入

从文件中加载HTTP请求,sqlmap可以从一个文本文件中获取HTTP请求,这样就可以不设置其他参数(如cookie、POST数据等),txt文件中的内容为Web数据包

-r 一般在存在cookie注入时使用

root@kali:~# sqlmap -r test.txt
3.查询当前用户下的所有数据库

该命令是确定网站存在注入后,用于查询当前用户下的所有数据库。

root@kali:~# sqlmap -u http://192.168.96.1:82/sqli-labs-master/Less-1/?id=1 --dbs

继续注入时--dbs缩写成-D xxx ,xxx是数据库名

在这里插入图片描述

4.获取数据库中的表名

该命令用于查询完数据库后,查询指定数据库中所有的表名。

root@kali:~# sqlmap -u http://192.168.96.1:82/sqli-labs-master/Less-1/?id=1 -D dvwa --tables

在这里插入图片描述

继续注入时--tables缩写成-T

5.获取表中的字段名
root@kali:~# sqlmap -u http://192.168.96.1:82/sqli-labs-master/Less-1/?id=1 -D dvwa -T users --columns

在这里插入图片描述

后续注入缩写成-C

6.获取字段内容
root@kali:~# sqlmap -u http://192.168.96.1:82/sqli-labs-master/Less-1/?id=1 -D dvwa -T users -C user,password --dump

在这里插入图片描述

7.获取数据库的所有用户
root@kali:~# sqlmap -u http://192.168.96.1:82/sqli-labs-master/Less-1/?id=1 --users

在这里插入图片描述

8.获取数据库用户的密码
root@kali:~# sqlmap -u http://192.168.96.1:82/sqli-labs-master/Less-1/?id=1 --passwords

在这里插入图片描述

9.获取当前网站数据库的名称
root@kali:~# sqlmap -u http://192.168.96.1:82/sqli-labs-master/Less-1/?id=1 --current-db

在这里插入图片描述

10.获取当前网站数据库的用户名称
root@kali:~# sqlmap -u http://192.168.96.1:82/sqli-labs-master/Less-1/?id=1 --current-user

在这里插入图片描述

SQLMap进阶

1.--level5:探测等级

参数--level5指需要执行的测试等级,一共有5个等级(1~5),可不加level,默认是1,sqlmap使用的payload可以在xml/payload.xml中看到,也可以根据相应的格式添加自己的payload,其中5级包含的payload最多,会自动破解出cookie、XFF等头部注入。当然。level5的运行速度也比较慢。 这个参数会影响测试的注入点,GET和POST的数据都会进行测试,HTTP cookie在level为2时就会测试,HTTPUser-Agent/Referer头在level为3时就会测试。总之,在不确定哪个payload或参数为注入点时,为了保证全面性,建议使用搞的level至。

2.--is-dba:当前用户是否为管理权限

该命令用于查看当前账户是否为数据库管理员账户,如果是返回true。

3.--roles:列出数据库管理员角色

该命令用户查看数据库用户的角色。如果当前用户有权限读取包含所有用户的表,输入该命令会列举出每个用户的角色,也可以用-U参数指定想看哪个用户的角色该命令仅适用于当前数据库是Oracle的时候

4.--referer:HTTP Referer头

sqlmap可以在请求中伪造HTTP中的referer,当--level参数设定为3或3以上时,会尝试对referer注入。可以用referer命令来欺骗,如--referer baidu.com

5.--sql-shell:运行自定义sql语句

该命令用于执行指定的sql语句 sqlmap -u xxx --sql-shell

6.--os-cmd,--os-shell:运行任意操作系统命令

在数据库为mysql、postgresql或microsoft sql server,并且当前用户有权限使用特定的函数时,如果数据库为mysql、postgresql,sqlmap上传一个二进制库,包含用户自定义的函数sys_execu()和sys_eval(),那么创建的这个两个函数就可以执行系统命令。在microsoft sql server中,sqlmap将使用xp_cmdshell存储过程,如果被禁用(microso sql server 2005及以上版本默认被禁制),则sqlmap会重新启用它;如果不存在,会自动创建 用--os-shell参数可以模拟一个真实的shell,输入想执行的命令。当不能执行多语句时(比如PHP或ASP的后端数据库为Mysql),仍然可以使用INTO OUTFILE写进可写目录,创建一个Web后门。--os-shell支持ASP、ASP.NET、JSP和PHP四种语言(要想执行改参数,需要有数据库管理员权限,也就是--is-dba的值要为True)

7.--file-read:从数据库服务器中读取文件

该命令用于读取执行文件,当数据库为mysql、postgresql或microsoft sql server,并且当前用户有权限使用特定的函数时,读取的文件可以是文本,也可以是二进制文件。

8.--file-write --file-dest:上传文件到数据库服务器中

该命令用于写入本地文件到服务器中,当数据库为mysql、postgresql或microsoft sql server,并且当前用户有权限使用特定的函数时,上传的文件可以是文本,也可以是二进制文件。