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

本文分析了iwebshop系统中利用图片木马上传webshell的方法,介绍了如何绕过文件类型检查,成功上传包含一句话木马的图片,并实现远程控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分类: 网络与安全

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安全防护中及其重要的部分,有着多种躲避和混淆的手法。另外需要再次强调网站前台和后台的安全性其实是同等重要的,后台的薄弱往往给攻击者以可趁之机。
 
修改建议:
对图片文件进行内容检查,通过现有的一次渲染,二次渲染技术来确定图片文件的真实性。
作者aircheng,代码iwebshop_v5.0.180303。 开源电子商务系统iWebShop是一个以php+MySQL进行开发的php电子商务平台系统,它包含了团购、限时抢购、物流跟踪等网店平台所具备的功能。后台具备高效的业务分析管理功能。 iWebShop始终坚持产品易用性和代码的整洁高效性,在国内外多如牛毛的电商产品中始终保持着高效的更新效率和极低的bug出错率,在过去的一年里,bug解决率高达100%!!! 只要是用户在使用我们的产品中遇到bug包括:页面无响应,PHP代码出错异常,样式错位兼容性问题(ie8以下的不予考虑),数据异常等,无论是免费用户还是付费用户 我们都会在24小时内解决掉(由于用户自己二次开发导致的问题除外),甚至于个别使用虚拟主机,或者因为服务器目录权限,php环境组件未安装导致的问题,我们也尽可能的提供帮助, 让所有想安装和体验iWebShop的用户都可以得到机会。 开源电子商务系统iWebShop v5.1.180303 更新日志: 新增部分 新增城市定位接口 IClient::getLocal(); 新增积分兑换商品功能 新增service控制器,用于返回json接口数据,与内部API资源共享,支持扩展 增加新订单智能提醒插件(页面无需刷新),右下角弹出框提示和声音提示(您有新的订单...) 新增商家独立店内分类功能,主页可以显示和筛选店内分类商品 新增后台UI主题sysdm,大尺寸扁平化模板 新增加快钱手机支付接口 新增加快钱退款接口 新增阿里云OSS图片服务插件【单独付费】 新增微信小程序插件,支持微信小程序支付,同步登录等【单独付费】 优化升级部分 全面支持兼容最新php7.2版本,速度性能大幅提升 优化了后台网站设置中的首页幻灯片,导航设置独立出来 首页幻灯片banner入库 优化了及封装了后台模板和商家模板代码,代码缩减30%,便于开发后台和商户新的UI主题 调整数据库外键结构,把部分外键数据的移除改写为逻辑控制,提高运行效率减少锁表延迟 重构内核interceptor事件拦截器 IQuery和IModel增加表分区的扩展功能 IQuery和IModel的关键位置增加拦截器事件触发,可以统一拦截数据库操作 提升短信验证码发送机制的安全性 升级手机号码校验规则,增加166和199号段的使用 订单导出增加配送方式和备注信息方便查阅 增加程序如果发生异常也会让当前数据库写操作回滚 升级js校验类,支持file类型和修复password的提示问题 商家后台模板增加奥森字体引入,使用小图标更加方便快捷 内核过滤类新增加date,datetime,time数据类型的检测 将后台登陆地址从systemadmin改为admin 优化了分页功能,让移动端的分页与电脑端呈现不同的样式 升级快钱PC网关支付接口 修正部分 修复用户密码有特殊字符会被转义的问题从而导致密码错误 淘宝CVS商品导入插件增加商品编码的同步导入 修复分类特价活动修改时数据无法回填问题 修复后台左侧菜单按钮高亮问题 商品详情页面选择规格后重新计算运费 优化控制器加载方式,解决classes扩展类与控制器重名导致异常错误 修复了多个不同规格的货品在同一个订单下无法评论的问题 修复了购物车中优惠金额在小于1元情况下的小数点溢出的问题 修复后台分类批量移动无法选择顶级分类的情况
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值