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

admin 2017年9月29日20:54:01评论75 views字数 832阅读2分46秒阅读模式

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


场景/问题

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 的图片

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


客户端 Python 脚本

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


原文发在了 ThreatHunter 上。

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2017年9月29日20:54:01
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Oracle 注入不能出网时获得一个交互式 Shellhttps://cn-sec.com/archives/277180.html

发表评论

匿名网友 填写信息