Cfi那些事
控制流完整性
针对于漏洞利用,最终的效果和目的就是劫持控制流,控制目标程序做一些他本来做不了的事情。可以达到这一目的的方式有很多,比如ROP、劫持函数指针等等。而这些都来自于软件中一些漏洞,如缓冲区溢出、释放后利用等等。最初防御的方式就是头疼医头,脚疼医脚,哪里出现了漏洞比如缓冲区溢出,我们就检查一下内存边界,或者在边界处设置一个cookie(canary)。
或许是漏洞多的补不过来,之前的防御方式不能很好的完成防御计算机被破坏的工作,原本的防御方式经过几轮较量后衍生出了很多绕过方式,这些攻击手法就是现代漏洞利用技术的核心,比如ROP。如果攻击者通过层层阻挠,到达了执行ROP这一步,那么后续的路基本就畅通无阻了,因为之前并没有防御ROP的有效方式。
CFI即Control Flo...
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 ...
Windows 堆分析
windows 堆分析
windows和linux堆管理机制虽然呈现给用户的效果是一样的,大体思路也是差不太多,但是底层实现逻辑大相径庭,很多地方和glibc的ptmalloc差别很大。网上资料零零散散,而且都是通过逆向手段分析,所以每个版本资料还多少有些差异,在这里对windows堆管理机制做个归纳,学习一下。
接口
在glibc中,通常我们调用的分配函数就是malloc、calloc、realloc,但是这三个函数本质都差不多,本体还是malloc函数的逻辑。
在windows中,堆的分配函数就比较多了这里我们逐一介绍一下。
函数原型
参数
说明
HeapAlloc(HAND...
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语言...
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头:主要为了向后兼容,...
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>
进制转换问题
反序数
输入一个...
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...
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...
57 post articles, 8 pages.