Web安全-文件上傳漏洞


文件上傳漏洞是什么 

關鍵字:繞過

文件上傳是大部分Web應用都具備的功能,例如用戶上傳附件,改頭像,分享圖片等

文件上傳漏洞是在開發者沒有做充足驗證(包括前端、后端)情況下,運行用戶上傳惡意文件,這里上傳的文件可以使木馬、病毒、惡意腳本或者Webshell等

 環境搭建(及靶機)

# 第一次啟動
docker pull registry.cn-shanghai.aliyuncs.com/yhskc/bwapp
docker run -d -p 0.0.0.0:80:80 registry.cn-shanghai.aliyuncs.com/yhskc/bwapp

docker container list -a # 查看 container id
docker start xxx # xxx 就是上一步獲得的 container id,運行完這條命令后,訪問響應的網址即可

 

安裝

 

 點擊here

 

 

安裝成功,注冊用戶

 

 登錄

 

 選擇最低級別的,文件上傳,點擊Hack

 初級嘗試攻擊

准備一個簡單的一句話木馬

 

 

 通過POST取得一個值,這個值是hacker里的一個值,將我們的值轉換為PHP代碼

演示上傳,並演示這段代碼的威力。

點擊瀏覽---》選擇shell.php,點擊上傳、

 點擊here,可以看到shell.php上傳到images文件夾中

 

 為什么回顯是空的呢?因為這里是POST請求,沒有攜帶任何參數。我們如何控制呢?

我們可以使用兩個PHP函數,來測試我們的Webshell

  • get_current_user:獲取當前用戶名稱
  • getcwd:獲取當前路徑地址

 

 

 可以看到我們獲取當前用戶為www-data。

 

 獲取到當前執行目錄

這里我們使用函數執行,工作效率太低,接來下使用中國菜刀。下載地址https://github.com/raddyfiy/caidao-official-version

  打開中國菜刀

 

 點擊空白處添加

 

添加地址,指定hacker字段,點擊添加,添加后雙擊打開

 

 查看是否能夠執行命令,點擊鏈接右鍵,獲取虛擬終端

 

 

 

 

 

不同語言的一句話木馬

asp

<%execute(request("value"))%>

php

<?php @eval($_POST['hacker']); ?>

aspx

<%@ Page Language="Jscript"%>
<%eval(Request.Item["value"])%>

其他

<%eval request("value")%>
<%execute request("value")%>
<%execute(request("value"))%>

 初探文件上傳漏洞-->繞過

同樣是file upload 上傳頁,設置為中級,點擊set

 

 我們還是上傳之間的文件,看看是不是還能上傳,點擊瀏覽,選擇之前的shell.php,點擊upload

 

 這里出現上傳文件類型不允許。這時候我們要思考一下,限制文件類型,是限制文件后綴名,我們嘗試一下其他后綴名是否可以上傳。

將shell.php,復制一份叫shell.php3,看是否可以上傳

 

 

 點擊上傳,可以看到成功上傳

 

 我們上傳的shell.php1 不是常規的php文件,能否執行我們的之句話木馬的指令嗎?我們是curl指令測試一下

 

其實這里,只能上傳php3后綴的才能正常解析,我們看一下究竟是為什么。我們的靶機是通過apache2容器啟動的,我們來看一下apache2的配置。web-server 不知道后端使用的什么語言,但是對后端語言是具有解析能力的。這是我們看apache2是如何解析php語言的,這樣我們就知道為什么php3可以解析,而其他的不行。

 

通過這個配置我們可以看到加載了mods解析配置文件,所以我們進入這個文件夾查看所支持的mods,進入我們看到php5.conf的配置文件,我們查看一下如何配置的。

我們可以看到紅框中的配置,意思是當發現文件后綴是php3、4、5或者是phtml、pht的時候都會解析成php代碼。

 文件上傳漏洞中級-->前端驗證繞過,.htaccess繞過,大小寫繞過

前端驗證繞過

很多網站、CMS都在使用,只在前端利用JavaScript驗證

漏洞利用流程:(兩個方法都可以)

  • 通過Burp Suite抓包,然后修改內容放行
  • 通過chrome禁止JavaScript代碼

.htaccess繞過

什么是.htaccess

.htaccess文件是分布式配置文件,使得配置文件可以隨文件夾不同而不同,其所放置的文件夾及所有子文件夾都會受此影響,其語法通apache主配置文件

如何利用.htaccess

場景:啟用.htaccess文件的網站,使用此文件類型來繞過限制較全面的黑名單過濾

繞過流程

1、上傳一個.htaccess文件,文件內容設置為【AddType application/x-httpd-php .test】

2、上傳一句話木馬文件,文件名設置為shell.php

3、在瀏覽器中訪問shell.test即可執行一句話木馬

大小寫繞過

這是一種比較簡單的繞過方式,同樣是針對黑名單過濾

如果想要上傳一個php木馬,那么我們可以上傳一個pHp即可。

文件上傳漏洞高級-->文件流繞過,字符串截斷繞過,文件頭檢查繞過

Windows文件流特性繞過

什么是Windows文件流?

NTFS文件系統實現了多文件流的特性,NTFS環境一個文件默認使用的是未命名的文件流, Windows資源管理器默認不顯示出文件的命名文件流,這些命名文件流在功能上和默認使用的未命名文件流一致,甚至可以用來啟動程序。

 

我們來用windows平台做一些測試

創建一個文件流

 

 查看test.txt里是沒有內容的

 

 我們使用notepad 打開文件流,我們可以看到文件內容是存在的

 

 

接下來把test打印到文件本身,看看文件是否發生變化

 

 查看內容就在文件內

 

 將默認數據流輸入222,

 

查看內容已經是222

 

 這說明 我們在日常寫文件的過程中,是寫的他的默認數據流

 字符串截斷繞過

 字符串截斷繞過主要是編碼類的繞過。一般限制是通過白名單限制,例如上傳圖片,會過濾文件結尾不是jpg,png等上傳文件,理論上這種上傳是不好繞過的,但有部分上傳在保存文件的時候,是兩部分組成,一部分是上傳路徑,一部分是文件名,而路徑是從前端獲取的,所以我們可以采用在路徑上截斷。

案例

打開Burp 代理,點擊攔截功能,點擊上傳,將原來shell.php,修改成shell1.php.jpg,並上傳。

 

 可以看到我們已經攔截了,他的請求,接下來我們修改一下內容。可以想一下我們目前要上傳這個文件的話,一定是叫shell1.php.jpg。接下來我們修改一下這個內容,我們在PHP后面加一個空格

 

 

 空格的編碼是20,便於我們在16進制中查找

 

 接下來我們將20改成00

 

 

 

 點擊發送,這樣就繞過了。

 文件頭檢查繞過

常見的文件頭格式

png的文件頭

 

 jpg的文件頭

 

 

如何實現文件頭繞過呢?

有一些情況下,文件上傳是要檢查文件內容呢?一般就是檢查文件頭,我們可以把php代碼內容追加到一個jpg或者png圖片里,這樣就能繞過文件頭檢查。(簡單說就是把php木馬和圖片文件合並)

 防御措施

1、文件類型檢查:白名單優於黑名單

2、使用安全的函數編程

3、熟悉業務不熟的OS、Web Server配置

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM