网站地图    收藏   

主页 > 后端 > 网站安全 >

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

来源:自学PHP网    时间:2015-04-17 11:59 作者: 阅读:

[导读] 网站入侵过程中一个典型方式就是登录后台,上传webshell,本文就是接上篇文章分析如何突破上传限制,上传一个包含一句话木马的图片马。一.找到一个上传位置:当我们找到上传点时...

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

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论