Pikachu-File Inclusion, Unsafe file download & Unsafe file upload
檔案包含漏洞
File Inclusion(檔案包含漏洞)概述 檔案包含,是一個功能,在各種開發語言中都提供了內置的檔案包含函式,其可以使開發人員在一個代碼檔案中直接包含(引入)另外一個代碼檔案, 比如 在PHP中,提供了:
include(),include_once()
require(),require_once()
這些檔案包含函式,這些函式在代碼設計中被經常使用到,
大多數情況下,檔案包含函式中包含的代碼檔案是固定的,因此也不會出現安全問題,
但是,有些時候,檔案包含的代碼檔案被寫成了一個變數,且這個變數可以由前端用戶傳進來,這種情況下,如果沒有做足夠的安全考慮,則可能會引發檔案包含漏洞,
攻擊著會指定一個“意想不到”的檔案讓包含函式去執行,從而造成惡意操作,
根據不同的配置環境,檔案包含漏洞分為如下兩種情況:
1.本地檔案包含漏洞:僅能夠對服務器本地的檔案進行包含,由于服務器上的檔案并不是攻擊者所能夠控制的,因此該情況下,攻擊著更多的會包含一些
固定的系統組態檔,從而讀取系統敏感資訊,很多時候本地檔案包含漏洞會結合一些特殊的檔案上傳漏洞,從而形成更大的威力,
2.遠程檔案包含漏洞:能夠通過url地址對遠程的檔案進行包含,這意味著攻擊者可以傳入任意的代碼,這種情況沒啥好說的,準備掛彩,
因此,在web應用系統的功能設計上盡量不要讓前端用戶直接傳變數給包含函式,如果非要這么做,也一定要做嚴格的白名單策略進行過濾,
1、File Inclusion(local)

這個url有點東西哈

猜測有檔案包含漏洞,于是試一試看看

放一個馬在目錄里面

然后讀取康康:

成功利用馬進入服務器后端
2、File Inclusion(remote)


這個地方對filename傳參有了include的過濾,但可能存在ssrf漏洞,
http://xx.xx.xx.xx/pikachu/vul/fileinclude/fi_remote.php?filename=https://www.cnblogs.com/p201721420021/&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2

成功跳轉進我自己的博客中,
不安全的檔案下載
- 檔案下載功能在很多web系統上都會出現,一般我們當點擊下載鏈接,便會向后臺發送一個下載請求,一般這個請求會包含一個需要下載的檔案名稱,后臺在收到請求后 會開始執行下載代碼,將該檔案名對應的檔案response給瀏覽器,從而完成下載, 如果后臺在收到請求的檔案名后,將其直接拼進下載檔案的路徑中而不對其進行安全判斷的話,則可能會引發不安全的檔案下載漏洞,
此時如果 攻擊者提交的不是一個程式預期的的檔案名,而是一個精心構造的路徑(比如../../../etc/passwd),則很有可能會直接將該指定的檔案下載下來, 從而導致后臺敏感資訊(密碼檔案、源代碼等)被下載, - 所以,在設計檔案下載功能時,如果下載的目標檔案是由前端傳進來的,則一定要對傳進來的檔案進行安全考慮, 切記:所有與前端互動的資料都是不安全的,不能掉以輕心!
3、unsafe filedownload

要求是點擊圖片可以下載
那還是科比吧鏈接如下:
http://192.168.1.108/pikachu/vul/unsafedownload/execdownload.php?filename=kb.png
既然可以直接通過filename讀取檔案,那就直接構造payload:
http://192.168.1.108/pikachu/vul/unsafedownload/execdownload.php?filename=../../../shengcheng.txt


讀取網站后臺服務器上的檔案成功,
不安全的檔案上傳漏洞
不安全的檔案上傳漏洞概述檔案上傳功能在web應用系統很常見,比如很多網站注冊的時候需要上傳頭像、上傳附件等等,當用戶點擊上傳按鈕后,后臺會對上傳的檔案進行判斷 比如是否是指定的型別、后綴名、大小等等,然后將其按照設計的格式進行重命名后存盤在指定的目錄, 如果說后臺對上傳的檔案沒有進行任何的安全判斷或者判斷條件不夠嚴謹,則攻擊著可能會上傳一些惡意的檔案,比如一句話木馬,從而導致后臺服務器被webshell, 所以,在設計檔案上傳功能時,一定要對傳進來的檔案進行嚴格的安全考慮,比如:
--驗證檔案型別、后綴名、大小;
--驗證檔案的上傳方式;
--對檔案進行一定復雜的重命名;
--不要暴露檔案上傳后的路徑
4、client check


有一個提示,
先判斷是在前端還是后端有驗證:

查看該函式原始碼
1 function checkFileExt(filename) 2 { 3 var flag = false; //狀態 4 var arr = ["jpg","png","gif"]; 5 //取出上傳檔案的擴展名 6 var index = filename.lastIndexOf("."); 7 var ext = filename.substr(index+1); 8 //比較 9 for(var i=0;i<arr.length;i++) 10 { 11 if(ext == arr[i]) 12 { 13 flag = true; //一旦找到合適的,立即退出回圈 14 break; 15 } 16 } 17 //條件判斷 18 if(!flag) 19 { 20 alert("上傳的檔案不符合要求,請重新選擇!"); 21 location.reload(true); 22 } 23 }
那可以直接上傳,
按照要求包裝好一個假的gif

burpsuite抓包抓到手:

修改檔案后綴為php

可以看到已經上傳成功了

小馬被成功上傳

構造payload
http://your ip/pikachu/vul/unsafeupload/uploads/shengcheng.php?x=1

成功讀取服務器后端資料庫
5、MIME type

這一次并不是在前端進行驗證,

根據要求修改后綴后上傳

抓包后修改包內內容后上傳:

這里只是加了一個檔案型別的判斷,可以直接略過,
同理:

5、getimagesize()

發現仍然沒有前端的過濾,但是會判定是否為真的圖片,

(我欺騙你不就是為了完成作業的嗎我容易嘛我……)
提示里說是對圖片的大小有判定,那我們可以嘗試把木馬藏在圖片里上傳

先準備一張圖片:

(小聲bb:禰豆子天下第一可愛)
然后修改一下:

發現上傳成功了:

抓包看一下:

老規矩,修改后綴

報錯了

而且從之前上傳成功的那一張來看,后端會重新命名你的照片,所以單純修改檔案后綴貌似是沒有用的,

(00截斷也不行)
既然我們已經能把含有木馬的檔案上傳至后端,那可以利用檔案包含漏洞讀取木馬了,
先保存路徑:
然后找到之前的檔案包含漏洞的網頁:

url修改一下:

多試幾次就可以了:
http://your ip/pikachu/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/2019/12/22/1787915dfedbd8b2786128645616.jpg&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2

成功讀取出后端資料庫,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/47328.html
標籤:其他
下一篇:實驗報告 四
