日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【网络安全】文件上传绕过思路总结

發布時間:2025/3/21 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【网络安全】文件上传绕过思路总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

硬懟

【技術資料】

硬懟的話,主要是從下面這些方法入手去操作。

(1)fuzz后綴名

看看有無漏網之魚(針對開發自定義的過濾可能有機會,針對waf基本不可能。更多的情況是php的站尋找文件包含或者解析漏洞乃至傳配置文件一類的,但是對于這種也大可不必fuzz后綴名了)

(2)http頭變量改造

首先要明確waf的檢測特征,一般是基于某種特定的情況下,去針對相應的攔截。幾個例子,文件上傳的時候,大多數Content-Type都是application/multipart-formdata這種,name對于waf來說,如果針對這種規則,對xxe ,sql注入,上傳,命令執行,內容等所有都去做一波掃描是及其浪費內存的,所以有可能針對不同的類型,做了不同的校驗規則。此時通過對Content-Type進行修改,可能會繞過waf。其他的http頭添加刪除等也是類似。

(3)文件后綴構造

這個和第一個有相似的就是都針對后綴名進行改造,不同的在于這里可能會利用waf的截取特征,比如回車換行繞過waf的檢測,但是對于后端來說接收了所有的傳入數據,導致了繞過waf。

(4)其他方法

這種就比較雜了,但是又不屬于迂回打擊的一類,比如重寫等方法。接下來就實戰來試試
第一步,先來對waf的規則做一個簡單的判斷。這里我的習慣是從內容,后綴兩個方向進行判斷。簡單來說,基本分為這幾種情況

(1)只判斷后綴(基本碰到的比較少了,因為很多時候白名單開發都可以完成) (2)只判斷內容(也比較少,因為一般的waf都會帶后綴的判斷)
(3)內容后綴同時判斷(這種情況比較多,相對于來說會安全一點) (4)根據文件后綴來判斷內容是否需要檢測(較多)
(5)根據Content-Type來判斷文件內容是否需要檢測

暫時只想到這么多,以后碰到了再單獨記吧。

有了思路,那么接下來就好說了。舉個例子我這里的情況

(1)傳腳本后綴(被攔截,判斷了后綴) (2)傳腳本后綴加不免殺代碼(被攔截,可能后綴內容同時攔截)
(3)傳非腳本名(可自己fuzz一個能過waf的任意后綴,里面加惡意內容,被攔截。也就是說同時會對內容和后綴進行判斷)

說說我這里的情況,會對內容和后綴進行攔截。檢測到上傳jsp文件,任意內容都會被攔截。
先來fuzz一波能利用的后綴名,這里可以包括中間件的一些配置文件。希望不大,一點都不出意外,全部被攔截了。

既然我們需要對后綴名進行改造,就對后綴名后面加特殊符號做一個fuzz試試,測試了一下,在沒有惡意內容的情況下,只有’被過濾了。所以如果有機會,我們看看能不能試試系統特殊,比如;去做截斷。先記下來。因為最終還是需要免殺馬的,jsp免殺又不會,先不考慮這個,先考慮把waf繞過。(這里我對filename做了換行,然后去掉了引號,加了一個;做截斷繞過了waf,但是內容被查殺了,尷尬。)


接下來對http頭部進行改造一下嘗試繞過

一.filename改造

(2) 名字特殊符號替換以及構造異常閉合(符號方法很多自己天馬星空,我這里就寫幾個就行了,但是要注意你改造了得讓后端識別到,亂改造識別不到等于白搭)
filename=‘shell.jspx.jsp’
filename=shell.jspx.jsp
filename=shell.jspx.jsp’
“filename”=shell.jspx;
(3)重寫
filename=shell.jpg;filename=shell.jspx;
filename=shell.jspx;filename=shell.jpg;
(4)大小寫變化
FileName=shell.jspx.jsp’
(5)參數污染
FileName=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaashell.jspx.jsp’
FileName =shell.jspx(加空格)
filename====“shell.jspx.jsp1”(加等號)
FileName =shell.jspx(前后加空格,中間也可以加特殊符號fuzz)
(6)文件名字編碼(filename一般為后端接收參數,編碼了可能識別不到,這個就看情況)
filename=\u0073\u0068\u0065\u006c\u006c\u002e\u006a\u0073\u0070
(7)回車換行(有時候確實挺好用的,任意位置都可以試一下)
1.FileName=shell.jspx.
jsp
2.File
Name=shell.jspx.jsp’

二 name改造

name也可以任意改造,改造的方法和filename差不多,就不重復發了,主要是思路重要。
其他的比如奇奇怪怪的正則需要用到的特殊字符都可以在文件名中fuzz一下,看看能否打斷waf規則,也就是把我們fuzz后綴的再跑一次,或者再找點其他的正則字母,這里就不重復寫了。

http頭部格式上傳相關繞過

有一些用畸形相關的,不太推薦一來就試,fuzz的可以帶一下,這種屬于天時地利人和占據才用,畢竟底層的規定好的合規變了就不能識別,但是也說不準fuzz出問題了呢。fuzz本來就是一個天馬行空的過程,好了,繼續來看。

(1)Content-Disposition

溢出繞過
Content-Disposition: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa form-data; name=“file”; filename=shell.jpg;filename=shell.jspx;
回車換行繞過(注意不要把固定字段打散了,)
Content-Disposition:
form-data; name=“file”; filename=shell.jpg;filename=shell.jspx;
雙寫繞過(寫兩次)
Content-Disposition: form-data; name=“file”; filename=shell.jpg;filename=shell.jspx;
Content-Disposition: form-data; name=“file”; filename=shell.jpg;filename=shell.jspx.jpg;
還有一些參數污染加減空格啥的,和上面filename類似,就不重復寫了。

(2)boundary

加減空格或者前面加惡意的參數
boundary =---------------------------8472011224916008542288311250
&boundary =---------------------------8472011224916008542288311250
123& boundary =---------------------------8472011224916008542288311250
多個污染(他是用來分割的,他變了下面的也要變一下)
boundary =---------------------------8472011224916008542288311251
boundary =---------------------------8472011224916008542288311252
回車換行污染
分割污染(簡單來說就是他自定義了一些分割部分,我們可以把我們的惡意參數提交到其他的分割部分)見下圖第一個,視情況而定。其他的常用方式和上面都可以重復的

(3)Content-Type

直接刪除
修改類型為application/text或者 image/jpeg等等
回車換行
溢出
參數污染
重復傳入Content-Type
大小寫變換
設置charset
Content-Type: multipart/form-data;charset=iso-8859-13
列舉幾個

ibm869

ibm870

ibm871

ibm918

iso-2022-cn

iso-2022-jp

iso-2022-jp-2

iso-2022-kr

iso-8859-1

iso-8859-13

iso-8859-15

還有其他的方式,其實和上面的思路差不多


http頭部其他繞過
這一塊就比較多了,編碼,長度等等,都可以試一下,具體的方法和上面的差不多。這里就用參考鏈接pureqh老哥的幾個東西了。

1.Accept-Encoding 改變編碼類型

Accept-Encoding: gzip

Accept-Encoding: compress

Accept-Encoding: deflate

Accept-Encoding: br

Accept-Encoding: identity

Accept-Encoding: *

下面截取的圖片是我本次的,就不弄其他的了,長度那一塊,主要是說內容方面相關的。

2.修改請求方式繞過

post改為get put等其他的請求方式(這一塊主要是針對waf的攔截特性)

3.host頭部繞過

對host進行回車,換行
修改host頭部
host跟鏈接
host改為127.0.0.1
刪除host

到這里就差不多了,再來回頭理一下我們的思路。借用露迅先生的一句話,你如果啥都不曉得就莽起整,一些都等求于零。所以我們總結一下我們的思路。
waf的特性大多數是寫了很多的規則,基于截取的內容做規則匹配,匹配到了就不放行,未匹配到就認為是安全的放行,所以我們需要做的就是繞過waf對于規則的匹配。大概是這幾個方向

(1)基于正則匹配的繞過(也就是參數污染,正則破壞等上面的方法,打亂waf的檢測)
(2)基于正則匹配的缺失(類似于修改請求等,讓waf根本不去檢測這部分的內容)
(3)基于操作系統的特性(類似于后綴名加特殊符號讓操作系統進行識別)

我們做一切的前提都是既繞過了waf,也能讓后端識別,所以可以亂來,不要太亂。基本也就是污染,多寫,繞過,添加刪除幾個方向。

二 迂回打擊

說是迂回打擊,但是其實就是利用一些通用的手段,或者中間件的特性去繞過waf,甚至說尋找到了真實ip去直接繞過云waf等方法。這里我就簡單總結一些,不全面的話忘體諒。這一塊主要是內容相關的了。

基于http的繞過 這種屬于硬懟,方法如下:
1.免殺馬 這種是萬能的,只要能免殺就能如履平地,但是現在的waf規則更新太快了,熬了一夜去弄了個免殺,第二天踩了蜜罐上去就被抓,藍方產品支持加入規則,一點也不美滋滋,但是這也是一條YYDS的道路
2.分塊傳輸 說實話這玩意兒我從來沒有成功過,但是面試問的挺多的,有一次有個面試官還專門跟我提了這個所以我這里列舉一下。但是分塊參數+參數污染組合利用貌似效果還是不錯
3.修改長度字段 和分塊參數有點類似,作用是這樣,有些時候做參數大數據污染的時候,waf判斷數據過長直接丟棄,有些判斷長度和內容相差太多也直接丟棄。這時候可以把兩者結合起來使用,達到超長數據繞過waf的檢測,同時數據送到了后端
4.修改傳輸編碼 和分塊傳輸類似,自己手動去改,burp那個插件工具我是一次都沒成功過
5.基于網站系統特性添加字段 比如ASP專屬bypass-devcap-charset,添加這些字段去繞過waf的檢測(這也是我看到但是沒機會實戰,記錄一下)
6.修改頭部+內容結合 修改頭部為其他格式,再把內容頭加其他格式,例如圖片,中間插入惡意代碼,類似圖片馬
7.增加多個boundary 這樣子打亂了惡意內容,有點類似分開傳輸,欺騙waf的檢測,逃逸后面的代碼。
8.文件名寫入文件windows下利用多個<<<<去寫入文件,詳情可以看參考鏈接。

還有一些其他的方法,這一種也是類似于對waf欺騙,過著直接利用免殺硬過waf的。jsp免殺不會,就不獻丑免殺了。

其他繞過

這種繞過就是一般適用于云waf了。咋說呢,這種我碰到的不怎么多,因為一般碰到的云waf基本都很強,注入上傳類的繞過現在越來越難了,xss還好一點,但是不走釣魚的話xss也沒用太大的用處,畢竟可以一把梭最舒服。來看看吧,檢測全球ping就行。

1.尋找真實ip

這個方法網上太多了,說下我常用的

(1)利用ssl證書尋找

(2)利用子域名尋找

(3)利用公司其他業務尋找(跑C端看運氣,和子域名一樣)

(4)利用信息泄露尋找(github,google,目錄文件,js代碼等)

(5)利用一些云網站或者專門查找cdn的網站,鏈接在家里電腦上,這電腦沒有,就自己去找吧

(6)利用已知工具

(7)搜索引擎(fofa,夸克等,看以前收集的業務)

(8)利用http返回信息

(9)找郵箱弱口令,然后你懂的

(10)找朋友,你懂的。

2.利用子域名去打

有些網站,可能外面做了防護,子域名沒加waf,而子域名又在白名單,迂回去錘就行了。

3.利用頭部繞過

基本碰不到了,修改host為本地ip,現在已經絕跡了,突然想起來寫一下。

4.找設備

找一些vpn一類的設備碰碰運氣
其他的就不說了吧,頭痛。總結下這個思路

(1)直接尋找waf保護后的目標地址,進行親身擁抱(繞過waf去打)

(2)尋找waf后目標的子女子孫親兒子(被waf加白的一些資產)去挑撥離間。

學無止境,點擊獲取【網絡安全學習資料·攻略】

總結

以上是生活随笔為你收集整理的【网络安全】文件上传绕过思路总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。