magicheap(unsorted_bin_attack)

题目链接: https://github.com/scwuaptx/HITCON-Training/tree/master/LAB/lab14 首先分析程序,存在任意长度堆溢出,我们的目的是覆盖 bss 段的 magic 变量,使其大于 0x1305, 很容易想到 unsorted bin attack, 该技术达到的效果就是写 unsorted_chunks (av) 到任意地址,而这个值是比较大的。 我会着重展示内存的变化: bk 是指向 chunk 的 pre_size 的地方的,而我们的 target address 对应的是 fake chunk 的 fd 的地方。 所以 bk = target_address-0x10 我们直接利用堆溢出,将 unsorted bin 链表中的第一个 chunk 的bk,从而malloc 堆块的时候就能达到 bk 写 unsorted bin 链表头部值的效果。 首先 malloc 三个 chunk,分别问 chunk 0, chunk1,chunk2: gef➤ heap chunks Chunk(addr=0xa1e010, size=0x30, flags=PREV_INUSE) [0x0000000000a1e010 61 61 61 61 0a 00 00 00 00 00 00 00 00 00 00 00 aaaa....

软件测试学习笔记

软件测试 由于项目需要进行测试,先来学习一下软件测试中的基本概念, 测试的内容很多,这里就简单介绍一下白盒测试/黑盒测试/灰盒测试. 动态测试 首先介绍一下动态测试 动态测试基本流程: 运行被测程序 检查运行结果与预期结果的差异 分析运行效率和健壮性等性能 动态测试由三部分组成: 测试实例的构造, 被测程序的执行,输出结果分析 从是否了解软件内部结构 (程序源代码) 的角度划分, 我们可以将动态测试分为白盒/黑盒/灰盒测试三类. 白盒测试 白盒测试按照程序内部逻辑结构和编码结构来设计测试数据并完成测试,是一种典型的动态测试方法。白盒测试又称为结构测试或逻辑驱动测试. 白盒测试的主要特点: 可以构造测试数据以测试特定程序部分 有一定的充分性度量手段 可以获得较多工具支持 通常只用于单元测试 白盒测试采用的测试方法: 逻辑覆盖 逻辑覆盖是以程序内部的逻辑结构为测试基础的一种白盒测试方法 主要分类: 语句覆盖 语句覆盖要求设计足够多的测试用例,使得被测程序的每一条语句至少被执行一次。 判定覆盖 判定覆盖要求设计足够多的测试用例,使得被测程序中的每一个 (判定) 分支至少通过一次。 条件覆盖 条件覆盖要求设计足够多的测试用例,使得程序中的每一个判定中的每个条件获得所有各种可能结果 判定覆盖只关心整个判定表达式的结果,条件覆盖关心的则是逻辑复合的判定表达式中每个条件各种取值的结果. 判定-条件覆盖 判定-条件覆盖要求设计足够多的测试用例,使得判定中每个条件的所有可能取值至少能够获取一次,同时每个判断的所有可能的判定结果至少执行一次。 条件组合覆盖 条件组合覆盖要求设计足够多的测试用例,使得每个判定中条件的各种组合至少出现一次。 路径覆盖 路径覆盖要求设计足够多的测试用例,使得程序中所有的路径都至少执行一次 路径测试 路径测试是根据程序的逻辑控制结构所产生的执行路径进行测试用例设计的方法 基本路径测试 基本路径测试是 McCabe 提出的一种白盒测试方法. 根据过程设计画出程序控制流图 (CFG); 计算程序控制流图的 McCabe 环路复杂度; 确定一个线性独立路径 (数量由环路复杂度确定) 的基本集合; 为上述每条独立路径设计可强制执行该路径的测试用例; 测试用例总体保证了语句覆盖和 (单条件判定情况下的) 条件覆盖 数据流测试 数据流测试也称“定义/引用”测试,其目的是发现定义/引用的异常缺陷。 数据流测试重点关注变量的定义与使用. 信息流分析 信息流测试通过分析输入数据、输出数据和语句之间的关系来检查程序错误...

vue 组件的生命周期及钩子函数

vue 组件的生命周期相关 关于 vue 组件的生命周期,写简单的项目不需要太多的了解,甚至只需要知道 mounted 这一钩子函数就可以了,但如果项目的逻辑较复杂,就需要对整个组件的生命周期有一些认识 下面就让我们来看看吧。 先看一下官方给出的生命周期图 图中表明了生命周期的各个阶段和相关的钩子函数。 beforeCreate created beforeMount mounted beforeUpdate updated beforeDestroy destroyed 可以用以下代码做测试,并在控制台查看输出,对于生命周期有个直观的认识。 var app = new Vue({ el: '#app', data: { message : "xuxiao is boy" }, beforeCreate: function () { console.group('beforeCreate 创建前状态'); console.log("%c%s", "color:red" , "el : " + this.$el); //undefined console.log("%c%s", "color:red","data : " + this.$data); //undefined console.log("%c%s", "color:red","message: " + this.message) }, created: function () { console....