安卓WebView漏洞绕过URL检测姿势

Android WebView RCE漏洞原理

要造成任意代码执行漏洞,至少具备几个条件

  1. 开启JavaScript开关 setJavaScriptEnabled(true)
  2. 调用 addJavascriptInterface()
  3. loadUrl数据源头能进行控制
  4. 其他

以下是漏洞代码:

public class MainActivity extends AppCompatActivity {
    class JsObject {
        @JavascriptInterface
        public String getToken() { return "{\"token\":\"1234567890abcdefg\"}"; }
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        WebView webView = (WebView) findViewById(R.id.myWebview);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new WebViewClient());
        webView.setWebChromeClient(new WebChromeClient());
        webView.addJavascriptInterface(new JsObject(),"VulObj");
        webView.loadUrl("https://www.tasfa.cn/poc.htm");
    }
}

漏洞利用的点:

  • 需要能控制loadUrl中的数据
  • 需要有暴露的JS接口
  • 需要暴露的JS接口有@JavascriptInterface注解的函数

需要以上三点 才可进行漏洞利用.

在漏洞防御时,常有对Url进行域名检测,以下是绕过姿势总结

indexOf
inputUrl.indexOf(whiteDomain)>0

绕过

http://www.tasfa.cn/poc.htm?whiteDomain.com
取域名后进行校验
  1. 利用substring
  2. java.net.URL getHost()
  3. java.net.URI getHost()

绕过1
URL格式为:
<protocol>://<user>:<password>@<host>:<port>/<url-path>
错误的认为://后面即是域名,从而可绕过:
http://whiteDomain.com@www.tasfa.cn/poc.htm

绕过2
如果使用indexOf,依旧可以通过子域名的形式绕过:
http://www.whiteDomain.com.tasfa.cn/poc.htm

以下URL getHost 为: whiteDomain.com
https://www.tasfa.cn\@www.whiteDomain.com/poc.htm

类似的还有
https://www.tasfa.cn\\.whiteDomain.com

绕过3
JavaScript://www.whiteDomain.com/%0d%0awindow.location.href='http://www.tasfa.cn/poc.htm'
第一行通过//符号来骗过java.net.URI获取到值为www.whiteDomain.com的host,恰好//符号在Javascript的世界里是行注释符号,所以第一行实际并没有执行;然后通过%0d%0a换行,继续执行window.location.href=‘http://www.tasfa.cn/poc.htm’ 请求我们的poc页面。

endsWith

inputDomain.endsWith(WhiteDomain)

注册域名 xxxxxxwhiteDomain 即可绕过
www.tasfaWhiteDomain.com

利用URL重定向绕过

https://www.WhiteDomain.com/redirect.php?url=https://www.tasfa.cn/poc.htm

参考

一文彻底搞懂安卓WebView白名单校验

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值