Home

Cfi那些事

控制流完整性 针对于漏洞利用,最终的效果和目的就是劫持控制流,控制目标程序做一些他本来做不了的事情。可以达到这一目的的方式有很多,比如ROP、劫持函数指针等等。而这些都来自于软件中一些漏洞,如缓冲区溢出、释放后利用等等。最初防御的方式就是头疼医头,脚疼医脚,哪里出现了漏洞比如缓冲区溢出,我们就检查一下内存边界,或者在边界处设置一个cookie(canary)。 或许是漏洞多的补不过来,之前的防御方式不能很好的完成防御计算机被破坏的工作,原本的防御方式经过几轮较量后衍生出了很多绕过方式,这些攻击手法就是现代漏洞利用技术的核心,比如ROP。如果攻击者通过层层阻挠,到达了执行ROP这一步,那么后续的路基本就畅通无阻了,因为之前并没有防御ROP的有效方式。 CFI即Control Flo...

Read more

Windows pwn 栈题入门

Windows pwn 栈题入门 HITB GSEC babyshellcode 刚刚迈入windows大门,所以参考了下之前windows栈题目的wp自己动手调试一下。 远古栈溢出题目,先看看保护: λ winchecksec babyshellcode.exe Results for: babyshellcode.exe Dynamic Base : "Present" ASLR : "Present" High Entropy VA : "NotPresent" Force Integrity : "NotPresent" Isolation : "Present" NX : "Present" SEH ...

Read more

Windows 堆分析

windows 堆分析 windows和linux堆管理机制虽然呈现给用户的效果是一样的,大体思路也是差不太多,但是底层实现逻辑大相径庭,很多地方和glibc的ptmalloc差别很大。网上资料零零散散,而且都是通过逆向手段分析,所以每个版本资料还多少有些差异,在这里对windows堆管理机制做个归纳,学习一下。 接口 在glibc中,通常我们调用的分配函数就是malloc、calloc、realloc,但是这三个函数本质都差不多,本体还是malloc函数的逻辑。 在windows中,堆的分配函数就比较多了这里我们逐一介绍一下。 函数原型 参数 说明 HeapAlloc(HAND...

Read more

Windows seh分析

windows SEH分析 与linux不同,windows的函数调用栈中存储了不止栈底指针(saved ebp)以及返回地址、局部变量、canary这几样,windows在栈中存放了许多的私货,这其中就包括了seh。 SEH 什么是SEH?全称就是Structure Exception Handler,也就是结构化异常处理。 那么这个SEH,是干什么的呢? SEH是Windows操作系统上 对 C/C++ 程序语言做的语法拓展,用于处理异常事件的程序控制结构。异常事件是指打断程序正常执行流程的不在期望之中的硬件、软件事件。硬件异常是CPU抛出的如 除0、数值溢出等;软件异常是操作系统与程序通过 RaiseException语句抛出的异常。Windows拓展了C语言...

Read more

Windows 笔记

windows 笔记 pe 由coff发展而来,32位称之为pe32,64位称之为pe+或者pe32+。 pe文件与elf文件差不多,也分为几类具体来说如下表: 种类 扩展名 可执行 exe,scr 库 dll,ocx,cpl,drv 驱动 sys,vxd 对象 obj pe文件格式如下图: 头部信息相对于elf文件内容更多一些,从cos头到节区头都是头部信息,映射关系与elf大同小异。 1.dos头:主要为了向后兼容,...

Read more

Leetcode模版

#模版 ##头文件<bits/stdc++.h>不好使怎么办 #include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> #include <time.h> #include <algorithm> #include <iostream> #include <queue> #include <stack> #include <vector> #include <string> 进制转换问题 反序数 输入一个...

Read more

Leetcode record

leetcode刷题记录 第一题 题目 两数之和 难度 简单 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 解答 class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { vector<int...

Read more

Lab2

lab2 特权级管理 linux和μcore只使用0和3 段选择子 DPL 段描述符 中描述特权 门 RPL段寄存器 DS ES FS GS(寄存器最低两位) CPL 段寄存器 CS SS (寄存器最低两位) 操作系统对于特权的合法性检查 访问门时:CPL<=DPL[门]&CPL>=DPL[段](低优先级可以访问高优先级的代码) 访问段时:MAX(CPL,RPL)<=DPL[段](发出请求的一方优先级高于目标) 特权级切换 通过中断实现特权级转换 TSS(任务状态段)存储信息 TSS 全称task state segment,是指在操作系统进程管理的过程中,任务(进程)切换时的任务现场信息。 分配tss内存->初始化tss...

Read more