[WEB HACKING] SWF내 DEBUG Password Crack 하기(Cracking DEBUG password in SWF flash file / EnableDebugger2)

예전에 미리 작성해놓고.. 한참 바쁘다가 이제서야 올리게됬네요. 오늘은 플래시 파일. 즉 SWF안에 있는 enableDebugger에 대해 알아보고, Key를 크랙하는 법에 대해 볼까합니다.

왜 SWF 내 DEBUG Password를 Crack 할까?

이 보안 취약점은 아주 간단한 취약점입니다. 또한 영향력도 낮지요… 그러나 요즘 대세인 웹 게임이라면 이야기가 달라집니다. 웹 게임들은 플래시 기반으로 동작하는 게임이 많고 중요한 부분은 api로 처리하지만 swf 자체에도 많은 기능과 로직이 담겨있습니다. 이러한 swf를 디버깅하지 못하도록 막아주는것이 enableDebugger2 입니다. 이 옵션을 통해서 SWF에 디버깅을 제한할 수 있는 설정을 걸 수 있고 허용된 password를 가진 사용자만 SWF를 디버깅할 수 있습니다.

다만 이 부분이 개발하시는 분들이 귀찮거나, 인지되지 않아 설정을 안하거나 아주 간단한 내용으로 패스워드를 걸기 때문에 공격자에게 노출될 수 있습니다.

안걸려있다면 바로 디버깅하여 로직을 틀어버릴 수 있겠지만.. 오늘의 내용은 패스워드가 걸려있다. 아 정확히 말하면 쉬운 패스워드가 걸려있을 때 공격자는 어떠한 방법으로 Key를 얻어내어 디버깅할 준비를 할 수 있는지 이야기할까 합니다.

Decompiler를 이용하여 DEBUG 정보 획득하기

일단 우리가 필요한 enableDebugger2에 대한 정보는 SWF안에 들어있습니다. 이 정보를 찾아야 Crack 부터 Debugging까지 단계를 수행할 수 있겠지요. 무료이며 쓸만한 Flash Decompiler를 2개정도 사용하고 있습니다. 하나는 GUI, 다른 하나는 CUI이며 상황에 따라 골라쓰고 있지요. 바로 FFDEC와 FLASM입니다.

FFDEC를 이용한 Decompile https://www.hahwul.com/2015/03/31/swf-ffdec-jpex-free-flash-decompiler/

ffdec 설치 후 실행하셔서 swf 를 까보면 actionscript 코드와 함께 많은 데이터가 확인됩니다. 이 중 잘 찾아보시면 enableDebugger2 가 설정된 부분을 찾을 수 있고 값을 얻어낼 수 있습니다.

FLASM을 이용한 Decompile flasm - assembler and disassembler for Flash (SWF) bytecode


#> apt-get install flasm
#> flasm

Flasm 1.62 build Jun  2 2013

(c) 2001 Opaque Industries, (c) 2002-2007 Igor Kogan, (c) 2005 Wang Zhen
All rights reserved. See LICENSE.TXT for terms of use.

Usage: flasm [command] filename

Commands:
   -d     Disassemble SWF file to the console
   -a     Assemble Flasm project (FLM)
   -u     Update SWF file, replace Flasm macros
   -b     Assemble actions to __bytecode__ instruction or byte sequence
   -z     Compress SWF with zLib
   -x     Decompress SWF

Backups with $wf extension are created for altered SWF files.

To save disassembly or __bytecode__ to file, redirect it:
flasm -d foo.swf > foo.flm
flasm -b foo.txt > foo.as

Read flasm.html for more information.

ffdec로 찾는것이 편하긴하지만 커맨드라인에서 확인하기 쉽도록 flasm을 사용하겠습니다. -d 옵션을 주어 swf 파일을 디컴파일합니다. output 중 enableDebugger2가 설정되어있는지 확인합니다.


#> flasm -d test.swf | grep enableDebugger
  enableDebugger2 '$1$Qy$73m750ww5yD9X/Ri1maWD0

명령을 실행해보니 아래와 같이 hash화된 값이 나타납니다. 이 값을 파일로 만들어 jtr로 crack 하면 끝나겠네요.

John the Ripper를 이용한 DEBUG Password Crack

JTR(John the Ripper)는 패스워드 크랙으로 잘 알려진 툴 입니다. 개인적으로 좋아하는 툴이기도 하고 Crack 성공률도 괜찮은 편이라 자주 사용합니다. 일단 아까 ffdec나 flasm으로 얻어낸 hash 값을 복사해둡니다.

그리고 crack을 위해서 해당 값을 넣은 txt 파일을 하나 만들도록 하겠습니다.


#> echo "[keydata]" > crackKey.txt

or


#> vim crackKey.txt 
KEY

echo로 넣으셔도 되고 vim이나 nano로 편집해서 넣으셔도 됩니다. keydata에는 아까 찾은 키 값이 들어가게 됩니다. 혹시나 괄호까지 넣은분이 있을까 하여 cat으로 확인하고 가도록 하겠습니다.


#> cat crackKey.txt
$1$Qy$73m750ww5yD9X/Ri1maWD0

이제 jtr로 crack을 하면 됩니다. –show 옵션을 주어 output을 확인합니다.


#> john testPw.txt --show
?:

1 password hash cracked, 0 left

Password는 특수문자 “?:” 의 hash 값이였네요. :)