
文件上傳漏洞%00截斷繞過
聲明:該文章由作者(大明最后一個狠人)發(fā)表,轉載此文章須經作者同意并請附上出處(0XUCN)及本頁鏈接。。
網上傳說的 %00截斷 其實非常的簡單,沒有想像中的那么高深,以下給大家簡單的講解一下!還有一點需要注意,關于如何判斷文件上傳漏洞是否能用%00截斷繞過?這個只能試一下才能知道結果,不行的話只能換其它的方法嘍!
?
一、%00截斷原理
www.ijiandao.com/qq.jpg
www.ijiandao.com/qq.php%00.jpg => www.ijiandao.com/qq.php
?
二、文件上傳漏洞 %00截斷 繞過正確用法
這里需要用上抓包工具,我這里以“BurpSuite ”抓包工具為例,具體步驟如下:
?
1、 %00截斷 GET 用法
當是GET接收情況的時候,直接用 %00 就可以了。
?
某些情況下,直接在文件名中加 %00 進行截斷這是不對的,因為 %00 會以字符串的形式解析了。
如果沒有做后綴名判斷的情況下,那樣會變成:
www.ijiandao.com/qq.php%00.jpg => www.ijiandao.com/qq.php%00.jpg
也就是所謂的任意文件上傳漏洞了,這又是另一個概念了。
?
如果做了后綴名判斷的情況下,那樣是會直接報錯,不讓你上傳,因為你的后綴是 .jpg,不是 .php;
?
2、%00截斷 POST 用法
當是POST接收情況的時候,正確的用法應該是我們需要對 %00 做一個URL解碼,也就是URL-decode;
?
為什么兩者用法不同?
這是因為 %00 截斷在 GET 中被 url 解碼之后是空字符。但是在 POST 中 %00 不會被 url 解碼,所以只能通過 burpsuite 修改 hex 值為 00 (URL decode)進行截斷。
?
注意:
有些時候數(shù)據包中必須含有上傳文件后的目錄情況才可以用。
例如:數(shù)據包中存在 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" )) { move_uploaded_file($_FILES["file"]["tmp_name"], $dir . $target_name); // 將臨時文件移動到指定目錄 $result = $dir . $target_name; echo "Stored in: $result"; } else{ echo "Invalid file"; }
?
為什么修改path才可以?
因為程序中檢測的是文件的后綴名,如果后綴合法則拼接路徑和文件名。
那么,攻擊者修改了path以后的拼接結果為:uploads/aaa.php%00/20190818.php
移動文件的時候會將文件保存為:uploads/aaa.php
從而達到Getshell效果。
[超站]友情鏈接:
四季很好,只要有你,文娛排行榜:https://www.yaopaiming.com/
關注數(shù)據與安全,洞悉企業(yè)級服務市場:https://www.ijiandao.com/
- 1 像石榴籽一樣緊緊抱在一起 7904256
- 2 殲-35完成在福建艦上彈射起飛 7809675
- 3 深圳:建議準備至少3天的應急物資 7713223
- 4 唱著民歌迎豐收 7619347
- 5 日本“蘋果病”流行達歷史頂點 7521128
- 6 孩子的數(shù)學邏輯比運算結果重要 7424556
- 7 背簍老人等公交被拒載 司機被開除 7327798
- 8 榴蓮降至15元一斤 7237089
- 9 美團回應外賣功能癱瘓 7136268
- 10 港珠澳大橋主橋將封閉 7041429