电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:110日期: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
相關文章:
主站蜘蛛池模板: 英超直播_英超免费在线高清直播_英超视频在线观看无插件-24直播网 | MES系统-WMS系统-MES定制开发-制造执行MES解决方案-罗浮云计算 | 蜂窝块状沸石分子筛-吸附脱硫分子筛-萍乡市捷龙环保科技有限公司 | 恒湿机_除湿加湿一体机_恒湿净化消毒一体机厂家-杭州英腾电器有限公司 | 天津热油泵_管道泵_天津高温热油泵-天津市金丰泰机械泵业有限公司【官方网站】 | 多功能三相相位伏安表-变压器短路阻抗测试仪-上海妙定电气 | 冷却塔厂家_冷却塔维修_冷却塔改造_凉水塔配件填料公司- 广东康明节能空调有限公司 | 有声小说,听书,听小说资源库-听世界网 | 淘剧影院_海量最新电视剧,免费高清电影随心观看 | (中山|佛山|江门)环氧地坪漆,停车场地板漆,车库地板漆,聚氨酯地板漆-中山永旺地坪漆厂家 | 雪花制冰机(实验室雪花制冰机)百科| 大功率金属激光焊接机价格_不锈钢汽车配件|光纤自动激光焊接机设备-东莞市正信激光科技有限公司 定制奶茶纸杯_定制豆浆杯_广东纸杯厂_[绿保佳]一家专业生产纸杯碗的厂家 | 钢制暖气片散热器_天津钢制暖气片_卡麦罗散热器厂家 | 杭州高温泵_热水泵_高温油泵|昆山奥兰克泵业制造有限公司 | 圆盘鞋底注塑机_连帮鞋底成型注塑机-温州天钢机械有限公司 | PCB设计,PCB抄板,电路板打样,PCBA加工-深圳市宏力捷电子有限公司 | 电竞馆加盟,沈阳网吧加盟费用选择嘉棋电竞_售后服务一体化 | 纯水电导率测定仪-万用气体检测仪-低钠测定仪-米沃奇科技(北京)有限公司www.milwaukeeinst.cn 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 手术室净化装修-手术室净化工程公司-华锐手术室净化厂家 | 北京康百特科技有限公司-分子蒸馏-短程分子蒸馏设备-实验室分子蒸馏设备 | 武汉创亿电气设备有限公司_电力检测设备生产厂家 | 柔性测斜仪_滑动测斜仪-广州杰芯科技有限公司| 广域铭岛Geega(际嘉)工业互联网平台-以数字科技引领行业跃迁 | 高清视频编码器,4K音视频编解码器,直播编码器,流媒体服务器,深圳海威视讯技术有限公司 | 山东太阳能路灯厂家-庭院灯生产厂家-济南晟启灯饰有限公司 | 一体化隔油提升设备-餐饮油水分离器-餐厨垃圾处理设备-隔油池-盐城金球环保产业发展有限公司 | 无刷电机_直流无刷电机_行星减速机-佛山市藤尺机电设备有限公司 无菌检查集菌仪,微生物限度仪器-苏州长留仪器百科 | 工业废水处理|污水处理厂|废水治理设备工程技术公司-苏州瑞美迪 今日娱乐圈——影视剧集_八卦娱乐_明星八卦_最新娱乐八卦新闻 | 石家庄装修设计_室内家装设计_别墅装饰装修公司-石家庄金舍装饰官网 | 岩棉板|岩棉复合板|聚氨酯夹芯板|岩棉夹芯板|彩钢夹芯板-江苏恒海钢结构 | 鑫达滑石-辽宁鑫达滑石集团| 复合土工膜厂家|hdpe防渗土工膜|复合防渗土工布|玻璃纤维|双向塑料土工格栅-安徽路建新材料有限公司 | 地源热泵一体机,地源热泵厂家-淄博汇能环保设备有限公司 | 软膜天花_软膜灯箱_首选乐创品牌_一站式天花软膜材料供应商! | 上海物流公司,上海货运公司,上海物流专线-优骐物流公司 | 北京中创汇安科贸有限公司| 杰福伦_磁致伸缩位移传感器_线性位移传感器-意大利GEFRAN杰福伦-河南赉威液压科技有限公司 | 全自动包装秤_全自动上袋机_全自动套袋机_高位码垛机_全自动包装码垛系统生产线-三维汉界机器(山东)股份有限公司 | 全钢实验台,实验室工作台厂家-无锡市辰之航装饰材料有限公司 | 12cr1mov无缝钢管切割-15crmog无缝钢管切割-40cr无缝钢管切割-42crmo无缝钢管切割-Q345B无缝钢管切割-45#无缝钢管切割 - 聊城宽达钢管有限公司 | 市政路灯_厂家-淄博信达电力科技有限公司| 药品冷藏箱厂家_低温冰箱_洁净工作台-济南欧莱博电子商务有限公司官网 |