H3X0R CTF geek test write up
늦은 감이 굉장히 많이 드는데 지난주에 있었던 H3X0R CTF 의 Write up을 공개해볼까 한다.
해당 문제의 소스
일단 문제 컨셉 자체는 websec.fr 에서 문제를 풀다가 나온 것이고, 원평이형하고 이러쿵저러쿵 얘기를 하다가 나온 문제이다. PHP Jail류의 문제이기 때문에 취약점 자체는 바로 보인다.
Challenge Anaylse
받은 $code 를 eval() 함수로 eval 시키는 곳에서부터 취약점이 발생한다. 그럼 여기서 함수를 써서 취약점을 공략하면 된다.
근데 여기서 문제가 존재한다. get_defined_functions() 함수를 통해서 이미 선언되어 있는 모든 함수들을 필터링하게 된다. 우리는 이러한 필터링을 우회해야 한다.
Useful PHP trick 1
PHP에서는 함수를 이상하게 처리한다. 이런걸 정확히 어떤 용어로 부르는지는 잘 모르겠지만, 어째뜬 이러한 형식이 된다.
Useful PHP trick 2
Exploit
우리는 배열에 접근할 수 있고, 문자열을 이용해서 함수를 실행시킬 수 있다. 그럼 우리가 할 수 있는 것들을 찾아보도록 하자.
$variables 라는 변수에 _GET 전역변수가 들어가는 것을 확인하였다. 그럼 우리는 배열에 접근하는 방식을 알기 때문에 $_GET 안의 요소들에도 접근할 수 있는 방법을 갖게 된다.
http://dimitrust.oa.to:8080/php_shell/?code=print($variables{0});
그럼 우리는 _GET에 있는 우리가 보낸 값들에 접근할 수 있는 방법이 생겼고 이는 String 형이니 String -> function 트릭을 이용해서 함수를 실행시킬 수 있다.
http://dimitrust.oa.to:8080/php_shell/?code=${$variables{0}}{0}();&0=phpinfo
phpinfo() 함수를 실행시킨 모습이다.
그런데 길이 제한 때문에 함수를 실행시키는 것은 조금 힘들어 보인다. 그런데 우리는 에러코드를 제공받았다.
그래서 이런식으로 변수 안에 있는 값들을 에러코드를 통해서 볼 수 있게 된다. ~_~ 그렇게 플래그도 획득할 수 있다.
http://dimitrust.oa.to:8080/php_shell/?code=${${$variables{0}}{0}}();&0=flag
[*] flag : H3X0R{yes u r a geek}
여담
'write-ups > CTF' 카테고리의 다른 글
전국청소년모의해킹대회 (DIMICTF) write up (0) | 2018.06.19 |
---|---|
전국청소년모의해킹대회(디미CTF) 3위! (0) | 2018.06.18 |
DEFCON CTF 2018 Easy Pisy write up (0) | 2018.05.16 |
DEFCON CTF 2018 exzendtential-crisis (0) | 2018.05.16 |
WPICTF 2018 Write up (0) | 2018.04.18 |