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

分类: 网络与安全

http://blog.chinaunix.net/uid-29068527-id-3847279.html



网站入侵过程中一个典型方式就是登录后台,上传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安全防护中及其重要的部分,有着多种躲避和混淆的手法。另外需要再次强调网站前台和后台的安全性其实是同等重要的,后台的薄弱往往给攻击者以可趁之机。
 
修改建议:
对图片文件进行内容检查,通过现有的一次渲染,二次渲染技术来确定图片文件的真实性。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值