-
[Clear] X-MAS CTF 2020 PHP Master WriteupCTF/X-MAS CTF 2020 2020. 12. 21. 00:17
Web 카테고리 첫 번째 문제였다.
주어진 사이트에 접속해보면 php 코드가 주어진다.
if(strpos($p1, 'e') === false && strpos($p2, 'e') === false && strlen($p1) === strlen($p2) && $p1 !== $p2 && $p1[0] != '0' && $p1 == $p2) { die($flag); }
핵심 코드를 분석해보자.
flag를 획득하기 위해서는 아래 조건을 동시에 만족하는 값을 입력해야 한다.
1. param1에는 e가 포함되면 안된다.
2. param2에는 e가 포함되면 안된다.
3. param1과 param2의 길이는 같아야 한다.
4. param1과 param2는 데이터 타입이 다르거나 값이 달라야 한다. (!==)
5. param1는 0으로 시작해서는 안된다.
6. param1과 param2는 같아야 한다. (==)
가장 흥미로운 부분은 4조건과 6조건이다. 4조건과 6조건을 동시에 만족하려면 값은 같되 데이터 타입은 달라야 한다.
따라서 Type Juggling 관련 문제일 것이라고 추측했다. Type Juggling은 자동 자료형 변환을 의미하는데,
PHP의 자료형(Data Type)과 자동형변환(Type Juggling) 알아보기
This tutorial is good! PHP Basics like Introduction, Installation Guide, Data Types, Variables, and Operators. It also introduces Control structures, Functions, Strings, Regular expression, Error H…
blog.lael.be
해당 포스팅을 보면 어느정도 이해가 갈 것이라고 생각한다.
나에게 가장 익숙한 Type Juggling은 0 은 False로 변환되고, 0이외의 값은 True로 변환된다는 것이었기 때문에 3조건을 만족시키기 위해 아래와 같은 payload를 작성하였다.
http://challs.xmas.htsp.ro:3000/?param1=true¶m2=0001
정답일줄 알았는데, 아니나 다를까 True와 False에는 모두 'e'가 포함되어 있음을 놓쳤다. ㅡ,.ㅡ
다른 방법을 고민하다가 int와 float 또한 다른 자료형임을 이용하기로 하였고
http://challs.xmas.htsp.ro:3000/?param1=1.0¶m2=001
라는 payload로 플래그를 획득하였다.
FLAG = X-MAS{s0_php_m4ny_skillz-69acb43810ed4c42}
반응형'CTF > X-MAS CTF 2020' 카테고리의 다른 글
[Clear] X-MAS CTF 2020 Comfort Bot Writeup (0) 2020.12.23 [Clear] X-MAS CTF 2020 flag_checker Writeup (0) 2020.12.22 [Clear] X-MAS CTF 2020 Santa's consolation Writeup (0) 2020.12.21 [Clear] X-MAS CTF 2020 FORMULA TRANSLATION NOVICE Writeup (0) 2020.12.20 [Clear] X-MAS CTF 2020 Scrambled Carol Writeup (2) 2020.12.20