当前位置:首页 >> 网络通讯 >> 网络安全 >> 内容

iwebshop 上传图片木马 0day代码分析及修复方法

时间:2013/4/19 12:10:00 作者:平凡之路 来源:xuhantao.com 浏览:

网站入侵过程中一个典型方式就是登录后台,上传webshell,本文就是接上篇文章分析如何突破上传限制,上传一个包含一句话木马的图片马。

  一.找到一个上传位置:涛涛电脑知识网


当我们找到上传点时,首先想到的就是直接传webshell上去,可惜iwebshop采用的是swfupload组件进行上传,该组件限定了上传文件的类型,不能直接上传php文件。(当然可以通过burpsuite等代理工具修改上传数据流来突破限制,这种方法没有尝试,但是从后面代码的分析来看是可以的)
 
二.分析代码突破限制
通过文件定位到goods_img_upload()函数
/iwebshop/controllers/ -> goods.php (source)
 


该函数主要是获取图片文件和缩略图文件信息,然后通过实例化PhotoUpload类对象来调用run方法。
/iwebshop/classes/ -> photoupload.php (source)

最关键的是调用了IUpload中的execute函数,也就是真正处理上传逻辑的地方。
/iwebshop/lib/core/util/ -> upload_class.php (source)


在这里就是在上传时对文件的检查,其中一个关键点就是getFileType函数,对上传文件做检查,如果通过了检查(是图片文件),则上传成功。那我们来看他是怎么检查的。
/iwebshop/lib/core/util/ -> file_class.php (source)


很显然,该应用的检查方式仅仅是取文件的前两个字节,通过和php的unpack()返回内容进行比较来确认文件类型(关于unpack请自行查阅php手册)。那么很自然的我们想到,可以通过上传一个jpg图片木马来突破限制,上传webshell。
 
构造jpg图片木马的方式很简单,首先准备一张图片1.jpg,一个写好一句话木马的php文件,使用以下语句:

生成一句话木马2.jpg。
我们通过vim来查看该图片的十六进制内容:
文件头:


文件尾:

可以看到文件头仍然表示这是一个jpg文件,而我们在文件最后插入了一句话木马。
 
好了,现在我们把2.jpg上传到服务器,并找到图片位置:


使用菜刀连接之:


一句话木马成功连接。
 
总结:
这个漏洞出现的原因就是对上传文件没有做很好的内容检查,以为检查了文件头就万事大吉,殊不知上传漏洞是web安全防护中及其重要的部分,有着多种躲避和混淆的手法。另外需要再次强调网站前台和后台的安全性其实是同等重要的,后台的薄弱往往给攻击者以可趁之机。
 
修改建议:
对图片文件进行内容检查,通过现有的一次渲染,二次渲染技术来确定图片文件的真实性。

相关文章
  • 没有相关文章
  • 徐汉涛(www.xuhantao.com) © 2024 版权所有 All Rights Reserved.
  • 部分内容来自网络,如有侵权请联系站长尽快处理 站长QQ:965898558(广告及站内业务受理) 网站备案号:蒙ICP备15000590号-1