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

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

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

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

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

本地监听端口
服务端启动 Shell 进程
服务端创建 Socket 连接连回本地的端口
服务端的 Shell 进程的 stdin & stdout 与 socket 连接的 stdin & stdout 做数据交换

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

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

说一下步骤,这也许不是最优的思路:
利用 Java 调用 mkfifo 在服务器上创建两个命名管道
commands,我们将利用注入点来将要执行的命令写入此管道,同时 shell 进程将从此管道读取命令并执行
output,shell 进程的所有输出将写入此管道,同时我们利用注入点从此管道内读取输出
利用 Java 在数据库服务器上启动 shell 进程,并用 Java 代码完成上面第 1 点提到的那些功能。
用一个自己写的脚本代替 nc,来处理客户端的事情

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

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

最后放一下 PoC 的图片
在这里插入图片描述
客户端 Python 脚本
在这里插入图片描述
原文由n1nty 提供
阅读原文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值