文章來源:酒仙橋六號部隊
鏈接:http://www.sins7.cn/remember-a-403-bypass-technique/
背景
記一次接到客戶的一個需求,后台管理地址(https://xxx.xxxx.com)僅允許工作區公網出口訪問,對於IP的訪問限制是否存在缺陷可以繞過,外網進行訪問返回403狀態碼。
實戰
姿勢一: 端口利用
拿到客戶給的地址后,首先進行信息收集。端口信息收集,利用nmap進行全端口探測,發現除了80端口之外,還開放了一個web服務的8001端口,我們嘗試使用8001端口訪問(https://xxx.xxxx.com:8001),總是充滿驚喜。可直接繞過IP限制進行訪問。怕是這個運維要挨錘了,立馬把這個問題,反饋給客戶。
https://iamadmixxx.xxx.xxx:8001/auth/login
通過溝通,由於疏忽未下線8001端口,客戶貌似認為這個很簡單,關閉8001端口,下線業務后,讓我們繼續嘗試后台能否繞過。
姿勢二:修改HOST
我們先說下Host在請求頭中的作用,在一般情況下,幾個網站可能會部署在同一個服務器上,或者幾個 web 系統共享一個服務器,通過host頭來指定應該由哪個網站或者web系統來處理用戶的請求。
而很多WEB應用通過獲取HTTP HOST頭來獲得當前請求訪問的位置,但是很多開發人員並未意識到HTTP HOST頭由用戶控制,從安全角度來講,任何用戶輸入都是認為不安全的。
當服務器獲取HOST的方式不當時,我們可以通過修改Host值來進行繞過。首先對該目標域名進行子域名收集,整理好子域名資產(host字段同樣支持IP地址)。先Fuzz測試跑一遍收集到的子域名,這里使用的是Burp的Intruder功能。
往往成功也離不開運氣,看到一個服務端返回200的狀態碼。成功找到一個在HOST白名單中的子域名。我們利用firefox插件來修改HOST值,成功繞過訪問限制。
另辟蹊徑,效果越出彩,而且技巧也遠遠不止上面提到的一小部分。
在這里我們總結一下403繞過技巧
姿勢三:覆蓋請求URL
嘗試使用X-Original-URL和X-Rewrite-URL標頭繞過Web服務器的限制。
介紹:通過支持X-Original-URL和X-Rewrite-URL標頭,用戶可以使用X-Original-URL或X-Rewrite-URL HTTP請求標頭覆蓋請求URL中的路徑,嘗試繞過對更高級別的緩存和Web服務器的限制。
示例:
Request GET /auth/login HTTP/1.1 Response HTTP/1.1 403 Forbidden Reqeust GET / HTTP/1.1 X-Original-URL: /auth/login Response HTTP/1.1 200 OK or Reqeust GET / HTTP/1.1 X-Rewrite-URL: /auth/login Response HTTP/1.1 200 OK
Burp學院實驗室進行演示,首先普通用戶訪問admin頁面會被限制,要使用admin用戶登錄才行。點擊 管理面板(Admin panel)burp抓包查看,服務端返回403,”Access denied”禁止訪問。
在Header頭中添加X-Original-URL標頭,發現已經有權限可以刪除Administrator、carlos、wiener 帳號的管理員權限。
姿勢四:Referer標頭繞過
嘗試使用Referer標頭繞過Web服務器的限制。
介紹:Referer 請求頭包含了當前請求頁面的來源頁面的地址,即表示當前頁面是通過此來源頁面里的鏈接進入的。服務端一般使用 Referer 請求頭識別訪問來源。
示例:
Request GET /auth/login HTTP/1.1 Host: xxx Response HTTP/1.1 403 ForbiddenReqeust GET / HTTP/1.1 Host: xxx ReFerer:https://xxx/auth/loginResponseHTTP/1.1 200 OKorReqeust GET /auth/login HTTP/1.1 Host: xxx ReFerer:https://xxx/auth/login Response HTTP/1.1 200 OK
Burp學院實驗室進行演示,使用非管理員憑據登錄后,瀏覽/admin-roles?username=carlos&action=upgrade 服務端返回401未進行認證,無權限訪問。
在Header頭中添加Referer標頭,服務端提示302表示請求成功,使用Referer標頭繞過Web服務器的限制。
姿勢五:代理IP
一般開發者會通過Nginx代理識別訪問端IP限制對接口的訪問,嘗試使用 X-Forwarded-For、X-Forwared-Host等標頭繞過Web服務器的限制。
- X-Originating-IP: 127.0.0.1 - X-Remote-IP: 127.0.0.1 - X-Client-IP: 127.0.0.1 - X-Forwarded-For: 127.0.0.1 - X-Forwared-Host: 127.0.0.1 - X-Host: 127.0.0.1 - X-Custom-IP-Authorization: 127.0.0.1
示例
Request GET /auth/login HTTP/1.1 Response HTTP/1.1 401 UnauthorizedReqeust GET /auth/login HTTP/1.1 X-Custom-IP-Authorization: 127.0.0.1 Response HTTP/1.1 200 OK
姿勢六:擴展名繞過
基於擴展名,用於繞過403受限制的目錄。
site.com/admin => 403 site.com/admin/ => 200 site.com/admin// => 200 site.com//admin// => 200 site.com/admin/* => 200 site.com/admin/*/ => 200 site.com/admin/. => 200 site.com/admin/./ => 200 site.com/./admin/./ => 200 site.com/admin/./. => 200 site.com/admin/./. => 200 site.com/admin? => 200 site.com/admin?? => 200 site.com/admin??? => 200 site.com/admin..;/ => 200 site.com/admin/..;/ => 200 site.com/%2f/admin => 200 site.com/%2e/admin => 200 site.com/admin%20/ => 200 site.com/admin%09/ => 200 site.com/%20admin%20/ => 200
文章來源:酒仙橋六號部隊