파일 내에는 swf 플래시 파일이 포함되어있는데 속성을 보면 플래시 파일에게 다른 링크를 전달하고 있다.
이 사이트로부터 암호화된 파일을 다운받고 키를 전달받아 복호화 시킨 뒤 실행한다.
취약점을 간단히 설명하면 flash는 ActionScript를 사용하는데 2.0에서 3.0으로 바뀌면서 속도를 향상시키기 위해 avm2.intrinsics.memory기능을 제공하게 된다.
이는 byte array에서 데이터를 빠르게 읽고 저장하기 위해 Domain Memory를 지정하고 OpCode로 읽기/쓰기 작업을 하는 방법이다.
이 스크립트를 까보면 보면 jump 명령어로 0024로 이동해서 li8 명령어를 실행한다.
123456 위치에 있는 값을 읽으려고 하고 있는데.. li8은 메모리를 1024 크기만큼만 할당하고 읽기 때문에 1024 범위 내에서만 값을 읽어야만 한다. 물론 이 라이브러리에는 1024 내에서 데이터를 읽는지 체크하고 1024보다 큰 주소 값을 읽으려고 하면 에러를 발생시키는 코드가 들어가 있다. 에러가 발생될 수 있는 코드이므로 li8은 try, catch 코드로 감싸줘야 하는데 감싸지 않은 경우 Buffer Overflow가 발생하게 된다.
li8(123456) 코드가 try 문 안에 없었으므로 catch 구문으로 가지 못하고 buffer overflow가 발생하게 된다. 아래 그림은 Buffer Overflow가 발생해서 메모리 주소가 변경된 것을 보여주는 사진이다.