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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

00截断上传绕过_关于上传中的00截断分析

發布時間:2024/9/30 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 00截断上传绕过_关于上传中的00截断分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

00截斷原理

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

00截斷的限制條件1PHP<5.3.29,且GPC關閉

00截斷的利用方法

上傳文件后綴檢測代碼1

2

3

4

5

6

7

8

9

10

11

12

13$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";

}

誤區

有很多朋友喜歡在文件名中加%00進行截斷,筆者認為這種方式是不對的,為什么呢?比如攻擊者構造文件名:admintony.php%00a.jpg,在提取后綴名的時候遇到%00則認為字符串結束了,那么他提取到的后綴名會是.php,.php后綴又不允許上傳所以上傳失敗了(這里有必要提一句,有人可能會說在一些情況下,%00截斷文件名可以成功,這種案例你試一下是不是任意文件上傳,西普的00截斷實驗就是一個任意文件上傳的上傳點,既然是任意文件上傳又何必用00截斷繞過呢?)

正確用法

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

為什么修改path才可以,因為程序中檢測的是文件的后綴名,如果后綴合法則拼接路徑和文件名,那么攻擊者修改了path以后的拼接結果為:uploads/aaa.php%00/2018051413370000.php,移動文件的時候會將文件保存為uploads/aaa.php,從而達到Getshell效果。

疑問:

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

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

%00和%00(urldecode)

在網上常見用Burp將數據包中的%00進行urldecode的操作,那為什么要進行這一個操作?網上也常見直接放入%00就可以截斷成功的案例,為什么呢?

%00(urldecode)

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

%00

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

總結

以上是生活随笔為你收集整理的00截断上传绕过_关于上传中的00截断分析的全部內容,希望文章能夠幫你解決所遇到的問題。

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