日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java安全之Filter權限繞過的實現

瀏覽:181日期:2022-08-12 08:51:00
前言

在一些需要挖掘一些無條件RCE中,大部分類似于一些系統大部分地方都做了權限控制的,而這時候想要利用權限繞過就顯得格外重要。在此來學習一波權限繞過的思路。

0x01 權限控制實現

常見的實現方式,在不調用Spring Security、Shiro等權限控制組件的情況下,會使用Filter獲取請求路徑,進行校驗。

編寫一個servlet

package com.nice0e3;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;@WebServlet('/helloServlet')public class helloServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().write('hello!!!'); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response); }}

定義一個Filter

package com.nice0e3.filter;import com.nice0e3.User;import javax.servlet.*;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;import java.io.IOException;@WebFilter('/*')public class demoFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {HttpServletRequest request = (HttpServletRequest) req;String uri = request.getRequestURI();StringBuffer requestURL = request.getRequestURL();System.out.println(requestURL);if(uri.startsWith('/system/login')) { //登陸接口設置⽩白名單,即登錄頁面 System.out.println('login_page'); resp.getWriter(). write('login_page'); chain.doFilter(request, resp);}else if(uri.endsWith('.do')||uri.endsWith('.action')) {//檢測當前⽤戶是否登陸 User user =(User) request.getSession().getAttribute('user'); if(user == null) {resp.getWriter(). write('unauthorized access'); //未授權訪問System.out.println('unauthorized access');resp.getWriter(). write('go to login_page');//跳轉登錄System.out.println('go to login_page'); }} } public void init(FilterConfig config) throws ServletException { }}

這里使用 request.getRequestURI();獲取URI為 /system/login開頭 則直接放行。結尾,為.do和.action的請求去做校驗,獲取session有沒有user的值,沒有的話即返回unauthorized access,如果不為.do和.action的請求或session中存在user即放行。

Java安全之Filter權限繞過的實現

訪問main頁面,顯示未授權訪問并且跳轉到登錄的頁面

Java安全之Filter權限繞過的實現

在Java中通常會使用request.getRequestURL()和request.getRequestURI()這兩個方法獲取請求路徑,然后對請求路徑做校驗。

../繞過方式

這里采用../的方式繞過

Java安全之Filter權限繞過的實現

Java安全之Filter權限繞過的實現

這里就繞過了,權限控制,直接能訪問到main,而不是顯示未授權訪問。在繞過時候可以找一些白名單的路徑,然后使用../去繞過。

payload:/system/login/../../login/main.do

繞過原理分析

上圖可以看到我們前面為system/login開頭

Java安全之Filter權限繞過的實現

符合匹配的規則,而匹配上該規則后則是直接放行,讓系統認為訪問路徑是一個登錄的路徑,但在后面加入2個../進行跳轉到根目錄,并且拼接上login/main.do,這時候實際訪問到的是http://127.0.0.1/login/main.do。

但使用

StringBuffer requestURL = request.getRequestURL();if(requestURL.toString().startsWith('/system/login'))

Java安全之Filter權限繞過的實現

Java安全之Filter權限繞過的實現

request.getRequestURL();該方法獲取URL是攜帶http://127.xxx等信息的。其實這里比較廢話,因為驗證首部的字符路徑的話,使用 request.getRequestURI();來獲取請求路徑部分來校驗。

URL截斷繞過

基于前面Filter代碼將../進行過濾

package com.nice0e3.filter;import com.nice0e3.User;import javax.servlet.*;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;import java.io.IOException;@WebFilter('/*')public class demoFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {HttpServletRequest request = (HttpServletRequest) req;String uri = request.getRequestURI();if(uri.contains('./')){ resp.getWriter().write('error'); return;}StringBuffer requestURL = request.getRequestURL();System.out.println(requestURL);if(uri.startsWith('/system/login')) { //登陸接口設置⽩白名單,即登錄頁面 System.out.println('login_page'); resp.getWriter(). write('login_page'); chain.doFilter(request, resp);}else if(uri.endsWith('.do')||uri.endsWith('.action')) {//檢測當前⽤戶是否登陸 User user =(User) request.getSession().getAttribute('user'); if(user == null) {resp.getWriter(). write('unauthorized access'); //未授權訪問System.out.println('unauthorized access');resp.getWriter(). write('go to login_page');//跳轉登錄System.out.println('go to login_page'); }} chain.doFilter(request,resp); } public void init(FilterConfig config) throws ServletException { }}

添加多了一個uri.contains('./')做過濾只要包含./字符直接報錯。

Java安全之Filter權限繞過的實現

Java安全之Filter權限繞過的實現

這時候會報錯,可見上圖。可;進行繞過

Java安全之Filter權限繞過的實現

Java安全之Filter權限繞過的實現

payload:/login/main.do;123

繞過分析

URL中有一個保留字符分號;,主要為參數進行分割使用,有時候是請求中傳遞的參數太多了,所以使用分號;將參數對(key=value)連接起來作為一個請求參數進⾏傳遞。

再來看到代碼,代碼中識別.do和.action的后綴的字符,而加入;加上隨便內容后,代碼中就識別不到了。則會走到最下面的chain.doFilter(request,resp);,而在后面添加;分號不會對地址的訪問有任何影響。

多/繞過

創建一個后臺接口,只允許admin用戶登錄訪問

package com.nice0e3.Servlet;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;@WebServlet('/system/UserInfoSearch.do')public class UserInfoServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().write('admin_login!!!'); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); }}

而權限控制這步肯定是在Filter里面實現

String uri = request.getRequestURI();if(uri.equals('/system/UserInfoSearch.do')){ User user =(User) request.getSession().getAttribute('user'); String role = user.getRole(); if(role.equals('admin')) {//當前⽤用戶為admin,允許訪問該接⼝chain.doFilter(request, resp); } else {resp.getWriter().write('Unauthorized');return; }}

這時候去對/system/UserInfoSearch.do做了校驗,獲取URI地址后匹配如果是這個/system/UserInfoSearch.do,則驗證用戶身份,加入不為admin,則顯示Unauthorized,越權訪問。

Java安全之Filter權限繞過的實現

可直接訪問到admin用戶才可訪問的頁面下。

payload: //system/UserInfoSearch.do;123

繞過分析

Java安全之Filter權限繞過的實現

Java安全之Filter權限繞過的實現

看到代碼中只是對比了URI是否為/system/UserInfoSearch.do,而多加一個/并不影響正常解析,而又能讓該規則匹配不到。

URL編碼繞過

還是用上面的代碼演示,繞過手法則是換成url編碼繞過的方式。

payload:/system/%55%73%65%72%49%6e%66%6f%53%65%61%72%63%68%2e%64%6f

Java安全之Filter權限繞過的實現

繞過分析

當Filter處理完相關的流程后,中間件會對請求的URL進行一次URL解碼操作,然后請求解碼后的Servlet,而在request.getRequestURL()和request.getRequestURI()中并不會自動進行解碼,所以這時候直接接收過來進行規則匹配,則識別不出來。這時候導致了繞過。

Java安全之Filter權限繞過的實現

Java安全之Filter權限繞過的實現

Spring MVC中追加/繞過

在SpringMVC中假設以如下方法配置:

<servlet-mapping><servlet-name>SpringMVC</servlet-name><url-pattern>/</url-pattern></servlet-mapping>

特定情況下Spring匹配web路徑的時候會容錯后面的/

如,/admin/main.do/

修復

使用該代碼接受URI

String uri1 = request.getServletPath() + (request.getPathInfo() != null ? request.getPathInfo() : '');

下面來嘗試前面的幾種繞過方式。

分號階段繞過 payload: /login/main.do;123

Java安全之Filter權限繞過的實現

多/繞過payload: //system/UserInfoSearch.do;123

Java安全之Filter權限繞過的實現

URL編碼繞過payload:/system/%55%73%65%72%49%6e%66%6f%53%65%61%72%63%68%2e%64%6f

Java安全之Filter權限繞過的實現

../繞過payload:/system/login/../../login/main.do

Java安全之Filter權限繞過的實現

均不可用,使用上面的方式接受URI后,接受過去的時候發送特殊字符一律被剔除了。打斷點可見。

Java安全之Filter權限繞過的實現

關注點

前面提到過request.getRequestURL()和request.getRequestURI(),這些危險字符并不會自動剔除掉。可重點關注該方法。

參考

https://blog.csdn.net/qq_38154820/article/details/106799046

0x02 結尾

不只是Filter里面可以做權限繞過,在使用到一些Shiro框架的時候,也會有一些權限繞過的方式。

到此這篇關于Java安全之Filter權限繞過的實現的文章就介紹到這了,更多相關Java Filter權限繞過內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩中文字幕1| 日韩高清不卡在线| 国产精品资源| 久久精品99久久久| 国产乱人伦丫前精品视频 | 超级白嫩亚洲国产第一| 四虎成人精品一区二区免费网站| 亚洲在线一区| 日本va欧美va精品发布| 免费成人av在线播放| 在线免费观看亚洲| 国产亚洲一卡2卡3卡4卡新区| 日韩视频中文| 国产极品久久久久久久久波多结野| 日韩动漫一区| 久久精品国产99国产精品| 国产91在线播放精品| 日韩欧美国产精品综合嫩v| 成人羞羞视频播放网站| 91高清一区| 国产伦精品一区二区三区视频| 国产精品成久久久久| 午夜电影亚洲| 国产精品极品在线观看| 999国产精品视频| 少妇精品久久久一区二区| 欧美日本不卡| 久久天堂av| 欧美午夜网站| 美女毛片一区二区三区四区| 日韩综合小视频| 日韩伦理在线一区| 亚洲欧美日韩专区| 国产一区丝袜| 亚洲精品一级| 久久中文字幕av| 国产极品久久久久久久久波多结野| 欧产日产国产精品视频| 噜噜噜躁狠狠躁狠狠精品视频| 国产精品永久| 亚洲免费一区二区| 国产视频网站一区二区三区| 亚州av乱码久久精品蜜桃| 国产成人精品999在线观看| 亚洲精品乱码| 亚洲精品一二三区区别| 国产一区二区三区四区| 午夜电影一区| 伊人久久婷婷| 国产精品精品国产一区二区| 天堂va在线高清一区| 伊人久久亚洲美女图片| 久久国产中文字幕| 日本久久精品| 久久亚州av| 韩日一区二区| 91精品啪在线观看国产爱臀| 丝袜国产日韩另类美女| 久久婷婷av| 精品中文字幕一区二区三区av| 亚洲黄色免费看| 青青青免费在线视频| 国产一区二区三区网| 国产夫妻在线| 日韩成人亚洲| 极品裸体白嫩激情啪啪国产精品| 日韩国产在线| 成人看片网站| 不卡一区2区| 老牛影视一区二区三区| 男女性色大片免费观看一区二区| 婷婷成人在线| 精品一区免费| 蜜臀a∨国产成人精品| 一区二区三区国产在线| 亚洲毛片网站| 国产亚洲字幕| 久久香蕉网站| 久久久精品五月天| 欧美日韩国产亚洲一区| 亚洲五月综合| 欧美国产日韩电影| 手机在线电影一区| 一区三区视频| 国产精品久久国产愉拍| 日韩欧美一区二区三区在线观看 | 日韩1区在线| 亚洲免费精品| 日韩av中文在线观看| 中文字幕在线看片| 蜜臀91精品一区二区三区| 国产精品亚洲欧美日韩一区在线 | 亚洲一区二区毛片| 国产精品宾馆| 国产亚洲在线| 麻豆成人综合网| 国产视频一区在线观看一区免费| 视频在线观看91| 国产成人黄色| 欧美久久一区二区三区| 999久久久精品国产| 欧美一区成人| 国产精品毛片| 新版的欧美在线视频| 日韩一区二区三区精品 | 亚洲福利国产| 欧美激情福利| 免费不卡在线视频| 一区二区精品伦理...| 一区二区三区四区日韩| 久久亚洲资源中文字| 水野朝阳av一区二区三区| 色在线中文字幕| 久久午夜影院| 欧美综合精品| 亚洲日本国产| 一区在线视频观看| 久久人人97超碰国产公开结果| 欧美a在线观看| 国产精品自拍区| 国产区精品区| 久久国际精品| 欧美一区精品| 国产日韩免费| 日韩国产欧美视频| 亚洲一区不卡| 免费观看日韩电影| 亚洲欧洲日韩精品在线| 亚洲精品黄色| 91嫩草精品| 欧美专区一区| 国产精品分类| 日韩综合精品| 欧美精品91| 精品黄色一级片| 久久久久国产一区二区| 福利片在线一区二区| 精品视频国内| 成人日韩在线| 久久裸体视频| 蜜桃久久精品一区二区| 日本欧洲一区二区| 日本免费在线视频不卡一不卡二| 日韩欧美高清一区二区三区| 欧美日韩调教| 国产v日韩v欧美v| 美女网站视频一区| 蜜臀av一区二区三区| 国产精品中文字幕亚洲欧美 | 亚洲h色精品| 午夜在线视频一区二区区别| 91亚洲精品在看在线观看高清| 青青伊人久久| 久久久久美女| 丝袜亚洲精品中文字幕一区| 国产伦精品一区二区三区在线播放| 97精品国产一区二区三区| 亚洲免费观看| 精品国产乱码久久久久久1区2匹| 极品日韩av| 国产精品久久久久久久久久妞妞 | 日本大胆欧美人术艺术动态| 国产精品xvideos88| 亚洲国产专区| 日本电影久久久| 久久久久国产精品一区二区| 日韩av不卡一区二区| 欧美不卡在线| 精品国产a一区二区三区v免费| 亚洲深夜福利| 日韩欧美午夜| 国产精品igao视频网网址不卡日韩| 激情欧美亚洲| www在线观看黄色| 91精品丝袜国产高跟在线| 国产高清一区| 电影亚洲精品噜噜在线观看| 日韩高清欧美激情| 在线综合视频| 日韩精品dvd| 免费日韩一区二区三区| 亚洲精品激情| 亚洲青青久久| 亚洲综合日本| 亚洲综合三区| 午夜宅男久久久| 蜜桃视频欧美| 色婷婷精品视频| 精品一二三区| 高清一区二区三区av| 精品在线网站观看| 精品久久91| 国产成人精品一区二区免费看京| 国产调教精品| 国产精品午夜av| 国产精品夜夜夜| 久久免费福利| 亚洲日本网址| 欧美一级精品| 亚洲免费网址|