EasySNS_V1.6远程图片本地化Getsh-漏洞文库小世界-安全文库-NGC660 安全实验室

EasySNS_V1.6远程图片本地化Getsh

影响范围

EasySNS_V1.7

漏洞类型

服务器GetShell

利用条件

开启bd_image选项

漏洞概述

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

环境搭建

源码下载:https://www.a5xiazai.com/php/139194.html
使用phpstudy搭建环境进行安装:

1630425470875-02454753-9f30-439c-8298-7d9830eec55e

1630425470787-aecfb336-d9f6-422a-b9d5-053843d94d86

网站前台:http://127.0.0.1/

1630425470877-4056887c-a80e-4cea-8fc1-edd239ab34a3

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

1630425470880-a054694a-89d5-43cf-ab8e-f8d5828c7a8a

漏洞分析

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

1630425470940-b1c7a65b-6e10-41cc-b039-bc086310b5ef

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

漏洞利用

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

1630425471643-b56a8f4f-3275-4cd5-95be-5c899ba9838e

2:在攻击者本地使用Python启动一个web服务并托管以下php代码
<?phpphpinfo();?>

1630425471723-2164be57-7732-47c1-972f-16e93aabff51

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

1630426491682-cf0261d9-a80f-4093-9b87-232de6fb235a

1630426492661-7868da40-bfef-4576-a687-6953396f00e2

4:点击发布后,查看我的帖子,获取上传后的文件名
http://es.imzaker.com/zaker/uploads/picture/cache/2_TSUZTOK41630426153.php

1630426493537-59651536-76a7-481b-93cd-9296a82b7ee1

5:之后获取用户UID

1630426493686-24bb6543-eef2-404b-ab29-e1c7cbfcdf88

6:文件路径格式为—/uploads/picture/cache/‘.uid.′/+uid.’/+uid.′/+filename,拼接之后为”/uploads/picture/cache/2/2_TSUZTOK41630426153.php”,之后添加服务器地址并访问

1630426493146-b6e168e4-fd5e-4420-bf81-efe6e8a314c0

安全建议

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

请登录后发表评论

    请登录后查看回复内容