[PWN][基础篇]什么是Canary保护

简介: [PWN][基础篇]什么是Canary保护

什么是Canary

gdb指令复习

image.png

有无Canary呢就是在函数压栈的时候,函数刚开始执行的时候,它会多一个参数,也就是在ebp的上面,会压入一个Canary的值,在子函数验证完之后,对比Canary的值,看看是否相等。不相等,代表程序被修改,产生了异常。


本次实验教学代码如下:

实验目的,对比有无Canary保护的程序有何不同

image.png

gcc -m32 -no-pie -fno-stack-protector -o canary canary.c 

-m32 32位程序

-no-pie 中间没有空格

-fno-stack-protector 关闭canary保护

-o 输出


生成之后图片有锁,输入指令chmod 777 canary 进行提权


下一步我们使用gdb开始调试

1.png

补充的知识:

什么是堆栈内存对齐

and esp 0xfffffff0

主流编译器的编译规则规定“程序访问的地址必须向16字节对齐(被16整除)”内存对齐之后可以提高访问效率。

加入保护的gcc指令:

gcc -m32 -no-pie -fstack-protector-all -o canary canary.c

加入保护后如下图:

1.png

gdb指令复习

s step,si步入
n 执行下一条指令 ni步入
b 在某处下断点,可以用
b * adrress
b function_name
info b 查看断点信息
delete 删除所有断点
c 继续
r 执行
finish 执行完当前函数返回到调用它的函数。运行程序,直到当前函数运行完毕返回再停止。例如进入的单步执行如果已经进入了某函数,而想退出该函数返回到它的调用函数中,可使用命令finish.  
(gdb) until 或(gdb) u  指定程序直到退出当前循环体这里,发现需要把光标停止在循环的头部,然后输入u这样就自动执行全部的循环了。
(gdb) jump 5 跳转执行程序到第5行:这里,可以简写为"j 5"需要注意的是,跳转到第5行执行完毕之后,如果后面没有断点则继续执行,而并不是停在那里了。
另外,跳转不会改变当前的堆栈内容,所以跳到别的函数中就会有奇怪的现象,因此最好跳转在一个函数内部进行,跳转的参数也可以是程序代码行的地址,函数名等等类似list。
(gdb) return 强制返回当前函数: 这样,将会忽略当前函数还没有执行完毕的语句,强制返回。return后面可以接一个表达式,表达式的返回值就是函数的返回值。
disas addr 查看addr处前后的反汇编代码
disas functions 参看fucntion函数的反汇编代码
p 系列
p system/main 显示某个函数地址
p $esp 显示寄存器
p/x p/a p/b p/s。。。
p 0xff - 0xea 计算器
print &VarName 查看变量地址
p * 0xffffebac 查看某个地址处的值
x系列
命令格式:x/<n/f/u> <addr>
n是一个正整数,表示需要显示的内存单元的个数
f 表示显示的格式(可取如下值: x 按十六进制格式显示变量。d 按十进制格式显示变量。u 按十进制格式显示无符号整型。o 按八进制格式显示变量。t 按二进制格式显示变量。a 按十六进制格式显示变量。i 指令地址格式c 按字符格式显示变量。f 按浮点数格式显示变量。)
u 表示从当前地址往后请求的字节数 默认4byte,u参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字 节,g表示八字节
<addr>表示一个内存地址
x/xw addr 显示某个地址处开始的16进制内容,如果有符号表会加载符号表
x/x $esp 查看esp寄存器中的值
x/s addr 查看addr处的字符串
x/b addr 查看addr处的字符
x/i addr 查看addr处的反汇编结果
相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
2月前
|
安全 Shell
某易论坛被植入利用ANI漏洞传播 Backdoor.Win32.Agent.ahj 的代码
某易论坛被植入利用ANI漏洞传播 Backdoor.Win32.Agent.ahj 的代码
|
3月前
|
安全 前端开发 rax
PWN练习---Stack_2
PWN练习---Stack_2
62 0
|
5月前
|
网络协议 安全 Ubuntu
PWN练习---Stack_1
PWN练习---Stack_1
96 3
攻防世界---misc---Wire1
攻防世界---misc---Wire1
|
6月前
|
网络协议
攻防世界---misc---easycap
攻防世界---misc---easycap
|
6月前
|
数据安全/隐私保护
攻防世界---misc---再见李华
攻防世界---misc---再见李华
攻防世界---misc---Erik-Baleog-and-Olaf
攻防世界---misc---Erik-Baleog-and-Olaf
|
前端开发 rax Shell
[PWN][高级篇]ROP-ret2libc-32/64位实例 (共四个)(上)
[PWN][高级篇]ROP-ret2libc-32/64位实例 (共四个)
816 0
[PWN][高级篇]ROP-ret2libc-32/64位实例 (共四个)(上)
|
存储 安全 NoSQL
[PWN][基础篇]如何利用printf漏洞突破canary保护
[PWN][基础篇]如何利用printf漏洞突破canary保护
275 0
[PWN][基础篇]如何利用printf漏洞突破canary保护
|
安全 NoSQL C语言
[PWN][基础篇]printf漏洞介绍
[PWN][基础篇]printf漏洞介绍
222 0
[PWN][基础篇]printf漏洞介绍