打靶归来 - 详解upload-labs靶场(上)
一、環境準備
① - 靶場的搭建
- 下載地址:upload-labs
- upload-labs靶場曾有過一次更新,更新新添加了一道Pass-05,有一些以前的教程的題號與這篇教程不符合,請各位自行分辨
- 本篇作者所用到的PHP版本為5.4.45,只有在做部分題目時需要修改
- Pass03的繞過需要配置apache的httpd.conf文件
作者在小皮面板上配置均失敗,只在phpstudy上配置成功,且版本限制在5.4.45 - Pass05的繞過需要服務器腳本語言為PHP,且服務器使用CGI/FastCGI模式(在phpstudy中配置nts即可,用完之后記得設置回來)
- Pass12與Pass13的繞過需要配置php版本小于5.3.29,且php.ini中的magic_quotes_gpc為OFF狀態
注意:更改配置之后記得重啟服務器
② - 準備webshell
③ - 說明
二、題解
【Pass01 - 前端Javascript過濾】
題目:
繞過方法:
本題使用Javascript代碼進行過濾,禁用網站的Javascript權限即可完成繞過
第一步:禁用網站權限
第二步:上傳webshell,出現無法顯示的圖片說明上傳成功
第三步:上傳成功后,通過瀏覽器的返回結果得到webshell的存儲位置,訪問webshell
出現php版本信息代表上傳成功!
【Pass02 - MIME類型過濾】
題目:
繞過方法:
通過抓包修改請求頭的MIME類型繞過過濾
第一步:上傳webshell
第二步:抓包,修改MIME類型
第三步:上傳后,訪問webshell
第四步:使用蟻劍進行getshell
出現2操作說明webshell能夠連接,接下來可以測試命令的執行
執行成功,可以進行getshell
— Pass03 ~ Pass05 黑名單檢測使用特殊方法繞過
【Pass03 - 使用其它后綴名繞過】
題目:
繞過方法:
本題使用黑名單過濾,且只過濾原始的后綴,所以可以使用不在其黑名單中的后綴進行繞過,Pass04和Pass05的方法可以在這一題使用,也可以使用其它的后綴名進行繞過。但前提是apache的http.conf文件做了如此配置
第一步:上傳后綴名為.phtml(根據配置嘗試)的webshell
第二步:確認webshell是否上傳成功
【Pass04 - 利用.htaccess繞過】
題目:
繞過方法:
本題沒有過濾.htaccess文件,可以通過上傳.htaccess文件來為一個webshell文件更改后綴,來幫助webshell進行繞過
第一步:構造一個.htaccess文件
<FilesMatch "1.png"> setHandler application/x-httpd-php </FilesMatch>第二步:將.htaccess文件上傳到服務器
第三步:將WebShell文件修改為指定的名字與后綴(1.png),上傳到服務器
第四步:直接訪問更改了后綴的WebShell文件即可執行該文件(1.png)
【Pass05 - 利用.user.ini文件包含】
題目:
繞過方法
本題沒有過濾.user.data文件,且在目錄下存在一個已知的php文件,可以通過.user.data文件配置使原有的php文件包含webshell
第一步:構造.user.php文件并上傳
auto_prepend_file=1.png
第二步:上傳指定文件名的webshell
上傳后等待五分鐘(默認配置),使文件生效
第三步:打開已知的php文件,即可執行webshell
— Pass06 ~ Pass11 黑名單檢測修改后綴名繞過
這些類型過于簡單,就不再按步驟講解了,只會簡單的分析源碼和說明原理
# 以下代碼是較為完整的放防御姿勢,但還是有繞過方法,可以對比這個來判斷有哪些最簡單的繞過姿勢 $file_name = trim($_FILES['upload_file']['name']);//提取文件名 $file_name = deldot($file_name);//刪除文件名末尾的點 $file_ext = strrchr($file_name, '.');//從文件名中提取后綴名 $file_ext = strtolower($file_ext); //轉換為小寫 $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA $file_ext = trim($file_ext); //首尾去空【Pass06 - 利用大小寫繞過】
題目:
繞過方法
缺少大小寫轉換,可以通過修改后綴的大小寫來繞過
原理:Windows中對大小寫是不敏感的
【Pass07 - 利用空格繞過】
題目:
繞過方法
缺少末尾去空格,可以給文件名后綴末添加空格來繞過
原理:Windows在保存文件時,會自動去除末尾的空格
【Pass08 - 利用.繞過】
題目:
繞過方法
缺少末尾去.,可以給文件名后綴末添加.來繞過
原理:Windows在保存文件時,會自動去除末尾的.
【Pass09 - 利用::$DATA繞過】
題目:
繞過方法
缺少去除字符串::$DATA,利用在后綴名之后添加字符串::$DATA繞過
【Pass10 - 后綴名繞過的綜合利用】
題目:
繞過方法
仔細看一下,這題的代碼就是之前寫出來的較為完整的防御姿勢,可以說把之前出現的所有情況都考慮完全了,但仍然存在繞過方法。
這一題可以使用點+空格+點繞過,我們來分析以下這種方法的可行性
使用這種方式,可以繞過之前出現的大部分黑名單檢測,所以說在Windows系統種使用黑名單檢測是真的不安全
【Pass11 - 雙寫繞過】
題目:
繞過方法
將數據替換為空,則可以使用雙寫繞過,即在后綴名中嵌套后綴名進行繞過
— Pass12 ~ Pass13 白名單檢測使用00截斷繞過
【Pass12 - URL路徑可控的%00截斷】
題目:
繞過方法
讓URL中最后一個.后的數據符合白名單的條件,然后利用%00截斷使它無效(URL中遇到%00就會認為讀取結束,修改路徑值讓路徑值在%00前的數據被當作文件名)
即:../upload/shell.php%00shell.png會被當作../upload/shell.php
第一步:修改webshell的后綴為白名單內的后綴并上傳
第二步:抓包,然后修改URL值
第三步:訪問%00前填入的文件名,判斷是否上傳成功
【Pass13 - POST路徑可控的0x00截斷】
題目:
繞過方法
當url中出現了0x00就會認為讀取已經結束。若文件的保存路徑通過表單傳參,則可以在保存路徑參數后加上WebShell的文件名,并以0x00結束即可實現繞過
第一步:修改webshell的后綴為白名單內的后綴并上傳
第二步:抓包,然后修改POST中的路徑值
第二步的詳細步驟:
修改完成后發包
第三步:訪問0x00前填入的文件名,判斷是否上傳成功
下篇編寫完成:打靶歸來 - 詳解upload-labs靶場(下)
總結
以上是生活随笔為你收集整理的打靶归来 - 详解upload-labs靶场(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AidLux“人像抠图”案例源码详解 (
- 下一篇: 产品创新