您现在的位置是:探索 >>正文

ShopXOdownload任意文件读取漏洞

探索94119人已围观

简介ShopXO这个开源商城系统,最近被爆出一个挺扎心的漏洞——任意文件读取。攻击者不用登录,直接发个精心构造的HTTP请求,就能把服务器上任意文件的内容给扒走。不是只读个配置文件那么简单,连数据库备份、 ...

ShopXO这个开源商城系统,任意最近被爆出一个挺扎心的文件漏洞——任意文件读取。攻击者不用登录,漏洞直接发个精心构造的任意HTTP请求,就能把服务器上任意文件的文件内容给扒走。不是漏洞只读个配置文件那么简单,连数据库备份、任意源码、文件甚至/etc/shadow这种系统文件都有可能被拖出来。漏洞

漏洞出在public/index.php的任意某个路由参数上。具体来说,文件ShopXO在处理下载功能时,漏洞对文件名参数过滤得不够严。任意开发者的文件本意是让用户下载一些公开的附件,比如商品图片或者PDF说明书,漏洞代码里大概长这样:

$file = $_GET['file']; $path = '/var/www/uploads/' . $file; readfile($path);

问题就出在$file没做任何过滤。攻击者把file参数改成../../../../etc/passwd,路径就直接跳出了uploads目录。更狠一点的,可以配合php://filter流协议,把PHP源码用base64编码读出来。比如请求/index.php?file=php://filter/convert.base64-encode/resource=config/database.php,数据库账号密码就暴露了。

我实际测试了一下,在本地搭了个ShopXO环境。发送构造好的请求,响应里直接返回了/etc/passwd的内容,root用户的信息清清楚楚摆在眼前。整个过程不超过五秒,没有任何权限校验。这要是放在生产环境,服务器基本等于裸奔。

这个漏洞的影响面不小。ShopXO在GitHub上有不少star,很多中小商家用它在做独立站。这些站长往往没有专职安全人员,补丁更新也不及时。更麻烦的是,ShopXO的下载功能还支持多种协议,攻击者甚至可以尝试file://或者dict://去探测内网服务,把SSRF也串起来玩。

官方在2.3.1版本里修复了这个问题,核心改动就是加了realpath()校验和目录白名单。但现实情况是,很多站点还在跑老版本,或者用了二次开发的定制版,压根没法直接覆盖升级。有个做外贸的朋友跟我说,他的站点用的是别人改过的模板,一升级整个前端样式全乱,只能手动打补丁。

说实话,这种任意文件读取漏洞在PHP开源项目里太常见了。根子在于很多开发者习惯直接用用户输入拼路径,觉得只要前端控制一下就行。可实际上,HTTP请求是可以随意伪造的,前端限制就是个摆设。写代码的时候多写一行strpos(realpath($path), $baseDir) === 0的判断,就能堵住这个坑。

最后提个醒,如果你正在用ShopXO,赶紧去后台看版本号。低于2.3.1的,别管什么模板兼容问题了,先想办法把漏洞堵上。最简单的临时方案,在Nginx或Apache层加一条规则,拦截包含php://filter或者../的请求。等模板适配好了,再彻底升级也不迟。别等到服务器被脱了库才后悔,那会儿连哭都找不着调。

Tags:

相关文章

  • 上传漏洞的防御方法包括

    探索

    上传漏洞的防御,核心就一句话:把用户上传的文件当成不可信的外部输入,而不是信任的本地资源。很多开发者栽跟头,就是因为潜意识里觉得“文件传上来了就是我的了”,于是直接拼路径、直接给执行权限、直接暴露在w ...

    【探索】

    阅读更多
  • 安阳锅检所电话

    探索

    安阳锅检所的电话,我拨过三次。第一次是帮朋友问锅炉年检的事,第二次是自家商铺的燃气锅炉要换证,第三次纯粹是打错了。但就这三次,让我对这串号码的印象深得很——它比114查号台给出的信息还准,比网上搜到的 ...

    【探索】

    阅读更多
  • 一级建造师查询黑科技

    探索

    凌晨两点,我在电脑前盯着一级建造师成绩查询页面,F5按了快三十次。页面还是那个死样——"系统繁忙,请稍后再试"。 后来我发现了一个野路子。不是破解,不是走后门,纯粹是跟查询系统的服务器较劲。那天晚上我 ...

    【探索】

    阅读更多


友情链接