02 2020 档案
摘要:exp 脚本 栈溢出,有 system 函数, rodata 段有 cat flag ,那就不需要拿 shell ,直接栈溢出 rop 调用 system('cat flag') 即可
阅读全文
摘要:exp 脚本 C++写的程序,逆向分析有点费劲。注意到 password_checker 有 call rax 指令,倒推 rax 的来源,在 main 函数中把 rax 的来源覆盖为漏洞函数的地址即可 get shell 感谢 keer 师傅的指点!
阅读全文
摘要:exp 脚本 有 puts 函数,有栈溢出,第一次栈溢出 rop 用 puts 泄露 got 表,回到漏洞函数再次栈溢出 rop 执行 system('/bin/sh')
阅读全文
摘要:[TOC] 逆向分析 new 函数 + records[v2]:存储 chunk 的地址,大小皆为 0xCu 。 + v3:存储 rec_int_print 函数地址用于打印存储的值和类型。 + (v3 + 4):存储 free 函数地址,用于释放 chunk 。 + (v3 + 8):存储用户输入
阅读全文
摘要:exp 脚本 先 rop 用 write 泄露 got 表地址,计算 system 和 /bin/sh 的偏移,回到漏洞函数再次 rop 调用 system('/bin/sh')
阅读全文
摘要:exp 脚本 真的是 baby 难度,直接栈溢出跳转到后门函数
阅读全文
摘要:[TOC] 常规检查 逆向分析 create 函数 + (&unk_202040 + 4 i):置 1 记录 chunk 已创建 + (&unk_202044 + 4 i):存放 chunk 的大小 + qword_202048[2 i]:存储 chnk 的地址 write 函数 + sub_E26
阅读全文
摘要:[TOC] 利用思路 由于之前 house of spirit 时候已经逆向分析过,这里不再重复 + 伪造一个空闲 chunk。 + 通过 unlink 把 chunk 移到存储 chunk 指针的内存处。 + 覆盖 chunk 0 指针为 atoi 的 got 表地址并泄露。 + 覆盖 atoi
阅读全文
摘要:[TOC] 简介 之前在复现自己做出来的题时,一样的思路发现拿不了 shell 了,后来发现是栈迁移的坑。 问题 假设 32 位系统中,漏洞函数可以任意写入 0x00000000。 现在我们已经用双 leave 迁移栈,然后运用 rop 技术泄露 got 表地址,如下: 当我们泄露完地址,从返回地址
阅读全文
摘要:[TOC] 原理 我们在利用 unlink 所造成的漏洞时,其实就是对 chunk 进行内存布局,然后借助 unlink 操作来达成修改指针的效果。 古老的 unlink 假设现在有物理空间连续的两个 chunk(Q,Nextchunk),其中 Q 处于使用状态、 Nextchunk 处于释放状态。
阅读全文
摘要:[TOC] 常规检查 逆向分析 add 函数 我们可以看到,top chunk 到 chunk 0 的偏移为 0x60 ,使用 house of force 技巧,我们需要绕过 request2size(req) 宏,这里由于 0x60 是16字节对齐的,所以只要减去 SIZE_SZ 和 MALLO
阅读全文
摘要:[TOC] 原理 House of Force 是一种堆利用方法,但是并不是说 House of Force 必须得基于堆漏洞来进行利用。如果一个堆(heap based)漏洞想要通过 House of Force 方法进行利用,需要一下条件: + 能够以溢出等方式控制到 top chunk 的 s
阅读全文
摘要:[TOC] 常规检查 逆向分析 create_heap 函数 可以再次编辑 chunk 的内容,而且可以选择输入大小。如果我们这次输入的 size 比创建时大的话,就会导致堆溢出 delete 函数 释放对应 index 的 chunk,并将数组 heaparray 对应的地址置 0。 main 函
阅读全文
摘要:[TOC] 概述 + Unsorted Bin Attack ,该攻击与 Glibc 堆管理中的 Unsorted Bin 的机制紧密相关。 + Unsorted Bin Attack 被利用的前提是控制 Unosrted Bin Chunk 的 bk 指针。 + Unsorted Bin Atta
阅读全文
摘要:[TOC] 常规检查 没有开启 RELRO ,意味我们可以修改 got 表地址。 逆向分析 Add 函数 + dword_804A288:存储构造的块地址 + (dword_804A288 + 13):在块地址的 13 字节处写入上一个块的地址 + (dword_804A288 + 25):在块地址
阅读全文
摘要:JVM是如何执行方法调用的? 引出问题 通常来说,之所以不提倡可变长参数方法的重载,是因为java编译器可能无法决定应该调用哪个目标方法。在这种情况下,编译器会报错,并且提示这个方法调用有二义性。然而,java编译器直接将上述第一个调用识别为调用第二个方法,为什么呢? 重载与重写 在java程序里,
阅读全文
摘要:[TOC] House Of Spirit House of Spirit 是 the Maleficarum 中的一种技术。该技术的核心在于在目标位置处伪造 fastbin chunk ,并将其释放,从而达到分配指定地址的 chunk 的目的。 House Of Spirit 的检测绕过 想要构造
阅读全文
摘要:[TOC] 常规检查 逆向分析 程序有四个功能 + Allocate:分配内存大小并给出 index + Fill:输入 index ,并分配内存进行内容写入操作 + Free:输入 index ,释放相应的内存空间 + Dump:输入 index ,打印内容 Allocate 函数 + 分配的大小
阅读全文
摘要:常规检查 题目分析 "" 两个 read 函数,第一个 buf 只能栈溢出至 ret ,第二个 bank 在 bss 段中,所以思路很明显,要栈迁移到 bss 段中 "" 有 puts 函数和 read 函数,所以我们可以先用 puts 函数泄露出 libc 地址,然后用 read 函数写入 ""
阅读全文
摘要:第一次执行 malloc + size = 128k:使用 mmap 函数, kernel 中 sys_mmap + size bk = BK 及 BK fd = FD 来更改任意内存体位置 detection in malloc + size 是 fastbin 的情况 + memory corr
阅读全文
摘要:[TOC] 常规检查 逆向分析 题目程序较为简单,功能是创建字符串和删除字符串,其中创建字符串用 create ,删除字符串用 free 。 create 函数 当输入的字符串大于 0xf 字符时会另外开辟内存来存储字符串,否则存入 ptr 指针的地址中。通过分析我们还可以得到 + ptr :在小于
阅读全文
摘要:[TOC] 常规检查 思路 首先通过 uaf 泄露出 password ,通过 password 能获得权限通过 flag 命令获得 flag。 exp 内容来源 "pwn练习3 shitsco"
阅读全文
摘要:[TOC] 内存管理设计假设 1.具有长生命周期的大内存分配使用 mmap 。 2.特别大的内存分配总是使用 mmap 。 3.具有短生命周期的内存分配使用 brk ,因为用 mmap 映射匿名页,当发生缺页异常时, linux 内核为缺页分配一个新物理页,并将该物理页清 0 ,一个 mmap 的内
阅读全文
摘要:[TOC] heap and arena data structures _heap_info + mstate ar_ptr:指向分配区的指针 + struct _heap_info ptr:指向上一个 heap_info 结构 + size_t size:分配堆大小 + char pad[...
阅读全文
摘要:"覆盖子函数的ebp,这样在主函数结束时就能控制esp"
阅读全文
摘要:"文件缺乏/bin/sh的情况下,利用字符串fflush中的sh完成getshell"
阅读全文
摘要:"堆溢出写入freegot地址,打印泄露got地址,同时改free的got地址为system地址,再次free就能执行system"
阅读全文
摘要:"将printf第一个参数置%s,第二个置got表地址,即可泄露函数地址"
阅读全文
摘要:"在只有一块的情况下,free后指向main_arnea+0x58"
阅读全文
摘要:"在没有可写可执行的段的情况下,调用mprotect修改段的权限,从而能写入并执行shellcode"
阅读全文