PHP的LFI的漏洞大部分来自于不安全的配置.

常见的漏洞函数:
include(),require()、include_once(),require_once()
magic_quotes_gpc()、allow_url_fopen()、allow_url_include()、move_uploaded_file() 、readfile() file()、and file_get_contents()、upload_tmp_dir()、post_max_size()、and max_input_time()等

eg:

1
<?php include($_GET['page'].'php')?>

虽然说lfi的漏洞可能出现的情况很多,但是大多数漏洞还是比较鸡肋的.
像apache的日志 包含/proc/self/environ环境变量 之类的 总的来说条件是比较苛刻的.
还有一些伪协议之类的,例如php:filter php:input data:// zip:// …
0x01
这里我主要介绍一下phpinfo+lfi(zip伪协议)的情况。
首先的找到一个phpinfo的页面,这样才能利用它的超全局变量_FILES[“file”]
我们上传一个文件的时候有时是会被上传到一个指定的目录下的,名字也会被重新命名,所以并不好找.但是中间要在/tmp目录下先生成一个临时的文件,一旦php将临时文件的信息写入其他地方,临时文件就会被删除。
恰好临时文件的名字在_FILES[“file”]中有,所以我们就可以包含它来达到我们要的目的,拿shell之类的.
先看看图:
phpinfo信息:


上传文件:

大致过程是:
文件上传–>php开始分析文件–>创建临时文件–>写入数
据到临时文件–>关闭临时文件–>执行脚本生成上传的文件–>删除临时文件
所以攻击的发生在写入数据之后到删除临时文件之前即可.

环境测试–>点我