专栏首页区块链安全技术EasySNS_V1.6远程图片本地化Getshell

EasySNS_V1.6远程图片本地化Getshell

影响范围

EasySNS_V1.7

漏洞类型

服务器GetShell

利用条件

开启bd_image选项

漏洞概述

EasySNS_V1.7提供了远程图片本地化功能模块,攻击者可以在发帖功能模块中通过编辑html内容部分并通过img标签来远程加载恶意php文件到本地间接性的实现文件上传从而导致Getshell~

环境搭建

源码下载:https://www.a5xiazai.com/php/139194.html

使用phpstudy搭建环境进行安装:

网站前台:http://127.0.0.1/

网站后台:http://127.0.0.1/admin.php/Login/login.html

漏洞分析

漏洞文件: /app/common.func.php

漏洞函数:getImageToLocal

函数说明:getImageToLocal函数首先通过正则匹配的方式从img标签里面获取链接,之后判断是否是本站地址,如果不是则远程下载图片并保存到本地:

之后跟进这里的getImage函数,在这里首先会将$url两侧的空格去除,之后检查保存路径是否为空、保存文件名称是否为空等,之后获取远程文件,从这里可以看到如果type不为0则会通过curl_exec的方式来获取,可以清楚的看到这里存在SSRF漏洞,而这里的type默认为0,所以此时会进入到else语句中,之后会通过readfile的方式来远程读取文件内容并保存到本地,当url参数可控时可以实现远程copy文件到本地,为远程getshell创造条件:

/* 
*功能:php完美实现下载远程图片保存到本地 
*参数:文件url,保存文件目录,保存文件名称,使用的下载方式 
*当保存文件名称为空时则使用远程文件原来的名称 
*/ 
function getImage($url,$save_dir='',$filename='',$type=0){ 
  
    if(trim($url)==''){ 
        return array('file_name'=>'','save_path'=>'','error'=>1); 
    } 
    $uid = is_login();
    if(trim($save_dir)==''){ 
        $save_dir='./uploads/picture/cache/'.$uid.'/'; 
    } 
    if(trim($filename)==''){//保存文件名 
      
        $ext=strrchr($url,'.');
       /*  if($ext!='.gif'&&$ext!='.jpg'){ 
            return array('file_name'=>'','save_path'=>'','error'=>3); 
        }  */
        $filename=$uid.'_'.generate_password(8).time().$ext; 
        
    } 
   
    if(0!==strrpos($save_dir,'/')){ 
        $save_dir.='/'; 
    } 
    //创建保存目录 
    if(!file_exists($save_dir)&&!mkdir($save_dir,0777,true)){ 
        return array('file_name'=>'','save_path'=>'','error'=>5); 
    } 
    //获取远程文件所采用的方法  
    if($type){ 
        $ch=curl_init(); 
        $timeout=5; 
        curl_setopt($ch,CURLOPT_URL,$url); 
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE );
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout); 
        $img=curl_exec($ch); 
        curl_close($ch); 
    }else{ 
        ob_start();  
        readfile($url); 
        $img=ob_get_contents();  
        ob_end_clean();  
    } 
    //$size=strlen($img); 
    //文件大小  
    
    $fp2=@fopen($save_dir.$filename,'a'); 
    fwrite($fp2,$img); 
    fclose($fp2); 
    unset($img,$url); 
    return array('file_name'=>$filename,'save_path'=>$save_dir.$filename,'error'=>0); 
}

之后全局搜索调用了getImageToLocal的位置,发现在发帖功能模块存在一处可以利用的调用点,用户在发帖时可以通过img标签插入恶意远程文件链接,之后通过远程图片本地化的方式将文件读取到本地服务器端,从而实现写shell的操作:

漏洞利用

Step 1:登录网站后台,开启远程图片本地化功能,之后清除缓存(否则无法正常生效)

Step 2:在攻击者本地使用Python启动一个web服务并托管以下php代码

<?php
phpinfo();
?> 

Step 3:注册一个test1用户,在发帖功能模块中插入img标签并附上恶意文件链接

Step 4:点击发布后,查看我的帖子,获取上传后的文件名

http://es.imzaker.com/zaker/uploads/picture/cache/2_cLtU5uQD1626666926.php

Step 5:之后获取用户UID

Step 6:文件路径格式为—/uploads/picture/cache/'.uid.'/+filename,拼接之后为"/uploads/picture/cache/2/2_cLtU5uQD1626666926.php",之后添加服务器地址并访问

安全建议

1、关闭远程图片本地化下载功能

2、对远程图片本地化下载的图片文件后缀进行检查~

本文分享自微信公众号 - 七芒星实验室(HeptagramSec),作者:Al1ex

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

原始发表时间:2021-07-21

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

我来说两句

0 条评论
登录 后参与评论

相关文章

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

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

    Bypass
  • 【代码审计】后台Getshell的两种常规姿势

    在早些年刚接触web安全的时候,基础套路都是找注入--找后台--找上传点--找数据库备份--Getshell,然而在代码审计的角度,也存在类似的基本操作...

    Bypass
  • 【代码审计】任意文件删除漏洞实例

    在一个网站中,涉及文件删除操作的函数,如果文件名可控,将可能存在任意文件删除漏洞,该漏洞可让攻击者随意删除服务器上的任意文件。好久没更新代码审计的文章了...

    Bypass
  • 【渗透技巧】XSS三重URL编码绕过实例

    跨站脚本攻击(Cross Site Scripting),缩写为XSS,恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中...

    Bypass
  • 【代码审计】任意文件读取漏洞实例

    大多数网站都提供读取文件功能,一般实现过程是,根据参数filename的值,获得该文件在网站上的绝对路径,读取文件。 这里,通过两个任意文件读取漏洞实例...

    Bypass
  • wordpress远程图片文件自动本地化

    直接加到主题的functions.php文件或者是functions.php的引入文件中即可,以后每当在wordpress发布文章时如果文章中含有外链图片就会自...

    子润先生
  • CURL下载远程图片到本地

    素描
  • php采集远程图片保存到本地

    素描
  • 干货 | 渗透之网站Getshell最全总结

    Getshell分为进管理员后台Getshell和不进后台Getshell,本文主要总结常见进后台Getshell和部分。

    HACK学习
  • 企业网站被黑客修改了数据怎么处理

    好多企业网站遭遇黑客攻击,像黑客入侵在互联网只要有数据网络,就能使用数据网络远程操作目标的笔记本电脑、网络服务器、企业网站,从而任意地读取或篡改目标的重要数据,...

    技术分享达人
  • 企业网站被黑客入侵了如何做好安全防护

    好多企业网站遭遇黑客攻击,像黑客入侵在互联网只要有数据网络,就能使用数据网络远程操作目标的笔记本电脑、网络服务器、企业网站,从而任意地读取或篡改目标的重要数据,...

    网站安全专家
  • PHP实现下载远程图片保存到本地

    日常开发过程中,可能会遇到需要通过程序(代码)将网络图片下载到本地或上传至存储空间,下面我们看一组代码。

    小白程序猿
  • 纯代码实现WordPress文章远程图片(外链)自动本地化

    其实有很多插件是可以实现 wordpress 远程图片本地化的,但是有可能插件太多了,会影响网站的性能或者拖累服务器,降低网站的运行速度。不过如果你是代码控,不...

    于飞云计算
  • 文件包含漏洞原理利用方式及修复

    文件包含定义: 服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大量的时间。这意味着您可以创建供所...

    黑白天安全
  • ECSHOP整合百度ueditor编辑器方法 支持远程图片本地化

    image.png ECSHOP商城自带的编辑器实在是不能忍,太难用了。 就换成了百度的ueditor编辑器,本来最近修改了几个商城的,索性自己也记录一次吧。 ...

    速企云
  • iOS字符串的本地化(APP 内的本地化切换) 、nib本地化、图片本地化

    使用本地化功能,可以轻松地将应用程序翻译成多种语言,甚至可以翻译成同一语言的多种方言

    公众号iOS逆向
  • 抓取远程图片到本地,你会用什么函数?

    第一个方法用file_get_contents($url): ? 然后1.gif是你要保存的相对路径,你也可以写成绝对路径。 第二个方法用自己写的原生代码:...

    benny
  • 文件包含漏洞-懒人安全

    一.漏洞描述 文件包含漏洞主要是程序员把一些公用的代码写在一个单独的文件中,然后使用其他文件进行包含调用,如果需要包含的文件是使用硬编码的,那么一般是...

    奶糖味的代言
  • WordPress建站:远程图片本地化,糟了这个技能太好用了「力荐」

    我使用的是 WordPress来做的建站,很多时候是需要做一些伪原创和搬运工作来补充自己的内容,当然最好还是要坚持原创每天写点儿文章做些内容的更新。搬运复制的时...

    wordpress建站吧

扫码关注云+社区

领取腾讯云代金券