Self-Improvement

[DIVA] 13. Input Validation Issues - Part 3 (strcpy() - Bof) 본문

AOS/DIVA

[DIVA] 13. Input Validation Issues - Part 3 (strcpy() - Bof)

JoGeun 2021. 12. 21. 22:12

Launch Code를 입력하라고 되어있다.

 

InputValidation3Activity 클래스를 확인해보면 DivaJni 클래스로 djni 객체를 생성한 후 initiateLaunchSequence() 메소드를 수행하여 return 값이 0이 아니면 "Launching in T - 10 ..." 메시지가 출력된다.

 

DivaJni 클래스를 확인해보면 divajni 라이브러리를 로드하고 있고 initiateLaunchSequence() 메소드는 네이티브로 작성되어 있는 것을 확인할 수 있다.

 

divajni 라이브러리의 initiateLaunchSequence() 함수를 보면 궁극적으로 return 하는 곳에서 strncmp() API로 ".dotdot" 문자열과 비교를 하고 있다.

중요한 것은 입력한 값을 가져올 때 strcpy() API를 사용한다는 것이며 해당 API는 Bof가 발생하는 취약한 함수가 되겠다.

strcpy()에서 사용되는 v3에 0x18보다 큰 값을 입력할 시 Bof가 발생하게 된다.

 

실제로 임의의 값을 많이 입력한 후 버튼을 누를 시 Bof가 발생하여 해당 액티비티가 종료하게 된다.