BUUCTF--[ACTF2020 新生赛]Include

目录

1、本题详解

2、延伸拓展


1、本题详解

访问题目链接 

BUUCTF--[ACTF2020 新生赛]Include_第1张图片

有一个tips的链接,我们点击

BUUCTF--[ACTF2020 新生赛]Include_第2张图片请求了file,内容是flag.php的内容:Can you find out the flag?

尝试请求一下index.php

BUUCTF--[ACTF2020 新生赛]Include_第3张图片

并没有发现什么信息

BUUCTF--[ACTF2020 新生赛]Include_第4张图片

flag.php也没发现什么

BUUCTF--[ACTF2020 新生赛]Include_第5张图片

尝试爆破一下它的目录和一些敏感文件名

但是遇到429报错,请求被服务器拒绝,因为发送了太多请求 

想起题目名叫Include,应该考察的是文件包含,因此尝试使用伪协议进行文件读取

首先使用 php://filter(用于读取源码)

这里直接尝试读取当前目录下的flag.php

进行base64编码输出,构造payload:

?file=php://filter/read=convert.base64-encode/resource=flag.php

读取成功

BUUCTF--[ACTF2020 新生赛]Include_第6张图片

进行base64解码

BUUCTF--[ACTF2020 新生赛]Include_第7张图片

拿到 flag{f88d4b88-a1d0-4245-9c11-69da16affdac}

2、延伸拓展

关于php://filter的用法:

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

读取文件源码(针对php文件需要base64编码)

当然有时候会对编码进行过滤和限制,这时我们就需要使用一些其他的编码方式

比如使用utf8和utf16

/?file=php://filter/convert.iconv.utf8.utf16/resource=flag.php

BUUCTF--[ACTF2020 新生赛]Include_第8张图片

读取出来的内容就不需要解base64了

这里说一下这个iconv函数:完成各种字符集间的转换

比如 iconv("utf8","gbk",$string) :将字符串string 编码由utf8转变成gbk

以及convert.iconv.的用法:

convert.iconv..
或者
convert.iconv./

就是编码方式

常用的编码方式有:

UCS-4*
UCS-4BE
UCS-4LE*
UCS-2
UCS-2BE
UCS-2LE
UTF-32*
UTF-32BE*
UTF-32LE*
UTF-16*
UTF-16BE*
UTF-16LE*
UTF-7
UTF7-IMAP
UTF-8*
ASCII*
EUC-JP*
SJIS*
eucJP-win*
SJIS-win*

比如我们的payload还可以是:

?file=php://filter//convert.iconv.SJIS*.UCS-4*/resource=flag.php

但是这种编码读取php文件似乎不行,不过我们可以读其他的,比如etc下的passwd

?file=php://filter//convert.iconv.SJIS*.UCS-4*/resource=/etc/passwd

BUUCTF--[ACTF2020 新生赛]Include_第9张图片

尝试使用 php://input (用于执行PHP代码)进行代码执行:

BUUCTF--[ACTF2020 新生赛]Include_第10张图片

回显 hacker!

应该是被检测了,我们读取一下index.php的源码看看

/?file=php://filter/convert.iconv.utf8.utf16/resource=index.php

BUUCTF--[ACTF2020 新生赛]Include_第11张图片

确实过滤掉了很多伪协议,但是 php://filter 是可以使用的,这也是为什么我们能读取到flag.php

你可能感兴趣的:(web,PHP,php,文件包含,web安全,伪协议)