米安代码审计 04 截断漏洞剖析

本文记录 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’]。

    米安代码审计 04 截断漏洞剖析_第1张图片

    上传文件,这里把POST的xxname参数利用空字符进行截断。

    米安代码审计 04 截断漏洞剖析_第2张图片

    上传的文件

    米安代码审计 04 截断漏洞剖析_第3张图片

    受影响的 php 版本:

    5.4.38~5.6.6,同时由于php 5.2版本本身就受到00截断漏洞的影响,所以也在受影响的行列之中。

你可能感兴趣的:(代码审计)