Android
使用JEB分析flagstore.apk
MainActivity
注册了广播接收器,用于处理action为"com.flagstore.ctf.INCOMING_INTENT"的广播,但是这个广播设置了权限,接着到manifest清单文件里查看这个权限,可见是Signature权限,普通应用无权发送该广播(但是root权限可以)。
然后跟到Send_to_Activity这个BroadcastReceiver里,虽然清单文件注册了这个activity(未导出),但是使用root权限发送:
am start -n com.flagstore.ctf.flagstore/.Send_to_Activity
应用会崩溃。
看看这个类里的代码,典型的广播接收器,msg extra数据为OpenSesame时会打开CTFReceiver
跟到CTFReceiver的代码
定义了一个Button,点击之后会发送一个action为"com.flagstore.ctf.OUTGOING_INTENT"的广播,并且携带的extra数据使用getPhase()从Native层获取数据。
既然extra附带数据,那么就可以在应用里注册一个广播接收器用于接收数据。
现在我们开始构造攻击链。
1.安装并打开应用
2.在root的Nexus 6P上发送指定广播(使用su获取root权限):
am broadcast -a "com.flagstore.ctf.INCOMING_INTENT" --es msg "OpenSesame"
此时将会进入CTFReceiver的界面
3.然后在Android Studio里编写代码
1 | public class MainActivity extends AppCompatActivity { |
安装该应用
4.然后到flagstore.apk里点击Button
此时日志将会打印出flag,第一次打印出来的有部分乱码,多点几次Button即可