00截断

一、PHP 00截断 在php 5.3.4中php修复了0字符,但是在之前的版本中00在php中危害较大。 简单测试一下 php 版本<5.3.4 $_GET["filename"] 这样就可以接收到,这样的请求filename=test.php%00.txt 主要利用常见: 1.上传时路径可控,使用00截断 2.文件下载时,00截断绕过白名单检查 3.文件包含时,00截断后面限制(主要是本地包含时) 4.其它与文件操作有关的地方都可能使用00截断。 二、asp 00截断 在文件上传路径可控中使用过,但是今天发现<%response.write(request("Filename"))%> 传入filename=test.asp%00.txt 获得参数值是test.asp asp应该自动可以截断00后内容。 又看了一下asp上传路径可控的代码,发现这套代码并不是使用request获得的参数, formPath=upload.form("uploadtypefy") 获得文件路径 对应的函数:

Public function Form(strForm)
    strForm=lcase(strForm)
    if not objForm.exists(strForm) then
      Form=""
    else
      Form=objForm(strForm)
    end if
  end function

应该是这种获得路径的方法有问题,还没有想到其它的利用方法。 三 jsp 00截断

<%
 String temp=request.getRealPath("/")+request.getParameter("path");
  out.println(temp);
  String ext = temp.substring(temp.lastIndexOf(".") + 1);
  out.println(ext);
  %>

发现确实可以使用00截断,如传入path=shell.jsp%00.txt 获得后缀是txt,但是操作文件的api是使用c实现会导致00截断。因此这个与php相似,利用场景是文件上传 文件下载等。 四aspx 00截断 Request.QueryString["filename"].ToString() 很诡异aspx的请求参数可以产生00截断,而且文件下载也会成功。但是asp的却不可以