본문 바로가기

Penetration/Mobile

[Oh Bank] 앱 취약점 학습 앱 - 앱 분석 및 작동확인

앱이 본격적으로 접속되었다면 해당 서버에 본격적으로 침투하기 위해서 준비가 필요합니다.

처음에는 시나리오를 어느정도 작성해서 생각해보려고 합니다.

 

파일 다운로드 취약점을 통해서 경로를 파악하고 파일 업로드 취약점을 통해서 웹쉘과 같은 도구를 삽입합니다. 해당 앱의 경우 게시판이 존재하고, 게시판을 이용해서 파일 업로드 하는것이 가능합니다. 

 

따라서 해당 취약점을 이용해서 공격을 시도해보려고 합니다.

이제 앱을 켜서 QnA게시판에 들어가줍니다.

게시판에는 예전에 작성한 글 하나가 남아있습니다.

이제 다른 글을 작성해서 취약점을 확인햅려고 합니다. 일단 앱이 서버와 통신하기 위한 부분을 프록시를 이용해서 잡아주려고 합니다.

ipconfig 명령을 통해서 아이피 주소를 찾아줍니다.

해당 ip주소를 찾고 휴대폰에서 같은 wi-fi 에 연결해준 다음 프록시를 설정합니다.

이렇게 연결을 설정해 주고 다른 웹 브라우저에서 연결이 되는지 확인합니다.

잘 연결되는 것을 확인할 수 있습니다. 이제 앱에서도 작동하는지 확인해 봅니다.

앱에서도 잘 작동하는 것을 알 수 있습니다. 밑에 json 필드의 값은 이름에서 보듯이 enc(암호화) 암호화 되있는 것을 알 수 있습니다.

 

갑자기 앱에서 frida를 탐지하기 시작했기 때문에 이를 우회하는 로직을 다시 작성해야 합니다. (앱이 껐다 켜지고 나서 프리다 서버를 다시 켰을 때 포트가 27042가 되었습니다)

해당 부분을 참조하였을 때 fridaCheck는 native로 선언되어 있는 것을 확인할 수 있습니다. 따라서 lib 파일에서 이에 대한 내용을 찾아서 우회해야 합니다.

 

이제 lib 파일을 찾아서 ghidra에 넣습니다. lib 파일을 찾는 법은 일단 디컴파일 해서 찾을 수 있거나 혹은 .zip을 붙여서 찾을 수 도 있습니다. 저의 경우 ApkEasy Tool을 이용하여 디컴파일 해서 찾았습니다.

 

라이브러리 파일을 디컴파일해서 알아낸 단서는 아래와 같습니다.

0xa269 였습니다.  해당 숫자는 10진수로 41,577에 해당하는 값이므로 프리다 포트에 사용되는 값이 아닙니다.

일반적으로 프리다 포트에 사용하는 값은 27042입니다.

해당 lib 파일에서 디컴파일해서 알아낸 숫자는 리틀 엔디언 방식으로 hex로 저장되기 때문에 리틀 엔디언 방식으로 읽어줘야 합니다.

69 a2 와 같이 읽어줍니다.

읽어 주면 이와 같은 값을 알아낼 수 있으며 실제 프리다가 어떤 포트를 쓰는지 확인할 수 있습니다.

안드로이드 기기에 대해서 adb shell을 통해서 확인해보면 확인이 가능합니다.

adb shell
su
netstat -ntlp | grep 27042

실제로 해당 포트를 사용하고 있었으므로 프리다포트를 감지해서 정지시키는 것을 확인할 수 있습니다. 이를 우회하기 위해서 첫번쨰로 생각해볼 수 있는 방안은 포트 포워딩 입니다.

 

처음으로 로컬PC에서 포트포워딩을 해줍니다.

일단 프리다를 중지시키고 다른 포트를 이용해서 frida-server를 작동시킵니다.

이와 같이 작성하고 다시 명령어를 이용한 후 frida-ps -Ua 를 입력해서 어떤 포트로 작동하는지 확인해봅니다.

이제 정확히 13000포트로 작동하는 것을 확인하였습니다. 이를 기반으로 앱을 실행시켜 봅니다.

 

이제 앱을 실행했을 때 정상 작동되는 것을 확인할 수 있습니다.

다음 장부터는 암호화, 복호화 해당 기술을 이용한 경로 파악 등을 해볼 예정입니다.

이상입니다.