文件包含漏洞绕过(拓展知识1)


当你的才华

还撑不起你的野心时

那你就应该静下心来学习


目录

遇到str_replace  ->双写绕过

php://filter 

!!!文件包含+php://filter!!!

!!!文件包含+php://input!!!


遇到str_replace  ->双写绕过

远程文件包含,除http://协议以外,允许使用其它协议,比如file://

 

防御手段:

1.遇到固定后缀,使用%00截断(%00截断适用范围,php version<5.3.4,实验证明php 5.2.x可用〉

       低版本,本地文件包含,绕过,使用256个"."

       注:phpinfo. jpg.......... 此处省略256个"."

 

php://filter 

转 化 为 base64
php: //filter/read=convert.base64-encode/resource=file.txt

转化为小写
php://filter/read=string.tolower/resource=file.txt

转化为大写
php://filter/read=string.toupper/resource=file.txt

转化为 rotl3
php://filter/read=string.rotl3/resource=file.txt

php:// — 访问各个输入/输出流(I/O streams)

说明:

PHP 提供了一些杂项输入/输出(IO)流,允许访问 PHP 的输入输出流、标准输入输出和错误描述符, 内存中、磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器。

php://filter 是一种元封装器,设计用于数据流打开时的筛选过滤应用。这对于一体式(all-in-one)的文件函数非常有用,类似 readfile()、file()和file_get_contents(),在数据流内容读取之前没有机会应用其他过滤器。

容读取之前没有机会应用其他过滤器。

php://filter 参数

名称

描述

resource=<要过滤的数据流>

这个参数是必须的。它指定了你要筛选过滤的数据流。

read=<读链的筛选列表>

该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔。

write=<写链的筛选列表>

该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔。

<;两个链的筛选列表>

任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。

 

!!!文件包含+php://filter!!!

当文件包含参数直接给一个文件路径或文件名时(php文件),php文件会被执行。但若只想查看php文件的源代码,此时应使用php://filter。

include.php?file=php://filter/read=convert.base64-encode/resource=[php文件名]

此时文件包含会把文件的内容进行base64编码,然后输出到浏览器上。

 

!!!文件包含+php://filter!!!

当文件包含参数直接给一个文件路径或文件名时(php文件),php文件会被执行。但若只想查看php文件的源代码,此时应使用php://filter。

include.php?file=php://filter/read=convert.base64-encode/resource=[php文件名]

此时文件包含会把文件的内容进行base64编码,然后输出到浏览器上。

php伪协议(PHP 带有很多内置 URL 风格的封装协议)

文件包含漏洞绕过(拓展知识1)_第1张图片

php://input 是个可以访问请求的原始数据的只读流。POST请求的情况下,最好使用 php://input 来代替 $HTTP_RAW_POST_DATA,因为它不依赖于特定的 php.ini 指令。而且此时$HTTP_RAW_POST_DATA 默认没有填充,比激活always_populate_raw_post_data 潜在需要更少的内存。(enctype="multipart/form-data" 的时候php://input 是无效的。)

 

!!!文件包含+php://input!!!

前提条件:allow_url_include = On 且 PHP >= 5.2.0

(在allow_url_include = On 传说中就可以直接RFI了 不过没有vps的童鞋可以这样玩比较方便。)

 

include.php?file=php://input

改为用POST方式请求,在请求实体输入php代码,如  ,此时利用文件包含则执行了该代码。

但是,直接include.php?file= 是不能执行参数file后面的代码的。

 

zip://  可以解压压缩包并执行指定文件 绝对路径.zip#文件名(#->%23)

phar://  可以用相对路径 ?file=test.zip/phpinfo.php     (不用#来指定文件,用/)

data://   如 ?file=data://text/plain,  则浏览器显示123

 


我不需要自由,只想背着她的梦

一步步向前走,她给的永远不重


 

你可能感兴趣的:(渗透测试,Web,文件包含,前渗透篇)