ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [2019picoCTF] droids0
    System/CTF 2019. 10. 12. 22:28

    picoCTF - droids0

    이번에 진행된 picoCTF에서 안드로이드(.apk) 문제가 있어서 한번 풀어봤다.

    뉴비들 상대로 진행된 CTF이기 때문에 난이도는 쉬운 편에 속한다.

     

     

    droids0 실행모습

    우선 어플을 실행하면 입력박스/버튼/텍스트뷰 3가지로 구성된 화면을 볼 수 있다.

    우리가 입력한 값이 어플 내부에서 검증된 값이면 "I'm a flag!"위치에 Flag값이 출력되는 구조이다.

     

    droids0 - MainActivity

    JEB로 어플의 MainActivity를 보면, 주황박스에서는 버튼을 눌렀을 때의 처리를 하고 빨간박스에서는 hellojni.so를 로드하는 모습을 볼 수 있다.

     

    droids - FlagstaffHill.getFlag( )

    우선 버튼을 눌렀을 때의 동작을 살펴보자

    getFlag( )의 첫 번째 인자에는 우리가 텍스트박스에 입력한 값이, 두 번째 인자에는 어플의 Context값이 넘어간다.

    우리가 입력한 값(arg2)를 paprika( )의 인자값으로 다시 넘기고, 반환값을 Log.i( )를 이용하여 로그를 남긴다.

    paprika( )는 native code로서, MainActivity에서 로드된 hellojni.so 내부에 선언된 함수다.

     

    droids - paprika( )

    IDA로 paprika( )를 확인해보면 위와 같은 코드로 짜여져 있다.

    우선 paprika( )의 인자는 3개로 구성되어 있는데, 우리가 넘겨준 인자는 하나 뿐이다.

    App에서 넘어온 오른쪽으로 밀린다고 보면 된다. 따라서, 우리의 입력 값을 가진 변수는 'a3'변수다.

     

    근데 코드를 살펴보면 딱히 우리가 입력한 값을 검증하는 과정이 보이지 않는다.

    입력한 값을 활용하는 모습도 보이지 않고, 실제로 Flag값을 반환해주는 함수는 marjoram( )가 한다.

     

    logcat I

    따라서, adb로 log만 확인해주면 Flag값을 얻을 수 있다.

    logcat에 I(대문자 i)옵션을 주면 I(Information)수준의 로그만 확인할 수 있고, 어플에서 "PICO"라는 태그를 붙여서

    로깅을 하고 있기 때문에, grep으로 PICO 문자열만 출력해주면 된다.

    logcat을 돌려 놓고 어플에서 버튼만 클릭해주면 picoCTF{a.moose.once.bit.my.sister}값이 출력된다.

    'System > CTF' 카테고리의 다른 글

    [2019picoCTF] droids2  (1) 2019.10.12
    [2019picoCTF] droids1  (0) 2019.10.12
    [64bit] FSB Exploit Generator  (0) 2019.07.10
    Meepwn 2018 White snow, Black shadow Writeup  (3) 2019.03.02
    TUCTF2018 lisa Writeup  (1) 2019.01.14

    댓글

Designed by Tistory.