內網滲透-在HTTP協議層面繞過WAF

進入正題,隨著安全意思增強,各企業對自己的網站也更加注重安全性。但很多web應用因為老舊,或貪圖方便想以最小代價保證應用安全,就只僅僅給服務器安裝waf。

本次從協議層面繞過waf實驗用sql注入演示,但不限于實際應用時測試sql注入(命令執行,代碼執行,文件上傳等測試都通用)。

原理

先給服務器發送payload數據包,使得waf無法識別出payload,當apache,tomcat等web容器能正常解析其內容。如圖一所示

實驗環境

本機win10+xampp+某狗web應用防火墻最新版。為方便演示,存在sql注入的腳本中使用$_REQUEST["id"]來接收get,或者post提交的數據。

waf配置為攔截url和post的and ?or 注入,如圖二所示。

發送get請求或利用hackbar插件發送post請求payload均被攔截,如圖三。

利用pipline繞過[該方法經測試會被某狗攔截]

原理:

http協議是由tcp協議封裝而來,當瀏覽器發起一個http請求時,瀏覽器先和服務器建立起連接tcp連接,然后發送http數據包(即我們用burpsuite截獲的數據),其中包含了一個Connection字段,一般值為close,apache等容器根據這個字段決定是保持該tcp連接或是斷開。

當發送的內容太大,超過一個http包容量,需要分多次發送時,值會變成keep-alive,即本次發起的http請求所建立的tcp連接不斷開,直到所發送內容結束Connection為close為止。

1. 關閉burp的Repeater的Content-Length自動更新,如圖四所示,點擊紅圈的Repeater在下拉選項中取消update Content-Length選中。這一步至關重要!!!

2. burp截獲post提交

id=1 and 1=1,顯示被waf攔截如圖五所示。

3. 復制圖五中的數據包黏貼到

id=1 and 1=1,后面如圖六所示。

4. 接著修改第一個數據包的數據部分,即將

id=1+and+1%3D1

修改為正常內容id=1,再將數據包的Content-Length的值設置為修改后的【id=1】的字符長度即4,最后將Connection字段值設為keep-alive。提交后如圖七所示,會返回兩個響應包,分別對應兩個請求。

注意:從結果看,第一個正常數據包返回了正確內容,第二個包含有效載荷的數據包被某狗waf攔截,說明兩數據包都能到達服務器,在面對其他waf時有可能可以繞過。無論如何這仍是一種可學習了解的繞過方法,且可以和接下來的方法進行組合使用繞過。

利用分塊編碼傳輸繞過[該方法可繞某狗]

原理:

在頭部加入 Transfer-Encoding: chunked 之后,就代表這個報文采用了分塊編碼。這時,post請求報文中的數據部分需要改為用一系列分塊來傳輸每個分塊包含十六進制的長度值和數據,長度值獨占一行,長度不包括它結尾的,也不包括分塊數據結尾的,且最后需要用0獨占一行表示結束。

1. 開啟上個實驗中已關閉的content-length自動更新。給post請求包加入Transfer-Encoding: chunked后,將數據部分id=1 and 1=1進行分塊編碼(注意長度值必須為十六進制數),每一塊里長度值獨占一行,數據占一行如圖八所示。

2.將上面圖八數據包的

id=1 and 1=1

改為

id=1 and 1=2

?即將圖八中所標的第4塊的1改為2。如圖九所示沒有返回數據,payload生效。

注意:分塊編碼傳輸需要將關鍵字and,or,select ,union等關鍵字拆開編碼,不然仍然會被waf攔截。編碼過程中長度需包括空格的長度。最后用0表示編碼結束,并在0后空兩行表示數據包結束,不然點擊提交按鈕后會看到一直處于waiting狀態。

利用協議未覆蓋進行繞過[同樣會被某狗攔截]

原理:

HTTP頭里的Content-Type一般有application/x-www-form-urlencoded,multipart/form-data,text/plain三種,其中multipart/form-data表示數據被編碼為一條消息,頁上的每個控件對應消息中的一個部分。所以,當waf沒有規則匹配該協議傳輸的數據時可被繞過。

1.將頭部Content-Type改為multipart/form-data; boundary=69 ? 然后設置分割符內的Content-Disposition的name為要傳參數的名稱。數據部分則放在分割結束符上一行。

由于是正常數據提交,所以從圖十可知數據是能被apache容器正確解析的,嘗試1 and 1=1也會被某狗waf攔截,但如果其他waf沒有規則攔截這種方式提交的數據包,那么同樣能繞過。

2.一般繞waf往往需要多種方式結合使用,如圖十的示例中,只需將數據部分1 and 1=1用一個小數點"."當作連接符即1.and 1=1就可以起到繞過作用。當然,這只是用小數點當連接符所起的作用而已。

分塊編碼+協議未覆蓋組合繞過

1.在協議未覆蓋的數據包中加入Transfer-Encoding: chunked ,然后將數據部分全部進行分塊編碼,如圖十二所示(數據部分為1 and 1=1)。

注意:第2塊,第3塊,第7塊,和第8塊。

第2塊中需要滿足

長度值空行Content-Disposition: name="id"空行

這種形式,且長度值要將兩個空行的長度計算在內(空行長度為2)。

第3塊即數據開始部分需滿足

長度值 空行數據

形式,且需將空行計算在內。

第7塊即分割邊界結束部分,需滿足

長度值空行分割結束符空行

形式,且計算空行長度在內。

第8塊需滿足

0 ?空行空行

形式。如果不同時滿足這四塊的形式要求,payload將不會生效。

結語:

以上是在http協議層面繞過waf,因為比較通用,所以理論上可以用于平時滲透時的方方面面,如命令執行,代碼注入,sql注入等測試。雖然本文中只有分塊編碼真正做到了繞過某狗,但其他兩種方法在其他waf繞過中可能仍然可用,而且可與其他繞過方法結合使用,甚至像四中一樣相互組合使用

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/20777.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/20777.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/20777.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[數據集][目標檢測]輪胎檢測數據集VOC+YOLO格式439張1類別

數據集格式:Pascal VOC格式YOLO格式(不包含分割路徑的txt文件,僅僅包含jpg圖片以及對應的VOC格式xml文件和yolo格式txt文件) 圖片數量(jpg文件個數):439 標注數量(xml文件個數):439 標注數量(txt文件個數):439 標注類別…

mysql怎么部署雙機

MySQL的雙機部署是為了實現數據的高可用性和容錯性。以下是MySQL雙機熱備部署的基本步驟,我會盡量清晰地分點表示和歸納: 1. 環境準備 安裝MySQL:在兩臺服務器上分別安裝MySQL數據庫。確保版本兼容。 網絡配置:確保兩臺服務器之…

題目:判斷一個素數能被幾個9整除

題目:判斷一個素數能被幾個9整除 There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog content is all parallel goods. Those who are worried about being cheated should …

顛仆流離學二叉樹2 (Java篇)

本篇會加入個人的所謂魚式瘋言 ??????魚式瘋言:??????此瘋言非彼瘋言 而是理解過并總結出來通俗易懂的大白話, 小編會盡可能的在每個概念后插入魚式瘋言,幫助大家理解的. 🤭🤭🤭可能說的不是那么嚴謹.但小編初心是能讓更多人…

泛型知識匯總

演示代碼&#xff1a; package exercise;import java.util.Arrays;public class MyArrayList<E> {Object[] obj new Object[10];int size;public boolean add(E e) {obj[size] e;size;return true;}public E get(int index) {return (E) obj[index];}//沒有這個函數&a…

現代信號處理12_譜估計的4種方法(CSDN_20240602)

Slepian Spectral Estimator(1950) 做譜估計的目標是盡可能看清楚信號功率譜在某一個頻率上的情況&#xff0c;假設我們想了解零頻時的分布&#xff0c;最理想的情況是濾波器的傳遞函數H(ω) 是一個沖激函數&#xff0c;這樣就沒有旁瓣&#xff0c;也就沒有泄漏&#xff1b;其次…

【OpenHarmony】TypeScript 語法 ③ ( 條件語句 | if else 語句 | switch case 語句 )

文章目錄 一、條件語句1、if else 語句2、switch case 語句 參考文檔 : <HarmonyOS第一課>ArkTS開發語言介紹 一、條件語句 1、if else 語句 TypeScript 中的 if 語句 / if else 語句 用法 , 與 JavaScript 語言中的 if 語句 / if else 語句 語法 基本相同 ; if else 語…

使用Java構建RESTful API:實現靈活、可擴展的Web服務

RESTful API已經成為構建現代Web應用的標準之一&#xff0c;它通過簡單的HTTP協議進行通信&#xff0c;提供了一種輕量級、靈活、可擴展的方式來構建和管理Web服務。Java作為一種強大的編程語言&#xff0c;提供了許多框架和庫來幫助開發者構建高效的RESTful API。本文將探討如…

項目質量管理

目錄 1.概述 2.三個關鍵過程 2.1.規劃質量管理&#xff08;Plan Quality Management&#xff09; 2.2.管理質量&#xff08;Manage Quality&#xff09; 2.3.控制質量&#xff08;Control Quality&#xff09; 3.應用場景 3.1.十個應用場景 3.2.產品設計與開發 4.小結…

使用PyCharm 開發工具創建工程

一. 簡介 前面學習了 安裝 python解釋器。如何安裝python的一種開發工具 PyCharm。 本文來簡單學習一下&#xff0c;如何使用 PyCharm 開發工具創建一個簡單的 python工程。 二. PyCharm 開發工具創建一個工程 1. 首先&#xff0c;首先打開PyCharm 開發工具。選擇 創建一…

Docker部署SiYuan筆記-Unraid

使用unraid的docker部署SiYuan筆記&#xff0c;簡單記錄 筆記說明 Siyuan筆記是一款基于markdown語法的筆記工具&#xff0c;具有活躍的社區和多設備支持。大部分功能都是免費&#xff0c;源代碼開源&#xff0c;支持插件安裝&#xff0c;具有很不錯的使用體驗。 Docker地址&a…

linux---生產者和消費者模型

生產者消費者模式就是通過一個容器來解決生產者和消費者的強耦合問題。生產者和消費者彼此之間不直接通訊&#xff0c;而通過阻塞隊列來進行通訊&#xff0c;所以生產者生產完數據之后不用等待消費者處理&#xff0c;直接扔給阻塞隊列&#xff0c;消費者不找生產者要數據&#…

2024年海南省三支一扶報名指南,照片要求

2024年海南省三支一扶報名指南&#xff0c;照片要求 一、考試時間安排&#xff1a; 報名時間&#xff1a;6月1日8:00至6月7日18:00 準考證打印時間&#xff1a;6月17日8:00 考試時間&#xff1a;6月22日 二、招聘人數 海南省計劃招募390名高校畢業生

STM32_IIC

1、IIC簡介 I2C&#xff0c;即Inter IC Bus。是由Philips公司開發的一種串行通用數據總線&#xff0c;主要用于近距離、低速的芯片之間的通信&#xff1b;有兩根通信線&#xff1a;SCL&#xff08;Serial Clock&#xff09;用于通信雙方時鐘的同步、SDA&#xff08;Serial Data…

JVM之【執行引擎】

執行引擎 執行引擎是JVM的核心組件之一&#xff0c;它負責將Java字節碼文件轉換為機器指令并執行。這一過程涉及多個組成部分&#xff0c;各部分協同工作來完成字節碼到機器指令的轉換和執行。以下是執行引擎的主要組成部分及其作用&#xff1a; 1. 解釋器&#xff08;Interp…

vue.js框架快速入門

Vue.js是一個漸進式JavaScript框架&#xff0c;用于構建用戶界面和單頁應用程序。以下是Vue.js快速入門的基本步驟和概念&#xff1a; 1. 環境準備 確保你的計算機上安裝了Node.js&#xff0c;它包括npm&#xff08;Node Package Manager&#xff09;&#xff0c;用于管理項目…

友善RK3399v2平臺利用rkmpp實現硬件編解碼加速

測試VPU 編譯mpp sudo apt update sudo apt install gcc g cmake make cd ~ git clone https://github.com/rockchip-linux/mpp.git cd mpp/build/linux/aarch64/ sed -i s/aarch64-linux-gnu-gcc/gcc/g ./arm.linux.cross.cmake sed -i s/aarch64-linux-gnu-g/g/g ./arm.lin…

如何學習ai agent?

如何學習Agent&#xff0c;推薦閱讀《動手做AI Agent》這本書。 推薦理由&#xff1a; 1&#xff1a;一本書能夠全方位了解并探索Agent的奧秘&#xff01; &#xff08;1&#xff09;Agent的發展進程。 &#xff08;2&#xff09;可以幫我們做哪些事&#xff1a;自動辦公&am…

TypeScript 中的迭代器和生成器

1. 迭代器 迭代器是一種對象&#xff0c;它提供了一種統一的方式來訪問集合中的元素&#xff0c;而不暴露集合的內部結構。在 TypeScript 中&#xff0c;迭代器通過實現 Iterator 接口來定義。 interface Iterator<T> {next(): IteratorResult<T>; }interface It…

Liunx登錄時相關bash配置文件(登錄腳本)

profile類的文件&#xff1a;設定環境變量&#xff0c;運行命令或腳本 bashrc類的文件&#xff1a;定義命令別名 全局配置&#xff1a; /etc/profile /etc/profile.d/*.sh /etc/bashrc 個人配置文件: ~/.bash_profile ~/.bashrc 用戶登錄時加載bash配置文件的過程&#xff0c;…