1.9k 2 分钟

一道简单 fmt 题,但是我搜解题记录时,觉得解得都挺复杂的。 似乎还没有文章用我的方法,那我就写一种简单的解法。 # 绕过 fmt 判断条件 我只用到了 fmt_attack 函数。 由于有一个判定条件: 12345678910111213141516unsigned __int64 __fastcall fmt_attack(int *a1){ char format[56]; // [rsp+10h] [rbp-40h] BYREF unsigned __int64 v3; // [rsp+48h] [rbp-8h] v3 = __readfsqword(0x28u);...
5k 5 分钟

# Tcache Tcache 是 glibc 2.26 之后引入的机制,与 glibc 2.23 版本下堆利用方式有一定区别,产生了新的利用方式。 # 0x1 相关结构体 # tcache_entry 1234typedef struct tcache_entry{ struct tcache_entry *next;} tcache_entry; tcache_entry 用来链接空闲的 tcache chunk,其中的 next 指针指向下一个大小相同的空闲 tcache chunk。 注意:这里的 next 指针指向的是 user data...
6.2k 6 分钟

# 前言 当堆题保护全开的时候。PIE 保护几乎使得 unlink 失效(除非能够计算出程序基址),FULL RELEO 也使得函数 GOT 表不可修改。此时常覆盖各种函数的 hook 为 one_gadget 来 getshell。 我常考虑的顺序是: free_hook -> malloc_hook -> IO_FILE -> exit_hook 若有沙盒限制,则考虑 setcontext 当 free_hook 不可打时(例如 Fastbin Attack 时 free_hook 前不能构造字节错位),我们往往就会打 malloc_hook...
12k 10 分钟

前段时间的极客大挑战 2021 和 2021 年的 SCU 新生赛,最后一道题都没有做出来,作为一枚大二学长确实应该反省一下自己了。太菜了呜呜呜。极客大挑战因为打太久了,题目都快忘记了,就不写 wp 了。 # ret2text 简单的栈溢出,pwn 里的 hello world。 12345678from pwn import *r = process("/mnt/hgfs/ubuntu/stackoverflow")elf = ELF("/mnt/hgfs/ubuntu/stackoverflow")payload =...
3.1k 3 分钟

之前通过攻防世界 String 已经初步了解格式化字符串漏洞的利用原理和利用方式。现在通过这道题精进。 题目名:format_string 提取路径:https://pan.baidu.com/s/1e9I59FhilppS9QIhQWND0A 提取码:F1re # 代码审计 checksec 一下: 很简单的一道题噢,就只开了 NX 不可执行不让你 shellcode。 扔进 IDA 观察一下,发现漏洞所在地:是个三十二位程序的格式化字符串漏洞。 程序先泄露了 v3 的地址,然后有第一个格式化字符串漏洞,如果满足 v3=12 的话,触发第二个格式化字符串漏洞。 一个后门函数。 #...
2.3k 2 分钟

我的学习笔记大量都是基于 CTF-WIKI。 UAF,Use After Free 的缩写,是一种常见漏洞。 # 原理 Use After Free 意如其名,是一个内存漏洞,当一个内存块被释放后又被使用,有以下几种情况: 内存块被释放后,其对应的指针被设置为 NULL , 然后再次使用,自然程序会崩溃。 内存块被释放后,其对应的指针没有被设置为 NULL ,然后在它下一次被使用之前,没有代码对这块内存块进行修改,那么程序很有可能可以正常运转。 内存块被释放后,其对应的指针没有被设置为...
11k 10 分钟

CTF-wiki 真是太好一学习网站了。 原文链接:https://ctf-wiki.org/pwn/linux/user-mode/heap/ptmalloc2/chunk-extend-overlapping/#_1 # Chunk Extend # 实现条件 要实现 chunk extend 需要满足的条件:有堆漏洞,并且该漏洞可以修改 chunk header 里的数据。 # 实现原理 原理大概就是: ①:ptmalloc 通过 chunk header 里面的 prev_size 和 size 来对前后堆块进行定位。 ②:ptmalloc 通过查看下一个堆的 prev_inuse...
735 1 分钟

昨天朋友告诉我电科新生赛开始了,本着摸鱼的心态去做了做,都是很基础的题,可惜有一道游戏题没有做出来。那就分享一道我觉得比较有意思的题。 老规矩 checksec 一下 基本啥保护也没开. # 代码审计 观察主函数,只要满足 master 和 AtHome 字符串相等就能拿到 flag。因此我们的目的就是给 master 字符串赋值为 AtHome。 程序中有一处 ring 函数,点进去看看 发现是读入一个 long long 型的无符号数,再查看 bell 储存的 bss 段 思路很清晰了,只能对 bell 段进行读写,但是 bell 段读进的是一个八字节的 long long 型,而...
3.4k 3 分钟

一道积攒了很久才解出来的题,这道题大体不难,但是好多小细节呜呜呜。而且 Libcsearcher 里的 libc 库没更新(上篇博客讲了)。 这道题是 BUUCTF 上的 ciscn_2019_c_1。标准的 64 位 ROP 流程,我也就分享一下自己的坎坷心路历程。 # 代码审计 老规矩 checksec 一下,只开了 nx 保护。 观察 main 函数 显然哦,只有输入 1 才有点用。 # 关键函数:encrypt () 发现一个栈溢出漏洞。ROP 链的入口。 然后就是读取 s 的长度,在长度范围内对内容进行加密:也就是根据 ascii...
697 1 分钟

# libcsearcher libc 库的更新安装 之前用 libcsearcher 基本上都显示 no match libc。一直感觉很纳闷,后来请教了大佬之后才发现是 libc 库都没有安装。(如果小伙伴们也遇见这种问题,重新去安装一下 libc 库吧) # 先更新 ubuntu 的软件 1sudo apt-get update “无法安全地用该源进行更新,所以默认禁用该源” 这是我之前一直遇到的问题,但是拖到现在还没解决。解决方法:换清华的源。(默认为国外的源,太慢,不稳定) 先将原来的配置文件备份:其中的 sources.list.bak 即为备份文件 1sudo cp...