java中相关权限绕过记录
前言
针对java相关代码审计中的权限绕过,需要先了解一下获取URL的相关操作,如下
String requestURI = request.getRequestURI(); // 获取整个URL
System.out.println("1:我是getRequestURI"+requestURI);
StringBuffer requestURL = request.getRequestURL(); //获取url
System.out.println("2:我是getRequestURl"+requestURI);
String servletPath = request.getServletPath(); //获取Servlet的路径
System.out.println("3:我是getServletPath"+requestURI);
结果如下
String requestURI只是输出一个目录路径,eg:/admin
StringBuffer requestURL输出的是完整的地址+目录,eg:http://127.0.0.1/admin
String servletPath输出的是一个目录路径,eg:/admin
针对以上进行一个payload的绕过总结如下,用于一些java题目的鉴权绕过
payload | getRequestURL | getRequestURI | getServletPath |
---|---|---|---|
/index | http://127.0.0.1:8081/index | /index | /index |
/./index | http://127.0.0.1:8081/./index | /./index | /index |
/.;/index | http://127.0.0.1:8081/.;/index | /.;/index | /index |
/a/…/index | http://127.0.0.1:8081/a/../index | /a/…/index | /index |
/a/…;/index | http://127.0.0.1:8081/a/…;/index | /a/…;/index | /index |
/;/index | http://127.0.0.1:8081/;/index | /;/index | /index |
/;a/index | http://127.0.0.1:8081/;a/index | /;a/index | /index |
/%2e/index | http://127.0.0.1:8081/./index | /%2e/index | /index |
/inde%78 | http://127.0.0.1:8081/index | /inde%78 | /index |
可以看到当payload传入的内容经过getServletPath处理之后都变成了/index,但是针对getRequestURL和getRequestURI这俩处理之后就没什么变化。
绕过解释
针对以上情况就可以对不同的处理进行绕过的一些操作
比如设置一种检测,若是在URL当中判断出来存在相关的.css的时候成立,若是不存在.css那么不成立。这种情况比如一些CTF题目,只允许传后缀是.css的文件,我们就可以利用上述的绕过思路,传.css,经过处理依然可以达到我们自己的目标。
大致结果如下
getRequestURL方法 -> 传admin;.css ->成立
getRequestURI方法 -> 传admin;.css ->成立
getServletPath方法 -> 传admin;.css ->不成立
针对判断后缀时使用的equals或endsWith之间的差异:
若是变为equals方法是无法进行绕过的。