米安程式碼審計 04 截斷漏洞剖析

青蛙愛輪滑發表於2018-07-24

本文記錄 PHP 程式碼審計的學習過程,教程為暗月 2015 版的 PHP 程式碼審計課程

PHP 程式碼審計部落格目錄

1. 環境

  1. 虛擬機器搭建的環境
  2. web環境: phpstudy php5.4
  3. 程式版本:dvwa
  4. %00 截斷所需要的 php 版本必須小於 5.3.4,否則不執行

2. 漏洞復現

  1. 簡介

    該漏洞存在於php的move_uploaded_file()函式中,這個函式一般在上傳檔案時被使用,用途是將上傳的檔案移動到新位置。

  2. 語法

     move_uploaded_file ( string $filename , string $destination )
    
  3. 測試

    這次的漏洞就出現在 $destination 這個引數中,這個引數代表的是上傳檔案移動的最終目的地址。如果 $destination 變數是從使用者 $_GET 或 $_POST 中獲得的並且我們可控,那麼我們可以利用空字元 %00 來截斷後面的擴充名,從而造成任意檔案上傳。

    利用 DVWA 的 high 難度來演示,首先我們把 move_uploaded_file() 函式的第二個引數改成我們可控的 $_POST[‘xxname’]。

    在這裡插入圖片描述

    上傳檔案,這裡把POST的xxname引數利用空字元進行截斷。

    在這裡插入圖片描述

    上傳的檔案

    在這裡插入圖片描述

    受影響的 php 版本:

    5.4.38~5.6.6,同時由於php 5.2版本本身就受到00截斷漏洞的影響,所以也在受影響的行列之中。

相關文章