關於上傳中的00截斷分析

2021-09-24 04:55:42 字數 2097 閱讀 4744

關於上傳中00截斷的細節,很多朋友在滲透中都會發現一些這樣的有趣現象,這個站點使用00截斷上傳的方法上傳成功了,而換乙個站點又失敗了,這是什麼原因呢?你看了這篇文章就會明白。

0x00是字串的結束識別符號,攻擊者可以利用手動新增字串識別符號的方式來將後面的內容進行截斷,而後面的內容又可以幫助我們繞過檢測。

1
php<5.3.29,且gpc關閉

123

4567

891011

1213

$uploaded_name = $_files[ 'file' ][ 'name' ];

$uploaded_ext = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1); // 提取上傳檔案字尾

$target_name = md5( uniqid() . $uploaded_name ) . '.' . $uploaded_ext; // 對上傳檔案進行重新命名

那麼00截斷應該在什麼時候使用呢?筆者認為,資料報中必須含有上傳後檔案的目錄情況才可以用,比如資料報中存在path: uploads/,那麼攻擊者可以通過修改path的值來構造paylod:uploads/aa.php%00

為什麼修改path才可以,因為程式中檢測的是檔案的字尾名,如果字尾合法則拼接路徑和檔名,那麼攻擊者修改了path以後的拼接結果為:uploads/aaa.php%00/2018051413370000.php,移動檔案的時候會將檔案儲存為uploads/aaa.php,從而達到getshell效果。

疑問:

為什麼效果圖中列印的結果和預期不符,是因為echo的特殊性質,官方解釋的echo

正是因為echo可以輸出多個字串,乙個字串截斷後就變成了兩個字串,所以會輸出後面的內容。

在網上常見用burp將資料報中的%00進行urldecode的操作,那為什麼要進行這乙個操作?網上也常見直接放入%00就可以截斷成功的案例,為什麼呢?

首先解釋為什麼要進行urldecode操作呢?其原因在於上傳的表單中有乙個enctype的屬性,並且需要enctype="multipart/form-data"(不對表單中資料進行編碼),path大多數都是存放在表單中的,因此需要在資料報中進行urldecode操作使%00變成字串結束符號。

那麼為什麼網上也有直接新增%00而不進行urldecode操作呢?因為path也可以存放在url或者cookie中,而在提交資料的時候,瀏覽器會對資料做一次urldecode的操作,而到服務端,會對資料進行一次urldecode的操作,因此如果path在非enctype=multipart/form-data的表單中或url or cookie中的時候,就可以直接寫%00不需要進行urldecode操作,讓服務端對%00進行url解碼即可。

00截斷上傳繞過 檔案上傳漏洞「 00截斷」繞過

網上傳說的 00截斷 其實非常的簡單,沒有想像中的那麼高深,以下給大家簡單的講解一下!還有一點需要注意,關於如何判斷檔案上傳漏洞是否能用 00截斷繞過?這個只能試一下才能知道結果,不行的話只能換其它的方法嘍!這裡需要用上抓包工具,我這裡以 burpsuite 抓包工具為例,具體步驟如下 1 00截斷...

00截斷問題

一 php 00截斷 在php 5.3.4中php修復了0字元,但是在之前的版本中00在php中危害較大。簡單測試一下 php 版本 5.3.4 get filename 這樣就可以接收到,這樣的請求filename test.php 00.txt 主要利用常見 1.上傳時路徑可控,使用00截斷 3...

關於HttpClient上傳中文亂碼的解決辦法

使用過httpclient的人都知道可以通過addtextbody方法來新增要上傳的文字資訊,但是,如果要上傳中文的話,或還有中文名稱的檔案會出現亂碼的問題,解決辦法其實很簡單 第一步 設定multipartentitybuilder的編碼方式為utf 8。設定請求的編碼格式 第二步 建立conte...