分类: CTF-PWN

作为pwn分类目录

14 篇文章

setcontext
setcontext+orw 大致可以把2.27,2.29做为两个分界点 2.27下的setcontext 内容如图, 作用是通过rdi寄存器里地址来设置各个寄存器的值。该版本下我们通常从setcontext+53开始利用,因为前面的fldenv byte pte [rcx]会导致程序crash。 值得注意的是,mov rcx,[rdi+0A8h]…
请求大小与标准大小
堆溢出的概念是指有任何方法使写入的内容可以溢出堆块申请的内存从而影响到下个堆块中的内容,那么首先我们要学会计算堆块大小 /* pad request bytes into a usable size -- internal version */ //MALLOC_ALIGN_MASK = 2 * SIZE_SZ -1 #define request…
dlreslove
与ELF文件动态链接过程相关,linux中,程序使用dl_runtime_reslove(link_map_obj,reloc_offset)来对应链接的函数进行重定位。如果我们可以控制相关的参数及其对应地址的内容岂不是可以控制解析到哪个函数? 基本原理 当第一次call或者jmp一个动态链接库中函数时,如图(puts为例): 并不会直接跳转到li…
SROP
原理 程序中断返回时会执行sigreturn系统调用,为该进程恢复之前保存的上下文,但是由于没有严格检查,并且上下文是保存在用户空间地址中的,所以我们可以轻易伪造上下文内容,可借此劫持程序流。 ​ 需要注意的是,在构建ROP链利用的时候我们要满足以下要求: 能调用执行sigreturn 有足够的空间塞下整个sigal frame srop的手法不算…
libc
基本原理 控制函数执行libc中的函数,通常需要先泄露libc文件版本和加载位置,然后通过相对偏移找到并执行相关函数或利用相关gadgets。 原理 一个ELF文件想要调用文件外定义的函数需要先进行加载和链接。链接根据是否是编译时完成分为非动态链接和动态链接。通常来说,我们做的libc的题是动态链接的。静态链接的优点是程序与glibc版本无关,在各…
syscall
基本原理 利用系统调用get shell的一种漏洞利用方式 原理 控制程序执行系统调用,需要有syscall命令,并且可以控制rax寄存器以及传参寄存器。 实际上在编写shellcode的时候我们大部分也是通过系统调用来实现函数调用 利用手法 一般而言,程序中很少出现syscall的gadgets,除非是特殊的编译方式或者特地添加了gadgets。…