1. 程式人生 > >復現檔案上傳漏洞(靶場練習)

復現檔案上傳漏洞(靶場練習)

最近越來越感覺菜了,又把各種漏洞基礎原理深入再次看了一遍,鞏固一下。然後找到一個不錯的上傳漏洞彙總的靶場,記錄一下。

本地搭建好是下面這個頁面:

考察點:

直接開始

第一關

檢視提示

直接利用Burp Suite代理改字尾 ,或者利用外掛禁用js。

成功上傳 

第二關

檢視提示

利用Burp Suite修改Content-Type型別為 image/jpeg 

成功上傳

第三關

檢視提示

修改後綴為php3依然會被解析

成功上傳

第四關

檢視提示

是基於黑名單的方式,這一關利用重寫檔案解析規則繞過    上傳.htaccess檔案(基於黑名單)

大概原理:

Apache中當上傳到檔案全部被解析為.jpg的字尾時。可以嘗試一下字尾為.htaccess的檔案。

<FilesMatch "4.jpg">
SetHandler application/x-httpd-php
</FilesMatch>

程式碼的含義 是 將上傳的檔案字尾名為.jpg格式的檔案以 php格式來解析檔案成功繞過

上傳

菜刀連線一下

第五關

檢視提示

這裡無法使用.htaccess檔案繞過

利用PHP 和 Windows環境的疊加特性,以下符號在正則匹配時的相等性:

雙引號"     =   點號.
大於符號>   =   問號?
小於符號<   =   星號*

然後使用:截斷上傳, :截斷上傳會使檔案為空,可以利用上述特性再次上傳  5.<  覆蓋寫入shell。

成功上傳,但是大小為0KB。

再次上傳

成功寫入

第六關

檢視提示

依舊是黑名單過濾,檢視原始碼

還是利用Windows系統的檔名特性,檔名中不能出現點,冒號,空格等符號的特性,會直接消除。

在Burp Suite中修改其上傳名加上 空格 繞過程式碼。

成功上傳

第七關

檢視提示

檢視原始碼

與上一關相比,並沒有刪除點   可以最後加點繞過

成功

第八關

檢視提示

檢視原始碼

這裡沒有過濾 ::$DATA 利用 Windows檔案流特性繞過 構造8.php::$DATA 會被儲存為8.php

當然我們也可以通過構造8.php. .  點空格點 繞過函式校驗。

這裡就演示構造8.php::$DATA

第九關

檢視提示

檢視原始碼

依然是黑名單校驗加檔名處理

這裡就利用上一關的第二種方式繞過

成功

第十關

檢視提示

會去除指令碼字尾,可以通過雙寫繞過

可以看到儲存為10.php

第十一關

檢視提示

抓包

補充點知識:

截斷條件: php版本小於5.3.4   大於此版本的修復了

php的magic_quotes_gpc為OFF狀態  這函式是魔術引號,會對敏感的字元轉義的 空就會被轉義加個反斜槓

因為我們是整合包,所以環境一切都是完美的~~~

利用截斷,構造路徑    檔名就會被截斷啦。

成功

第十二關

檢視提示

老樣子,抓包修改

提交方式不一樣而已 構造0x00截斷 這裡在16進位制改加個分號方便查詢進行修改

成功

第十三關

只需將圖片馬上傳即可,後期可以利用檔案包含漏洞實現getshell

檢視提示

這裡進行了上傳檔案頭檢測

我們在我們的上傳檔案 加入jpg,png,gif的檔案頭

這裡是16進位制 可以用winhex進行檢視修改          或者直接構造圖片馬(下一題)

提交

等效16進位制

成功,檔案已經重新命名

- - 偷偷懶就不寫jpg和png了

第十四關

檢視提示

getimagesize() 函式用於獲取影象大小及相關資訊,成功返回一個數組,失敗則返回 FALSE 併產生一條 E_WARNING 級的錯誤資訊,我們在圖片中插入一句話並且可以正常顯示圖片繞過此函式。

構造圖片馬

準備一張正常的圖,和一句話木馬  在命令列

copy 1.jpg /b + 1.php  14.jpg                 

引數/b指定以二進位制格式複製、合併檔案; 用於影象類/聲音類檔案  

意思是將1.jpg以二進位制與1.php合併成14.jpg  14.jpg就是圖片馬 記事本方式開啟一句話木馬被插在最後

上傳

- - 然後就失敗了,我試了試正常的jpg圖片也不行。png和gif的通過

第十五關

檢視提示

這一關拿上一次生成的jpg馬就可以上傳~    

第十六關

檢視提示

檢視原始碼

二次渲染- - 

根據使用者上傳的圖片,生成一個新的圖片,然後刪除使用者上傳的原始圖片,將新圖片儲存到資料庫中。

從其他writeup找的過渲染的圖片馬(強)

和這個損壞的jpg警告提示報錯,但是依舊成功上傳,並且沒有重新命名。

- - 自己想了不少姿勢,想打組合拳,都沒有bypass。

第十七關

檢視提示

上傳php檔案會被刪除 利用條件競爭漏洞,不斷請求資源,在刪除檔案之間請求該檔案。

<?php fputs(fopen('../shell.php','w'),'<?php @eval($_POST[aaa]) ?>'); ?>

本地沒有復現成功- - , 然後用第五關的姿勢也是得到了getshell

第十八關

程式碼審計

參考別人的writeup(待補充原理~)     利用上傳重新命名競爭+Apache解析漏洞  不斷髮包

可用菜刀直接連線

第十九關

檢視提示

CVE-2015-2348

move_uploaded_file() 00截斷,上傳webshell,同時自定義儲存名稱,直接儲存為php是不行的 
發現move_uploaded_file()函式中的img_path是由post引數save_name控制的,因此可以在save_name利用00截斷繞過: 
 

構造

或者

均可繞過

復現了聽過沒實際操作過或者沒了解過的姿勢。同一關卡可以有不同姿勢,也是有待研究和補充的。