網上傳說的 %00截斷 其實非常的簡單,沒有想像中的那麼高深,以下給大家簡單的講解一下!還有一點需要注意,關於如何判斷檔案上傳漏洞是否能用%00截斷繞過?這個只能試一下才能知道結果,不行的話只能換其它的方法嘍!
這裡需要用上抓包工具,我這裡以「burpsuite 」抓包工具為例,具體步驟如下:
1、 %00截斷 get 用法
當是get接收情況的時候,直接用 %00 就可以了。
某些情況下,直接在檔名中加 %00 進行截斷這是不對的,因為 %00 會以字串的形式解析了。
如果沒有做字尾名判斷的情況下,那樣會變成:
也就是所謂的任意檔案上傳漏洞了,這又是另乙個概念了。
如果做了字尾名判斷的情況下,那樣是會直接報錯,不讓你上傳,因為你的字尾是 .jpg,不是 .php;
2、%00截斷 post 用法
當是post接收情況的時候,正確的用法應該是我們需要對 %00 做乙個url編碼,也就是url-decode;
為什麼兩者用法不同?
這是因為 %00 截斷在 get 中被 url 解碼之後是空字元。但是在 post 中 %00 不會被 url 解碼,所以只能通過 burpsuite 修改 hex 值為 00 (url decode)進行截斷。
注意:有些時候資料報中必須含有上傳檔案後的目錄情況才可以用。
例如:資料報中存在 path: uploads/,那麼攻擊者可以通過修改path的值來構造paylod: uploads/aa.php%00
像以下這個php檔案上傳檢測**,這個就需要有上傳檔案後的目錄才能用。
$uploaded_name = $_files[ 'file' ][ 'name' ];$uploaded_ext = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1); // 提取上傳檔案字尾$target_name = md5( uniqid() . $uploaded_name ) . '.' . $uploaded_ext; // 對上傳檔案進行重新命名if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" )) else
為什麼修改path才可以?
因為程式中檢測的是檔案的字尾名,如果字尾合法則拼接路徑和檔名。
那麼,攻擊者修改了path以後的拼接結果為:uploads/aaa.php%00/20190818.php
移動檔案的時候會將檔案儲存為:uploads/aaa.php
從而達到getshell效果。
關於上傳中的00截斷分析
關於上傳中00截斷的細節,很多朋友在滲透中都會發現一些這樣的有趣現象,這個站點使用00截斷上傳的方法上傳成功了,而換乙個站點又失敗了,這是什麼原因呢?你看了這篇文章就會明白。0x00是字串的結束識別符號,攻擊者可以利用手動新增字串識別符號的方式來將後面的內容進行截斷,而後面的內容又可以幫助我們繞過檢...
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...
檔案上傳繞過(舊)
1.js 驗證 修改js 2.字尾名黑名單 比如 deny ext array php php5 php4 php3 php2 html htm phtml pht php php5 php4 php3 php2 html htm phtml jsp jspa jspx jsw jsv jspf j...