復現檔案上傳漏洞(靶場練習)
最近越來越感覺菜了,又把各種漏洞基礎原理深入再次看了一遍,鞏固一下。然後找到一個不錯的上傳漏洞彙總的靶場,記錄一下。
本地搭建好是下面這個頁面:
考察點:
直接開始
第一關
檢視提示
直接利用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截斷繞過:
構造
或者
均可繞過
復現了聽過沒實際操作過或者沒了解過的姿勢。同一關卡可以有不同姿勢,也是有待研究和補充的。