影响范围
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创造条件:
漏洞利用
1:登录网站后台,开启远程图片本地化功能,之后清除缓存(否则无法正常生效)
2:在攻击者本地使用Python启动一个web服务并托管以下php代码
<?phpphpinfo();?>
3:注册一个test1用户,在发帖功能模块中插入img标签并附上恶意文件链接
4:点击发布后,查看我的帖子,获取上传后的文件名
http://es.imzaker.com/zaker/uploads/picture/cache/2_TSUZTOK41630426153.php
5:之后获取用户UID
6:文件路径格式为—/uploads/picture/cache/‘.uid.′/+uid.’/+uid.′/+filename,拼接之后为”/uploads/picture/cache/2/2_TSUZTOK41630426153.php”,之后添加服务器地址并访问
安全建议
1、关闭远程图片本地化下载功能
2、对远程图片本地化下载的图片文件后缀进行检查~
请登录后查看回复内容