技术社区
安全培训
技术社群
积分商城
先知平台
漏洞库
历史记录
清空历史记录
相关的动态
相关的文章
相关的用户
相关的圈子
相关的话题
注册
登录
2025CISCN&长城杯半决赛 PWN typo详细题解
LonTan0
二进制安全
163浏览 · 2025-03-26 13:15
返回文档
typo
代码审计及思路
有三个功能add,free,edit,没有uaf,漏洞在edit中。
图片加载失败
可以读入0x100个字节在栈上,然后snprintf函数会把栈上的这些数据复制给堆块里,造成堆溢出,但是snprintf会被\x00截断,那就是说只能覆盖size位了吗?当然不是,可以通过一些格式化字符绕过,把payload里的\x00替换为%n$p,去找偏移为n,数据为0的,这样可以通过snprintf输出给堆块,并且不影响payload。
这样写,snprintf在解析format时不会遇到\x00,而是去解析这个%n$p,但是解析到为0,依然会输出给原来\x00的位置,这样绕过\x00截断问题。
还有一个点就是add中会保存size在fd位,同时edit是根据这个size读入数据的,如果通过溢出修改这个size,就是常见的堆溢出,改tcache bins中堆块的fd为free_hook等操作。
这样的话,这道题肯定还是要先泄露libc,那么没有show且保护全开,结合上面的漏洞。
1
先利用堆溢出合并一个可以进入unsorted bins的堆块,同时合并前的一个小堆块留在tcachebins,改main_arena这个libc地址最后两位为stdout,远程需要爆破,得到libc地址。
2
然后把合并的堆块恢复回去,通过修改其中一个堆块的fd的size,利用两次修改后面堆块的fd分别为free_hook,和/bin/sh,即可getshell
gdb调试
首先是堆块合并,
图片加载失败
然后令2号堆块同时位于tcache bins和unsorted bins中,
图片加载失败
改为stdout-8,因为edit的读入在bk位,
图片加载失败
get_libc_base
图片加载失败
之后就是改一个size,然后改tcache bins内堆块的fd,同样是free_hook-8,
图片加载失败
getshell
图片加载失败
exp
附件:
typo.zip
下载
0
人收藏
0
人喜欢
转载
分享
0
条评论
某人
表情
可输入
255
字
评论
没有评论
发布投稿
热门文章
1
契约锁电子签章系统 pdfverifier 远程代码执行漏洞分析(补丁包逆向分析)
2
COFF文件解析 | CoffLdr
3
Java内存马篇——WebSocket内存马及GodZilla二开
4
从零掌握java内存马大全(基于LearnJavaMemshellFromZero复现重组)
5
突破网络限制,Merlin Agent助你轻松搭建跳板网络!
近期热点
一周
月份
季度
1
契约锁电子签章系统 pdfverifier 远程代码执行漏洞分析(补丁包逆向分析)
2
COFF文件解析 | CoffLdr
3
Java内存马篇——WebSocket内存马及GodZilla二开
4
从零掌握java内存马大全(基于LearnJavaMemshellFromZero复现重组)
5
突破网络限制,Merlin Agent助你轻松搭建跳板网络!
暂无相关信息
暂无相关信息
优秀作者
1
T0daySeeker
贡献值:41700
2
一天
贡献值:24800
3
Yale
贡献值:24000
4
1674701160110592
贡献值:21800
5
1174735059082055
贡献值:16000
6
手术刀
贡献值:14000
7
Loora1N
贡献值:13000
8
bkbqwq
贡献值:12800
9
lufei
贡献值:11000
10
xsran
贡献值:10600
目录
typo
代码审计及思路
gdb调试
exp
转载
标题
作者:
你好
http://www.a.com/asdsabdas
文章
转载
自
复制到剪贴板
没有评论