美文网首页
Janus-CVE-2017 复现

Janus-CVE-2017 复现

作者: ESE_ | 来源:发表于2018-12-27 11:14 被阅读0次

0x1 背景

Android系统要求每一个Android应用程序必须要经过数字签名才能够安装到系统中,也就是说如果一个Android应用程序没有经过数字签名,是没有办法安装到系统中的。Android通过数字签名来标识应用程序的作者和在应用程序之间建立信任关系,不是用来决定最终用户可以安装哪些应用程序。这个数字签名由应用程序的作者完成,并不需要权威的数字证书签名机构认证,它只是用来让应用程序包自我认证的。然而Google在本月4日发布的Android安全公告中编号为CVE-2017-13156,这个漏洞被称为Janus漏洞,利用该漏洞可修改app而不影响原始签名。

0x2 利用点

Janus 漏洞(CVE-2017-13156)允许攻击者修改应用程序中的代码,而不会影响其签名。理论上,Android运行时加载APK文件,提取其DEX文件,然后运行其代码。实际上,虚拟机可以加载和执行APK文件和DEX文件。当它获得一个APK文件时,它仍然会查看标题中的魔术字节来决定它是哪种类型的文件。如果找到DEX标头,则将文件加载为DEX文件。否则,它将文件加载为包含带有DEX文件的zip条目的APK文件。因此它可能会误解双重DEX / APK文件。

攻击者可以利用这种二元性。他可以将恶意DEX文件添加到APK文件中,而不会影响其签名。然后,Android运行时接受APK文件作为合法早期版本的应用程序的有效更新。但是,Dalvik VM从注入的DEX文件加载代码。

要求

1、Janus漏洞影响运行Android 5.0+的设备
2、多用几个手机测试
3、下载工具
4、Python 2.7

0x3 编写主程序

主要apk代码


image.png
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button = (Button) findViewById(R.id.button);
        button.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Toast.makeText(getApplicationContext(),"I am hooray",Toast.LENGTH_LONG).show();
    }
}

生成apk,只使用V1签名,不使用V2签名,如下:


image.png

运行结果如图:


image.png

使用GetApkInfo.jar查看签名信息java -jar GetApkInfo.jar Janus.apk

image.png

发现没有经过V2签名

0x4 利用poc

将编译好的apk解压得到dex文件,baksmali.jar
反编译dex文件得到smali代码
java -jar baksmali.jar d classes.dex
会生成一个out目录,找到需要修改的地方,比如将hooray改成另外一个字符串,修改如下:

image.png

重打包dex,如下
java -jar smali.jar assemble out
生成out.dex,将dex放入原Janus.apk里,janus.py下载
python janus.py out.dex Janus.apk op.apk
运行op.apk(需要在5.0以上运行,我在8.0的手机上无法安装op.apk)

image.png

成功。

0x5 尝试

如果我们将其他的dex利用poc打包进poc会怎么样。我们找一个新的t1.dex

image.png
尝试打包进入apk
python janus.py t1.dex Janus.apk op1.apk
安装运行op1.apk。发现程序闪退
分析--->可能是程序的包名不一致,导致程序找到不入口点。我们尝试写一个包名一致的apk,然后提取dex,打包进去。

如下是有一个新的apk,只有一句话


image.png

提取出dex,改名为t2.dex。
尝试打包进入apk
python janus.py t2.dex Janus.apk op2.apk
安装运行op2.apk。发现程序还是闪退。思考中....希望大佬知道的私信我,谢谢...

0x6 问题

1、生成的apk不能再手机上运行,--->android studio上直接run,需要安装一下东西
2、nexus5 版本6.0上面成功不了,系统自己修复了(比较是谷歌亲儿子)
3、很多网上baksmali.jar不能运行,这里我自己找这个可以运行。

相关文章

  • Janus-CVE-2017 复现

    0x1 背景 Android系统要求每一个Android应用程序必须要经过数字签名才能够安装到系统中,也就是说如果...

  • NetLogon 域内提权漏洞(CVE-2020-1472)

    NetLogon 域内提权漏洞(CVE-2020-1472)复现 摘要 影响版本 复现环境 漏洞脚本 复现开始 首...

  • ThinkPHP——ThinkPHP 5.x远程代码执行

    0x00目录 漏洞简介 影响版本 复现前提 复现环境 复现过程 总结 参考链接 0x01漏洞简介 ThinkPHP...

  • 复现

    我感谢生命中所有美好 但是,经历过幼时的格格不入 尝试过很多种调解无效 高中时期失败的班干体验 和糟糕的班级氛围 ...

  • 复现

    年底的事件反复出现 魔咒般到时间就到来 是什么创造反复事件 请你走开魔咒般事件 请你离开我的生活间 我们不欢迎你的出现

  • Android 8.0频现GC crash

    问题现象 复现步骤手机(Android 8.0, build id为opr6.170623.013)复现场景一: ...

  • 记 libAccessibility 通知 Crash 排查

    Crash 信息 libAccessibility 在发送通知时产生了 Crash。 复现场景 在某些路径可以复现...

  • [javascript]关于firstChild和lastChi

    复现:## debug:## so:问题主要是出自 之后和 之前的“回车”和“空格”字符,复现里面打印出的#tex...

  • 复现Cell图表:双侧柱状图展示上下调GO富集结果

    复现《cell》图表往期内容: 1、复现《Cell》图表:柱状图|添加分组注释|legend设置[http://m...

  • 通过浏览器来定位问题相关知识

    线上页面出问题了,某一版块没数据了,某一个页面打不开了,研发同学要定位问题,肯定要先复现,复现了之后呢,就是在复现...

网友评论

      本文标题:Janus-CVE-2017 复现

      本文链接:https://www.haomeiwen.com/subject/zoyhlqtx.html