문제풀이

목표: 이것은 미사일 발사 앱입니다. 전쟁이 아닌 사랑을 퍼뜨려라!

DOS 망할 것! 여기서 당신의 목표는 코드를 찾은 다음 미사일을 발사하는 것이 아니라 앱을 충돌시키는 것입니다(그리고 충돌의 근본 원인을 찾는 것입니다).

힌트: 입력을 사용하기 전에 필터링하거나 유효성을 검사하지 않으면 입력 유효성 검사 문제가 부적절하거나 전혀 발생하지 않습니다. 외부에서 입력을 받는 구성 요소를 개발할 때는 항상 유효성을 검사하십시오. 이것은 고전적인 메모리 손상 취약점입니다.

코드 실행을 얻을 수 있다면, 당신의 의견을 듣고 싶습니다.

나는 아무도 그렇게 멀리 갈 것이라고 기대하지 않습니다.

 


 

이와 같이 임의의 문자열과 so 파일에서 확인한 문자열을 삽입해보면, 상반된 결과 값이 출력되는 것을 확인할 수 있다.

 

InputValidation3Activity .java

jni를 통해 java가 아닌 다른 언어로 제작된 코드를 실행한다.

해당 코드는 다른 언어로 제작된 so 파일의 initiateLaunchSequence 함수 리턴값이 0이 아니면, 인증 성공 문구를 출력하는 코드이다.

 

문제의 힌트에서 메모리 손상 취약점이라는 언급으로 나는 오버플로우가 발생되도록 입력 칸에 a를 하나씩 증가시키면서 테스트를 하였다.

a의 길이가 40이 되었을 때, 오버플로우가 일어나 앱이 종료되는 현상을 볼 수 있었다.

 

해당 취약점은 jni를 통해 다른 언어로 제작된 코드에서 나타나는 취약점을 이용하여 공격 할 수 있다는 점을 알려주는 문제로 판단된다.

 

복사했습니다!