Oracle 注入不能出网时获得一个交互式 Shell
2017-9-29 20:54:2 Author: mp.weixin.qq.com(查看原文) 阅读量:13 收藏

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

场景/问题

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 在服务器上创建两个命名管道

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

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

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

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

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

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

最后放一下 PoC 的图片

客户端 Python 脚本

原文发在了 ThreatHunter 上。


文章来源: https://mp.weixin.qq.com/s?__biz=MzI5Nzc0OTkxOQ==&mid=2247483723&idx=1&sn=3268e9a63183b2d463e19875b88f731a&chksm=ecb11dbbdbc694ad63572f42acefb3a60326ffaf03a4242401891f3265231485059bfeac901c&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh