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

您的位置:首頁技術(shù)文章
文章詳情頁

Java安全之Filter權(quán)限繞過的實(shí)現(xiàn)

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

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

0x01 權(quán)限控制實(shí)現(xiàn)

常見的實(shí)現(xiàn)方式,在不調(diào)用Spring Security、Shiro等權(quán)限控制組件的情況下,會(huì)使用Filter獲取請求路徑,進(jìn)行校驗(yàn)。

編寫一個(gè)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); }}

定義一個(gè)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')) { //登陸接口設(shè)置⽩白名單,即登錄頁面 System.out.println('login_page'); resp.getWriter(). write('login_page'); chain.doFilter(request, resp);}else if(uri.endsWith('.do')||uri.endsWith('.action')) {//檢測當(dāng)前⽤戶是否登陸 User user =(User) request.getSession().getAttribute('user'); if(user == null) {resp.getWriter(). write('unauthorized access'); //未授權(quán)訪問System.out.println('unauthorized access');resp.getWriter(). write('go to login_page');//跳轉(zhuǎn)登錄System.out.println('go to login_page'); }} } public void init(FilterConfig config) throws ServletException { }}

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

Java安全之Filter權(quán)限繞過的實(shí)現(xiàn)

訪問main頁面,顯示未授權(quán)訪問并且跳轉(zhuǎn)到登錄的頁面

Java安全之Filter權(quán)限繞過的實(shí)現(xiàn)

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

../繞過方式

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

Java安全之Filter權(quán)限繞過的實(shí)現(xiàn)

Java安全之Filter權(quán)限繞過的實(shí)現(xiàn)

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

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

繞過原理分析

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

Java安全之Filter權(quán)限繞過的實(shí)現(xiàn)

符合匹配的規(guī)則,而匹配上該規(guī)則后則是直接放行,讓系統(tǒng)認(rèn)為訪問路徑是一個(gè)登錄的路徑,但在后面加入2個(gè)../進(jìn)行跳轉(zhuǎn)到根目錄,并且拼接上login/main.do,這時(shí)候?qū)嶋H訪問到的是http://127.0.0.1/login/main.do。

但使用

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

Java安全之Filter權(quán)限繞過的實(shí)現(xiàn)

Java安全之Filter權(quán)限繞過的實(shí)現(xiàn)

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

URL截?cái)嗬@過

基于前面Filter代碼將../進(jìn)行過濾

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')) { //登陸接口設(shè)置⽩白名單,即登錄頁面 System.out.println('login_page'); resp.getWriter(). write('login_page'); chain.doFilter(request, resp);}else if(uri.endsWith('.do')||uri.endsWith('.action')) {//檢測當(dāng)前⽤戶是否登陸 User user =(User) request.getSession().getAttribute('user'); if(user == null) {resp.getWriter(). write('unauthorized access'); //未授權(quán)訪問System.out.println('unauthorized access');resp.getWriter(). write('go to login_page');//跳轉(zhuǎn)登錄System.out.println('go to login_page'); }} chain.doFilter(request,resp); } public void init(FilterConfig config) throws ServletException { }}

添加多了一個(gè)uri.contains('./')做過濾只要包含./字符直接報(bào)錯(cuò)。

Java安全之Filter權(quán)限繞過的實(shí)現(xiàn)

Java安全之Filter權(quán)限繞過的實(shí)現(xiàn)

這時(shí)候會(huì)報(bào)錯(cuò),可見上圖。可;進(jìn)行繞過

Java安全之Filter權(quán)限繞過的實(shí)現(xiàn)

Java安全之Filter權(quán)限繞過的實(shí)現(xiàn)

payload:/login/main.do;123

繞過分析

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

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

多/繞過

創(chuàng)建一個(gè)后臺(tái)接口,只允許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); }}

而權(quán)限控制這步肯定是在Filter里面實(shí)現(xiàn)

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')) {//當(dāng)前⽤用戶為admin,允許訪問該接⼝chain.doFilter(request, resp); } else {resp.getWriter().write('Unauthorized');return; }}

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

Java安全之Filter權(quán)限繞過的實(shí)現(xiàn)

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

payload: //system/UserInfoSearch.do;123

繞過分析

Java安全之Filter權(quán)限繞過的實(shí)現(xiàn)

Java安全之Filter權(quán)限繞過的實(shí)現(xiàn)

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

URL編碼繞過

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

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

Java安全之Filter權(quán)限繞過的實(shí)現(xiàn)

繞過分析

當(dāng)Filter處理完相關(guān)的流程后,中間件會(huì)對請求的URL進(jìn)行一次URL解碼操作,然后請求解碼后的Servlet,而在request.getRequestURL()和request.getRequestURI()中并不會(huì)自動(dòng)進(jìn)行解碼,所以這時(shí)候直接接收過來進(jìn)行規(guī)則匹配,則識(shí)別不出來。這時(shí)候?qū)е铝死@過。

Java安全之Filter權(quán)限繞過的實(shí)現(xiàn)

Java安全之Filter權(quán)限繞過的實(shí)現(xiàn)

Spring MVC中追加/繞過

在SpringMVC中假設(shè)以如下方法配置:

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

特定情況下Spring匹配web路徑的時(shí)候會(huì)容錯(cuò)后面的/

如,/admin/main.do/

修復(fù)

使用該代碼接受URI

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

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

分號(hào)階段繞過 payload: /login/main.do;123

Java安全之Filter權(quán)限繞過的實(shí)現(xiàn)

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

Java安全之Filter權(quán)限繞過的實(shí)現(xiàn)

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

Java安全之Filter權(quán)限繞過的實(shí)現(xiàn)

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

Java安全之Filter權(quán)限繞過的實(shí)現(xiàn)

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

Java安全之Filter權(quán)限繞過的實(shí)現(xiàn)

關(guān)注點(diǎn)

前面提到過request.getRequestURL()和request.getRequestURI(),這些危險(xiǎn)字符并不會(huì)自動(dòng)剔除掉。可重點(diǎn)關(guān)注該方法。

參考

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

0x02 結(jié)尾

不只是Filter里面可以做權(quán)限繞過,在使用到一些Shiro框架的時(shí)候,也會(huì)有一些權(quán)限繞過的方式。

到此這篇關(guān)于Java安全之Filter權(quán)限繞過的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java Filter權(quán)限繞過內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产手机视频一区二区| 久久国产高清| 国产午夜久久av| 国产精品一区二区美女视频免费看 | 国产精品色婷婷在线观看| 69堂免费精品视频在线播放| 国产欧美自拍| 免费亚洲婷婷| 高清一区二区| 欧美日韩一二三四| 狠狠干成人综合网| 日韩影片在线观看| 精品三级av| 香蕉久久精品| 日本亚洲不卡| 国产一区二区三区四区| 成人免费网站www网站高清| 在线视频观看日韩| 综合激情视频| 精品黄色一级片| 午夜国产精品视频| 91大神在线观看线路一区| 美女精品视频在线| 欧美a级片一区| 午夜精品影视国产一区在线麻豆| 国产精品美女午夜爽爽| 福利一区二区三区视频在线观看| 欧美日韩国产探花| 国产欧美一区二区色老头| 久久天堂av| 三级久久三级久久久| 麻豆精品久久| 国产视频欧美| 九九久久国产| 午夜一区在线| 蜜桃久久久久| 另类av一区二区| 欧美激情日韩| 欧美日韩国产亚洲一区| 国产精品v一区二区三区| 在线成人动漫av| 日本va欧美va精品发布| 三级精品视频| 欧美午夜网站| 欧美日韩国产免费观看| 久久香蕉网站| 亚洲视频二区| 色婷婷狠狠五月综合天色拍| 日韩高清二区| 黄色日韩在线| 成人综合一区| 91成人福利| 欧美特黄a级高清免费大片a级| 国产精品亚洲一区二区在线观看| 亚洲二区免费| 精品久久电影| 日韩福利在线观看| 欧美精品一二| 色婷婷综合网| 日韩精品第一| aⅴ色国产欧美| 欧美不卡高清一区二区三区| 麻豆一区二区在线| 日韩一区二区三区在线看| 欧美日韩第一| 日韩大片在线播放| 国产精品99久久久久久董美香| 好吊一区二区三区| www.51av欧美视频| 国产精品hd| 青青草国产精品亚洲专区无| 免费在线观看精品| 免费av一区| 午夜欧美巨大性欧美巨大| 久久av偷拍| 国产亚洲欧美日韩在线观看一区二区| 久热综合在线亚洲精品| 午夜av一区| 天堂av在线| 国产精品高颜值在线观看| 久久影视三级福利片| 欧美日本不卡| 涩涩涩久久久成人精品| 中文字幕日韩欧美精品高清在线| 9色精品在线| 欧美日韩四区| 亚洲欧洲一区| 野花国产精品入口| 久久av一区| 一区二区三区四区在线观看国产日韩 | 日韩国产欧美| 中国字幕a在线看韩国电影| 你懂的国产精品永久在线| 日韩精品a在线观看91| 亚洲精品大片| 一二三区精品| 亚洲精品一级二级三级| 色婷婷成人网| 欧美天堂一区二区| 国产精品天堂蜜av在线播放| 国产精品毛片aⅴ一区二区三区| 日本一区中文字幕| 久久国产精品色av免费看| 青青草91久久久久久久久| 欧美在线不卡| 麻豆免费精品视频| 欧美男人天堂| 久久久久一区| 亚洲欧美日韩视频二区| 日韩中文字幕一区二区高清99| 男人的天堂亚洲一区| 综合一区二区三区| 日韩高清电影免费| 久久中文字幕导航| 久久久国产亚洲精品| 婷婷综合在线| 亚洲精品视频一二三区| 国产精品第一国产精品| 麻豆成全视频免费观看在线看| 久久久久久久久99精品大| 亚洲天堂黄色| 亚洲一级淫片| 欧美精品二区| 蜜桃av在线播放| 国产偷自视频区视频一区二区| 免费国产亚洲视频| 国产精品极品| 久久婷婷激情| 中文字幕一区二区av| 国产精品成人自拍| 日韩欧美视频专区| 在线精品观看| 精品色999| 午夜精品亚洲| 国产情侣久久| 欧美中文一区二区| 国产日产精品_国产精品毛片| 91日韩免费| 蜜桃久久av一区| 国产一区二区三区国产精品| 免费av一区二区三区四区| 亚洲男人在线| 免费高潮视频95在线观看网站| 蜜臀久久久久久久| 精品国产精品国产偷麻豆| 亚洲激情二区| 国产精区一区二区| 婷婷精品进入| 久久亚洲人体| 免费在线观看不卡| 国产精品99在线观看| 亚洲激情国产| 久久精品国产免费| 日韩中文字幕麻豆| 久久久久久一区二区| 美女91精品| 高清一区二区| 日韩一区二区三区精品| 久久青草久久| 国产伦理久久久久久妇女| 欧美日韩国产一区精品一区| 老司机精品视频网| 石原莉奈在线亚洲三区| 日韩精品专区| 欧美激情亚洲| 亚洲精品影视| 美女亚洲一区| 国产一区丝袜| 日韩和欧美一区二区| 激情婷婷欧美| 久久精品国产999大香线蕉| 亚洲精品国产精品粉嫩| 午夜精品亚洲| 欧美日韩视频免费观看| 国产毛片一区二区三区| 免费在线欧美视频| 欧美福利在线| 九九色在线视频| 久久精品色播| 国产精品一国产精品k频道56| 亚洲伊人精品酒店| 中文一区二区| 婷婷中文字幕一区| 久久精品观看| 日韩精品永久网址| 精品一区二区三区中文字幕| 欧美一区二区三区免费看| 亚洲一区二区免费看| 久久视频精品| 播放一区二区| 少妇精品导航| 久久国产日韩| 久久婷婷亚洲| 99久精品视频在线观看视频| 国产一区调教| 狠狠久久伊人| 国产成人久久精品一区二区三区| 国产精品网址| 国产精品.xx视频.xxtv| 少妇精品在线|