技术社区
安全培训
技术社群
积分商城
先知平台
漏洞库
历史记录
清空历史记录
相关的动态
相关的文章
相关的用户
相关的圈子
相关的话题
注册
登录
使用fgetc冲破全缓冲
Oxh3y3
二进制安全
449浏览 · 2025-04-05 07:04
返回文档
XYCTF2025中的Ret2libc's Revenge
这道题真的做我难受,使用了三种方法
1
改
main
函数的返回地址
libc_start_call_main
后
ogg
但是要爆破,可能性是4096分之一。本机
aslr
开启以后可以爆进去,但是不能执行
cat /flag
2
使用
elf
的相关
gadget
控制
rdi
再执行
call puts
从而将
libc
地址写入输出缓冲区。再写上
0x3e
个执行
call puts
的语句把缓冲区塞满,最后输出
libc
。可是远程不行!开始以为是缓冲区大小不一样,但是我写了一个循环去试,没试出来。
3
使用
elf
的相关
gadget
控制
rdi
为
stdout
,再调用
fgetc@plt
就可以刷新缓冲区。因为我控制不了
rcx
为2从而执行
setvbuf
,所以想试试
fgetc
是否有奇效。
setvbuf
setvbuf函数,它有三种mode:
也就是说,要想使缓冲区的地址打印出来,有以下思路:
1
重新设置setvbuf,但这不知道管不管用,没法尝试因为这需要4个参数,没法控制rdx和rcx
2
调用fflush(stdout),但是需要泄露libc地址,死循环,这里做不到
3
挤爆缓冲区,自然就会把内容打印出来了
这三种思路我都没走通,干脆走其他路子--那就是使用fgetc刷新缓冲区。
原理分析
fgetc
定义:
啥也看不出来,把
libc.so.6
丢到
ida
里。
判断了
fp->_IO_read_pt >= fp->_IO_read_end
如果将
fp
设置为
stdout
,也就是控制
rdi
。那么我们可以看到这两个值是相等的。所以程序会进入
__uflow
,跟进去看看。
定义如下:
可以看到会执行到
_IO_switch_to_get_mode
这个位置。
定义如下:
学过
IO
的师傅们就轻车熟路了。
fp->_IO_write_ptr > fp->_IO_write_base
这条判断显然是成立的。那么就会进入
_IO_OVERFLOW
,
#define _IO_OVERFLOW(FP, CH) JUMP1 (__overflow, FP, CH)
就是说会调用
stdout
vtable中的
__overflow
。实际上就是调用
_IO_new_file_overflow
。
源码如下:
一些重要的魔数定义如下:
此时
f->_flags=0xfbad2884
,其中
_IO_NO_WRITES = 0x8
,所以
f->_flags & _IO_NO_WRITES=0
。会进去下一个分支,
(f->_flags & _IO_CURRENTLY_PUTTING) = 0x800
且
f->_IO_write_base != NULL
。
那么就会走到
if (ch == EOF)
这里,因为
rsi=0xffffffff
所以条件成立,那么就会调用`_IO_do_write (f, f->_IO_write_base,f->_IO_write_ptr - f->_IO_write_base);
_IO_do_write
定义如下:
new_do_write
定义如下:
接着会调用
_IO_SYSWRITE
也就是
_IO_file_write
定义如下:
最后会调用
__write (f->_fileno, data, to_do)
,其实就是调用
write
输出
f->_IO_write_ptr - f->_IO_write_base
中的内容
至此刷新了
stdout
的缓冲区。
总结
条件允许的情况下其实也不用去塞满
stdout
的缓冲区,这种使用
fgetc
的简洁,也不需要知道缓冲区的大小,更不用
payload
里写很多
gadget
让执行流执行输出去挤爆缓冲区。
2
人收藏
3
人喜欢
转载
分享
3
条评论
某人
表情
可输入
255
字
评论
发布投稿
热门文章
1
从零掌握java内存马大全(基于LearnJavaMemshellFromZero复现重组)
2
突破网络限制,Merlin Agent助你轻松搭建跳板网络!
3
从白帽角度浅谈SRC业务威胁情报挖掘与实战
4
基于规则的流量加解密工具-CloudX
5
从0到1大模型MCP自动化漏洞挖掘实践
近期热点
一周
月份
季度
1
从零掌握java内存马大全(基于LearnJavaMemshellFromZero复现重组)
2
突破网络限制,Merlin Agent助你轻松搭建跳板网络!
3
从白帽角度浅谈SRC业务威胁情报挖掘与实战
4
基于规则的流量加解密工具-CloudX
5
从0到1大模型MCP自动化漏洞挖掘实践
暂无相关信息
暂无相关信息
优秀作者
1
T0daySeeker
贡献值:38700
2
一天
贡献值:24800
3
Yale
贡献值:18000
4
1674701160110592
贡献值:18000
5
1174735059082055
贡献值:16000
6
Loora1N
贡献值:13000
7
bkbqwq
贡献值:12800
8
手术刀
贡献值:11000
9
lufei
贡献值:11000
10
xsran
贡献值:10600
目录
setvbuf
原理分析
总结
转载
标题
作者:
你好
http://www.a.com/asdsabdas
文章
转载
自
复制到剪贴板