반응형

문제에 접근하면 아래와 같이 소스 내 주석으로 base64 된 문자열을 볼 수 있다.

 

반복해서 요청하다보면 총 3가지를 출력해줌을 볼 수 있다.

1.  L2xvbF9ub19vbmVfd2lsbF9zZWVfd2hhdHNfaGVyZQ== → /lol_no_one_will_see_whats_here

2. Lz9zZWNyZXQ9ZmxhZw== → /?secret=flag

3. d2hhdF9hcmVfeW91X3NlYXJjaGluZ19mb3IK → what_are_you_searching_for

 

첫 번째 디코딩한 값으로 접근해보면 아래와 같은 base64된 값을 주는데 해당 값을 디코딩해보면 유투브로 넘어가는 링크를 준다.

aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2hcP3ZcPVBHakxoT2hNTFhjCg==

 → https://www.youtube.com/watch?v=PGjLhOhMLXc

 

웹 문제 중 가장 어려운 문제인데 이렇게 쉽게 될리가 ㅎㅎ

 

두 번째로 디코딩한 값이 그나마 입력을 받는 인자가 있어 느낌있었다.

해당 값으로 접근해보면 응답에 내가 입력한 flag가 출력된 것을 볼 수 있다.

혹시나 하여 SSTI 를 해보았는데 역시나였다.

 

그래서 그전에 공부해둔대로 File Class를 이용하여 파일을 읽어보려 했는데 ''.__class__.__mro__[2]가 존재하지 않았고, 확인해본 결과 ''.__class__.__mro__[1]이 object Class이며 해당 object에는 File class가 존재하지 않았다.

 

다른 방법이 뭐가 있을까 찾아보다가 아래와 같은 링크를 찾았다.

https://xz.aliyun.com/t/3679

 

바로 os._wrap_close Class를 이용하는 것이다.

해당 링크에 나와있는 대로 아래의 명령어를 통해 공격을 시도해보았다.

{{"".__class__.__bases__[0].__subclasses__()[127].__init__.__globals__['popen']('dir').read()}}

 

그 결과 dir 명령어를 통해 디렉토리 내 파일 리스트를 볼 수 있었고 flag.txt가 존재함을 볼 수 있다.

이후 cat 명령어를 통해 flag를 얻을 수 있었다.

 

 

참고 ) https://xz.aliyun.com/t/3679

반응형

'Hacking Contest' 카테고리의 다른 글

[2019 Encrypt CTF] vault  (0) 2019.04.03
[2019 Encrypt CTF] Sweeeeeet  (0) 2019.04.03
[Sunshine CTF 2019] Wrestler Name Generator  (0) 2019.03.31
[Sunshine CTF 2019] WrestlerBook  (0) 2019.03.31
2019 TAMUctf Write-Up  (0) 2019.02.26
블로그 이미지

rootable

,