当前位置:   article > 正文

2023i春秋香山杯网络安全大赛Write up_ctf香山杯2023wp

ctf香山杯2023wp

Misc

签到

aW9kant6aDFmMHAzXzJfRndpfQ==

根据base64编码特征,不难看出这是base64编码

在Kali中进行base64解码
在这里插入图片描述

iodj{zh1f0p3_2_Fwi}

发现不是flag,根据以往做题经验,猜测是二次加密,再看这个格式像是凯撒移位

根据凯撒移位规则,得出移位数为3,故key是3

进行凯撒移位密码解密
在这里插入图片描述

爆出flag:

flag{we1c0m3_2_ctf}

Web

PHP_unserialize_pro

题目内容:小明已经学会反序列化啦!但是这道题有点难呢?怎么办呢?
环境:

<?php
  error_reporting(0);
class Welcome{
  public $name;
  public $arg = 'welcome';
  public function __construct(){
    $this->name = 'Wh0 4m I?';
  }
  public function __destruct(){
    if($this->name == 'A_G00d_H4ck3r'){
      echo $this->arg;
    }
  }
}

class G00d{
  public $shell;
  public $cmd;
  public function __invoke(){
    $shell = $this->shell;
    $cmd = $this->cmd;
    if(preg_match('/f|l|a|g|\*|\?/i', $cmd)){
      die("U R A BAD GUY");
    }
    eval($shell($cmd));
  }
}

class H4ck3r{
  public $func;
  public function __toString(){
    $function = $this->func;
    $function();
  }
}

if(isset($_GET['data']))
  unserialize($_GET['data']);
else
  highlight_file(__FILE__);
?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

经过分析,不难看出是pop链

先了解pop链理论知识

常用于上层语言构造特定调用链的方法,与二进制利用中的面向返回编程(Return-Oriented Programing)的原理相似,都是从现有运行环境中寻找一系列的代码或者指令调用,然后根据需求构成一组连续的调用链,最终达到攻击者邪恶的目的。类似于PWN中的ROP,有时候反序列化一个对象时,由它调用的__wakeup()中又去调用了其他的对象,由此可以溯源而上,利用一次次的 " gadget " 找到漏洞点。
常用魔法函数

__invoke() 当一个类被当作函数执行时调用此方法。

__construct 在创建对象时调用此方法

__toString() 在一个类被当作字符串处理时调用此方法

__wakeup() 当反序列化恢复成对象时调用此方法

__get() 当读取不可访问或不存在的属性的值会被调用

__destruct() 在销毁对象前调用此方法

我是怎么看出pop链的?多个类、多个对象、多个指向、toString()、invoke()、做题经验。(如有不足还望师傅们指出,感谢!声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】

推荐阅读
相关标签