长亭百川云 - 文章详情

Oracle 注入不能出网时获得一个交互式 Shell

n1nty

51

2024-07-15

不会入侵渗透,水一篇低水平的文章,只写思路,有错误请指点。

场景/问题

Oracle 注入可利用 Java 执行命令,但数据库服务器不能连外网,如何获取一个可交互的 Shell?

反弹 Shell 的原理

一般在反弹 Shell 前,我们需要利用 nc 监听一个本地端口。然后在目标主机上启动一个 Shell 进程,并创建一个 socket 连接到之前 nc 监听的本地端口,将该 Shell 进程的 stdin 与 stdout 与 socket 的 stdin 与 stdout 做数据交互。

障碍

因数据库服务器无法出网,所以无法让数据库服务器利用 Socket 连回来。我们重新审视一下反弹 Shell 所需要的步骤:

  1. 本地监听端口

  2. 服务端启动 Shell 进程

  3. 服务端创建 Socket 连接连回本地的端口

  4. 服务端的 Shell 进程的 stdin & stdout 与 socket 连接的 stdin & stdout 做数据交换

第 3 步与第 4 步无法实现。 但是 Socket 只是用来做数据交换的,不通过这个反连的 Socket,也可以达到同样的数据交换的目的。

我的思路

对注入点的要求:可以回显数据。

说一下步骤,这也许不是最优的思路:

  1. 利用 Java 调用 mkfifo 在服务器上创建两个命名管道

  2. commands,我们将利用注入点来将要执行的命令写入此管道,同时 shell 进程将从此管道读取命令并执行

  3. output,shell 进程的所有输出将写入此管道,同时我们利用注入点从此管道内读取输出

  4. 利用 Java 在数据库服务器上启动 shell 进程,并用 Java 代码完成上面第 1 点提到的那些功能。

  5. 用一个自己写的脚本代替 nc,来处理客户端的事情

交换数据的通道由一个反连的 Socket 变成了 HTTP 的连接(注入点)。所以,这本质上应该算是一个正向的 Shell,随后利用 Python 将其提升为一个可交互的 Shell。

在写 PoC 的过程中,遇到了不少坑,印象最深的是不同的 Oracle 数据库连接,Java 运行环境是隔离的。

最后放一下 PoC 的图片

客户端 Python 脚本

原文发在了 ThreatHunter 上。

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2