文章分类 -  pwn

记录自己学习pwn时候的笔记,主要源于哔哩哔哩上面星盟的讲解
摘要:CTFHub之pwnret2text 分析 首先检查一下保护机制: 所有安全措施 CANARY/FORTIFY/NX/PIE 都关闭了,说明该题不需要复杂的绕过操作。接下来,把文件丢到IDA中,先看看 main 函数的源代码: 只是简单的输入和输出,并没看到跟 flag 相关的信息。继续看,发现还有个 secure 函 阅读全文
posted @ 2022-03-17 10:17 vi0let 阅读(513) 评论(0) 推荐(0)
摘要:IO_FILE writeIO_FILE write|FSOP FSOP 的核心思想就是劫持_IO_list_all 的值来伪造链表和其中的_IO_FILE 项,但是单纯的伪造只是构造了数据还需要某种方法进行触发。FSOP 选择的触发方法是调用_IO_flush_all_lockp,这个函数会刷新_IO_list_all 链 阅读全文
posted @ 2022-03-07 21:57 vi0let 阅读(61) 评论(0) 推荐(0)
摘要:IO_FILE leakIO_FILE leak|IO_FILE的结构 _IO_FILE_plus的结构如下(glibc-2.33 libioP.h) struct _IO_FILE_plus{ FILE file; const struct _IO_jump_t *vtable;}; 在libc-2.23版本中,有个全局 阅读全文
posted @ 2022-03-07 21:56 vi0let 阅读(277) 评论(0) 推荐(0)
摘要:Largebin attacklargebin attack|概述 前言:用的glibc版本是2.33 ●Largebin时glibc中, 超过0x400大小的空闲内存所构成的链表 ●Largebin的特质和unsortbin类似, 只是多了一个bk_next_size和fd_ next_ size的指针,用于指向比当前堆块大小 阅读全文
posted @ 2022-03-07 21:55 vi0let 阅读(67) 评论(0) 推荐(0)
摘要:tcache attackTcache attack|Tcache bin的结构 glibc用tcache_entry和tcache_perthread两个结构体来管理tcache bin 1、tcache_entry 2、当我们分配的chunk释放后进入tcache bin时,就会按这个结构体来按链表存储,next指向 下 阅读全文
posted @ 2022-03-07 21:54 vi0let 阅读(639) 评论(0) 推荐(0)
摘要:fastbinFastbin|定义 Fast Bin分类的chunk的大小为32~128(0x80)字节,如果chunk在被释放时发现其大小满足这个要求,则将该chunk放入Fast Bin,且在被释放后不修改下一个chunk的PREV_INUSE标志位。Fast Bin在堆管理器中以单链表的形式存储,不同大小的 阅读全文
posted @ 2022-03-07 21:52 vi0let 阅读(298) 评论(0) 推荐(0)
摘要:offbyoneoffbyone|介绍 CTFWiki offbynull的前世今生 严格来说 off-by-one 漏洞是一种特殊的溢出漏洞,off-by-one 指程序向缓冲区中写入时,写入的字节数超过了这个缓冲区本身所申请的字节数并且只越界了一个字节。 堆叠 先来认识堆叠,因为off by系列的目的之一,就是 阅读全文
posted @ 2022-03-07 21:51 vi0let 阅读(127) 评论(0) 推荐(0)
摘要:unlinkunlink|原理 1、简介:俗称脱链,就是将链表头处的free堆块unsorted bin中脱离出来,然后和物理地址相邻的新free的堆块合并成大堆块(向前合并或者向后合并),再放入到unsorted bin中。 2、危害原理:通过伪造free状态的fake_ chunk, 伪造fd指针和bk指针 阅读全文
posted @ 2022-03-07 21:50 vi0let 阅读(42) 评论(0) 推荐(0)
摘要:UAFUAF 全称:use after free 顾名思义,某块内存在释放后还能被用户使用 一般存在于,free后没有将指针置为NULL,导致野指针的存在 阅读全文
posted @ 2022-03-07 21:49 vi0let 阅读(229) 评论(0) 推荐(0)
摘要:堆chunk介绍堆概述 是虚拟地址空间的一块连续的线性区域 提供动态分配的内存,允许程序申请大小未知的内存 在用户.与操作系统之间,作为动态内存管理的中间人 响应用户的申请内存请求,向操作系统申请内存,然后将其返回给用户程序 管理用户所释放的内存,适时归还给操作系统 堆(chunk)内存是一种允许程序在运行过程中动 阅读全文
posted @ 2022-03-07 21:48 vi0let 阅读(1327) 评论(0) 推荐(0)
摘要:整数溢出整数的运算|初步认识整数溢出 CTFWiki:https://ctf-wiki.org/pwn/linux/user-mode/integeroverflow/introduction/ 在计算机导论、数字逻辑和汇编等课程中,我学到了原码、反码、补码的概念,对于其运算的法则也有了了解。 计算机并不能 阅读全文
posted @ 2022-03-07 21:47 vi0let 阅读(510) 评论(0) 推荐(0)
摘要:特殊情况下sandbox的bypassseccomp|绕过沙箱 常见的沙箱绕过思路 ORW Open/openv Read/readv Write/writev 使用开源工具查看seccomp规则 安装链接:https://github.com/david942j/seccomp-tools 特殊的沙箱绕过思路-未检查架构 i386与x 阅读全文
posted @ 2022-03-07 21:45 vi0let 阅读(438) 评论(0) 推荐(0)
摘要:sandbox介绍概述 沙箱是什么? 沙箱(sandboxie),也叫沙盘,和军事上的意义相似,所有在沙箱中运行的程序都是模拟演习,并不是真刀真枪。沙箱的工作原理是:将程序运行在一个隔离的空间内,且在沙箱中运行的程序可读不可写,从而避免程序对电脑的其它程序和数据造成永久性的修改或造成破坏。官方用一个很形象的比喻说明了 阅读全文
posted @ 2022-03-07 21:42 vi0let 阅读(384) 评论(0) 推荐(0)
摘要:非栈上格式化字符串漏洞利用概述 有时候输入的字符串并不是保存在栈上的,这样没法直接在栈上布置地址去控制printf函数的参数,这种情况下的利用相对比较复杂。 程序在调用时会将rbp压入栈中或者将一些指针变量存在栈中等操作,所以栈上会有很多保存着栈上地址的指针,而且容易找到三个指针p1、p2、p3,形成p1指向p2、p2指向p 阅读全文
posted @ 2022-03-07 21:37 vi0let 阅读(657) 评论(0) 推荐(0)
摘要:栈上的格式化字符串漏洞利用综述 通过格式化字符串漏洞可以进行任意内存的读写。由于函数参数通过栈进行传递,因此使用%X$p(X为任意正整数)可以泄露栈上的数据。并且,在能对栈上数据进行控制的情况下,可以事先将想泄露的地址写在栈上,再使用%X$p,就可以以字符串格式输出想泄露的地址。 除此之外,由于"%n"可以将已经成功输出的字 阅读全文
posted @ 2022-03-07 21:35 vi0let 阅读(502) 评论(0) 推荐(0)
摘要:格式化字符串介绍格式化字符串介绍 格式化字符串(format string),是一些程序设计语言在格式化输出API函数中用于指定输出参数的格式与相应位置的字符串参数,例如C、C++等程序设计语言的print类函数,其中的转换说明(conversion specification)用于把随后对应的0个或多个函数参数转 阅读全文
posted @ 2022-01-17 22:41 vi0let 阅读(1144) 评论(0) 推荐(0)
摘要:栈溢出进阶(下)stack pivot 原理 leave -> mov rsp,rbp pop rbp ret ret 优点 :所需溢出字节较少 条件 :栈溢出控制程序执行流;存在可以控制内容的内存(栈、堆、bss...),且需泄露地址。 SROP SROP全称是Sigreturn Oriented Program 阅读全文
posted @ 2022-01-17 22:39 vi0let 阅读(34) 评论(0) 推荐(0)
摘要:栈溢出进阶(上)stack smash 原理:在程序加了 canary 保护之后,如果我们读取的 buffer 覆盖了对应的值时,程序就会报错,而一般来说我们并不会关心报错信息。而 stack smash 技巧则就是利用打印这一信息的程序来得到我们想要的内容。这是因为在程序启动 canary 保护之后,如果发现 c 阅读全文
posted @ 2022-01-17 22:34 vi0let 阅读(76) 评论(0) 推荐(0)
摘要:ret2xxROP 随着NX保护的开启,以往直接向栈或者堆上直接注入代码的方式难以继续发挥效果。所以攻击者们也提出来相应的方法来绕过保护,目前主要是ROP(Return Oriented Programming),其主要思想是在栈缓冲区溢出的基础上,利用程序中已有的小片段(gadgets)来改变某些寄存器或者变 阅读全文
posted @ 2022-01-17 22:33 vi0let 阅读(82) 评论(0) 推荐(0)
摘要:canary_pie绕过canary机制介绍 canary是一种用来防护栈溢出的保护机制。其原理是在一个函数的入口处,先从fs/gs寄存器中取 出一个4字节(eax)或者8字节(rax)的值存到栈上,当函数结束时会检查这个栈上的值是否和存进去 的值一致 当canary被纂改时,触发__Stack_chk_fail。 can 阅读全文
posted @ 2022-01-17 22:32 vi0let 阅读(457) 评论(0) 推荐(0)