pwn IO相关偏移
主要是因为有几次比赛,题基本打到IO了但是就剩下十分钟了根本调不通IO链,为了预防这种情况再次出现这里慢慢总结一下IO相关结构体和不同的攻击方式
这里主要是快捷提供了一些结构体以及偏移方便直接查询,这里的偏移以虚表为主,虚表实现主要是辅助我们查找函数的
gdb调试技巧
-
查看结构体的偏移量
ptype /o struct xxxx // 可以获取结构体的偏移量
-
查看变量的类型
ptype 变量 // 可以查看变量类型
主要是因为有几次比赛,题基本打到IO了但是就剩下十分钟了根本调不通IO链,为了预防这种情况再次出现这里慢慢总结一下IO相关结构体和不同的攻击方式
这里主要是快捷提供了一些结构体以及偏移方便直接查询,这里的偏移以虚表为主,虚表实现主要是辅助我们查找函数的
查看结构体的偏移量
ptype /o struct xxxx // 可以获取结构体的偏移量
查看变量的类型
ptype 变量 // 可以查看变量类型
参考文章:https://blog.csdn.net/jasonliuvip/article/details/22600569
https://zhuanlan.zhihu.com/p/25918300
https://blog.csdn.net/hbhgyu/article/details/106245182
mmap函数:https://blog.csdn.net/qq_41687938/article/details/119901916
脏页面:https://blog.csdn.net/shift_wwx/article/details/122497891
匿名页:https://blog.csdn.net/jasonchen_gbd/article/details/79462014
linux下的特殊文件:https://blog.csdn.net/pi9nc/article/details/18257593
反向映射机制:https://zhuanlan.zhihu.com/p/363319174
madvise函数:https://blog.csdn.net/sz66cm/article/details/139334306
dirty cow详解:https://xuanxuanblingbling.github.io/ctf/pwn/2019/11/18/race/ (巨推荐)
get_user_pages:https://zhuanlan.zhihu.com/p/579444153
缺页异常:https://www.anquanke.com/post/id/290851
pde和pte:https://blog.csdn.net/q1007729991/article/details/52723478
管道:https://zhuanlan.zhihu.com/p/470183989
Dirty pipe :https://blog.csdn.net/void_zk/article/details/125884637
Pipe_write源码分析:https://xz.aliyun.com/t/11016?time__1311=Cq0x2QD%3DqDT4l2zYGQqpxQq0I1tqWumD
linux寻址机制:https://www.cnblogs.com/binlovetech/p/17571929.html
初入职场必备丨二进制面试问题汇总 - FreeBuf网络安全行业门户pwn方向的分析 预计中旬左右
参考文章:ptmalloc堆概述-多线程支持_ptmalloc主arena存在的意义-CSDN博客
推荐(讲得很清晰):ptmalloc源码分析 - 主分配区和非主分配区Arena的实现(04)_malloc main arena-CSDN博客
io_file中经典利用 核心L_IO_flush_all_lockp函数的利用
知道libc基地址
_IO_list_all 是作为全局变量储存在 libc.so 中的
三种情况下会被自动触发:
当 libc 执行 abort 流程时
当执行 exit 函数时
当执行流从 main 函数返回时
io_file相关学习有点蛋疼 感觉较为复杂 找到了大佬的blog感觉摸到了皮毛 为了深入
题目中存在off_by_one libc版本2.34以上我们没办法使用常规的overlapping 泄露libc地址
所以我们要精心构造一个chunk head来绕过新版本的检查机制 实现leak libc的操作
文章中我们先讲原理 在最后会将Arahat0师傅的脚本给出来()
2.34下的合并检查机制
unlink检查
主要是看着wiki 理解理解 然后自己看的glibc2.27的源码 抛开tcache部分
这里是去除了不重要的
tcache bin
判断部分
if (in_smallbin_range (nb)){
idx = smallbin_index (nb);
bin = bin_at (av, idx);
if ((victim = last (bin)) != bin)
{
bck = victim->bk;
if (__glibc_unlikely (bck->fd != victim))
malloc_printerr ("malloc(): smallbin double linked list corrupted");
set_inuse_bit_at_offset (victim, nb);
bin->bk = bck;
bck->fd = bin;
if (av != &main_arena)
set_non_main_arena (victim);
check_malloced_chunk (av, victim, nb);
void *p = chunk2mem (victim);
alloc_perturb (p, bytes);
return p;
}
}
昨天做vctf被打自闭了 由于对glibc高版本的保护不熟悉 第二题apples 连leak libc都没实现
这里记录一下为什么常规overlapping会失效
首先是add user部分 存在off_by_one漏洞
delete部分无懈可击()
参考文章:
wiki:Large Bin Attack - CTF Wiki (ctf-wiki.org)
源码级调试glibc:源码级调试glibc_glibc cannot be compiled without optimization-CSDN博客
源码分析:glibc 2.31 malloc与free 源码分析(持续更新) - PwnKi - 博客园 (cnblogs.com)+glibc malloc源码分析 - PwnKi - 博客园 (cnblogs.com)
详细拆分了_int_malloc的流程 并且按照功能分了标题 想要了解对应部分就直接点击标题跳转即可
第一次阅读glibc的源码然后进行分析 有错误的地方请大佬指正