文件包含简要概括
文件包含漏洞
可以看看https://blog.csdn.net/qwe304/article/details/126826456
include将1.txt里面的内容当作php代码来执行
1.本地文件包含
无限制
像上面所演示的就是无限制的本地包含
也可以利用目录遍历读取包含其他目录下的文件
有限制
类似这样的就是有限制的,后面增加一个其他未知的后缀,然后文件包含就会报错,这时候可以用以下方法进行绕过
1.%00截断
1 |
|
2.长度截断
1 |
|
2.远程文件包含(危害更大)
看代码和开发平台有没有限制,如PHP中就有allow_url_include开关
无限制
有限制
做题目一般用到的伪协议
php://filter用于读取源码,php://input用于执行php代码。
1.php://input(伪协议)
相关链接:https://blog.csdn.net/qq_51295677/article/details/123462929
php://input要求allow_url_include设置为On
2.读取源代码(php://filter伪协议)
有时候做命令执行的题目也需要用到filter伪协议
?c=include$_GET[e]?>&e=php://filter/read=convert.base64-encode/resource=flag.php
1 |
|
3.data://(数据流的读取)
php 5.2.0 起,数据流封装器开始有效,主要用于数据流的读取,如果传入的数据是PHP代码就会执行代码。
1 |
|
phar://伪协议
phar://路径/文件名的前缀
NSSCTF上的一个bingdundun文件上传为例子
首先先写一个马子,
GIF89a
然后保存为shell.php
压缩为zip格式的,进行上传,最后利用phar://伪协议
前面有个bingdundun=…(这里跟路径)
比如说我的路径是11111111.zip 后面跟1111111.zip/shell,最后蚁剑连接
zip://伪协议
利用方式:
zip:// + zip路径 + %23(#号)+上传的php文件名
先将一个一句话木马压缩成zip格式的,再变成jpg格式的上传
日志文件包含
利用access.log(主要是记录客户端访问服务器的所有请求信息)和error.log(记录相关的错误信息的)
以一道文件包含的题目来进行讲解(NSSCTF里面的一题)
用伪协议发现并不起作用了,这时我们可以利用日志文件包含 (access.log 和error.log)
我们可以进行抓包看到是nginx服务器
则利用以下路径可以查看日志文件
1 |
|
可以查看,那么我们就通过抓包添加一句话木马,再发包,利用蚁剑进行连接
一句话木马在User-Agent里面添加
就成功的连接上了后门