DIVA系列教程 part 7 – 输入验证问题3

13. INPUT VALIDATION ISSUES – PART 3

  • 目标:这是一个导弹发射程序,我们应当传播爱与和平而不是战争0.0。让此程序失效,你的任务不是找到代码发射导弹,而是让应用崩溃(并找到崩溃原因)。
  • 提示:不正确或不存在的输入验证会导致应用漏洞。外部的输入必须得进行验证。这是一个经典的缓冲区溢出漏洞。如果你可以实现代码执行,那就太nb了。

既然提示是缓冲区溢出类漏洞,那主要工作就是要确定缓冲区的长度。

查看反编译代码 InputValidation3Activity.class 发现验证需要 djni.initiateLaunchSequence() 来确定

分析代码,仍然需要 System.loadLibrary(“divajni”); 中jni接口调用的 divajni.c程序

查看 divajni.c 源码,找到 initiateLaunchSequence()的定义

分析代码,问题代码出现在 strcpy(code, pcode);

没有对pcode输入字符长度进行判断直接就赋值给code,而code[]的长度之前有定义

所以,当pcode输入字符长度大于20时,就会出现缓冲区溢出

测试时发现,当输入字符 大于32 时,才可以引发程序崩溃。可以使用 adb logcat查看崩溃时堆栈数据

当输入 32个‘A’时

当输入 40个 ‘A’ 时

您可能还喜欢...