AFL源码及流程分析
源码文件结构这里我们直接在AFL的网站上下载最新的代码之后,即得到如下的文件夹
12345lyyl@lyyl:~/Desktop/afl/afl-2.52b$ lsafl-analyze afl-as.c afl-clang++ afl-fuzz.c afl-gcc.c afl-plot afl-tmin alloc-inl.h debug.h experimental libtokencap qemu_mode testcasesafl-analyze.c afl-as.h afl-cmin afl-g++ afl-gotcpu afl-showmap afl-tmin.c as dictionaries hash.h llvm_mode QuickStartGuide.txt test-instr.cafl-as afl-clang afl-fuzz afl-gcc afl-gotc ...
V8 重新入门-2019 starCTF oob 题解
一年多前调试的V8的题目了,都忘光了,只记得用了类型混淆,难搞,准备看之前做2019年的*ctf的oob这道题目重新入门一下(这个题解之前的博客上有,但是因为我重新弄了一个博客图床变了,有时间再全迁移到新的上面),不知道V8又多了什么保护机制啥的。
编译V8额,编译V8就是个大坑。。。
V8是chrome中的JS解释器,经过v8编译之后的可执行文件为d8。下载源码的过程需要连接外网,因此可以通过设置代理或者直接在云服务器上操作。
首先安装一些之后用到的工具
1234567git clone https://chromium.googlesource.com/chromium/tools/depot_tools.gitecho 'export PATH=$PATH:"/path/to/depot_tools"' >> ~/.bashrcgit clone https://github.com/ninja-build/ninja.gitcd ninja && ./configure.py --bootstrap & ...
2021 0CTF/TCTF Final Naive Heap
佛系做题,没想到在RingStar的队伍中拿了这个题目的一血,但是隔壁国际赛的blasn战队好像早就出了。最终RingStar和国际赛道的队伍总共有5支做出来了。
其实题目也是比较简单的。
唔,补充一下,这里我看了r3的wp,发现和我做的不一样,我这里是直接释放的main_arena中保存的top chunk,上下两个相邻的size都是可以通过申请堆块进行伪造的,这样就很容易完成堆重叠的构造了。之后堆风水,泄漏地址,执行rop。
但是r3这里是直接释放的libc前面应该是mmap的一段内存空间中保存的pthread_tcache_struct结构体指针,我在做题的时候只找了libc里面的指针,并没有注意到这块内存。这里在释放pthread_tcache_struct之后就可以很容易的改写fd,然后任意地址分配了,也很方便。
有大佬知道libc前面这段内存是怎么回事请教教弟弟
我的EXP如下
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 ...
虚拟机逃逸&漏洞复现
2020 Plaid CTF mojo Sandbox Escape
2018 Google CTF Just-in-time 优化错误导致OOB
CVE-2018017463 Chrome V8 JIT优化错误漏洞
CVE-2021-22555 Linux Kernel Netfilter 越界写0漏洞
2021 强网杯线下赛 VGA
2020 强网杯线下赛 VbEscape
2018 35C3 CTF Chromacity
2021 XCTF Final 线下WP
2021 XCTF Final 线下WP
哎呀妈呀,太肝了,感觉我都要升仙了。
House of PigGLIBC 2.31
这个题目主要考察的其实是TCTF2020中duet技术相关的部分。作者提出了一个House of Pig的新的利用方式,但是这中方式之前已经见到过了,就是kirin在duet中使用到的技术
0CTF/TCTF 2020 Quals PWN
官方的WP
程序实现很复杂,实现了三种不同的操作方式即三种add,三种edit和三种show,三种功能delete,每种操作方式对应的buf_list是不同的。用户可以进行切换操作方式,在切换的时候程序会将当前操作方式所对应的buf_list等信息拷贝到一个map的地址空间中,我称之为备份。三种不同的操作方式的备份的地址空间是不同的。因此这里不存在备份冲突的情况。
直觉上来讲肯定是进行切换时候发生了问题,因此这里仔细的分析一下切换时候的操作。注意到这里的ida分析不出jmp eax的情况,因此这里使用ghrida来进行分析的。在进行状态切换的时候会check pass,这里的pass和切换的index是对应的,并且这里的pas ...
2020 Nu1LCTF 部分PWN WriteUp
Signup程序实现了一种vector的实现。程序在1,2,4,8,16...申请新的堆块,拷贝数据,并释放旧的堆块。但是在进行删除Delete函数的时候没有对边界进行判断,导致我们可以进行无限次释放,从而将vector->current指针指向已经释放的unsorted bin的fd,从而泄露出libc基址。
泄露出libc基址之后,我们可以直接利用指针越界覆写0x20大小的堆块的fd指针,利用第二个vector覆写free_hook,释放带有/bin/sh的堆块。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253# encoding=utf-8from pwn import *file_path = "./signin"context.arch = "amd64"context.log_level = "debug"context.terminal = ['tmu ...
Tcache Stashing Unlink Attack 利用
House of Lore Attack首先我们看一下glibc 2.30中的源代码
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849if (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 ...
2020 强网杯线上赛 WP
强网先锋babymessage栈溢出漏洞,通过0x10的输入修改rbp,通过判断,使得输入的大小改为0x100,修改返回地址,调用puts泄露libc地址,由于rbp改变,在进行一遍覆盖rbp,覆盖返回地址即可getshell
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556# encoding=utf-8from pwn import *file_path = "./babymessage"context.arch = "amd64"context.log_level = "debug"context.terminal = ['tmux', 'splitw', '-h']elf = ELF(file_path)debug = 0if debug: p = process([file_path]) g ...
2020 0CTF/TCTF quals 部分PWN WriteUp
Duet分析这个题目又是一个PLT表损坏,ida无法分析的题目。修复方法是将.got中的偏移修改为extern的位置,之后ida就会自动识别相应的函数,此时我们将.got中对应的DATA XREF中函数(.plt.sec)的命名更改之后,ida就可以正常的分析函数了。具体的修复方法点这。
程序一共提供了四种功能add, delete, show, edit。存储两个堆块指针,可分配的堆块的大小为0x80-0x400。只能使用一次edit,并且在该函数中存在一个off-by-one的漏洞。
同时设置了sandbox
只能通过orw进行,因此我们需要执行ropchain。
利用
利用off-by-one我们可以进行overlap,泄露出libc基址。
接下来就是FSOP的利用了。
libc2.24之后的版本中增加了对vtable的检查,而libc2.29相对libc2.27之前的IO_strfile来说,其分配和释放内存的函数都被修改为了标准的malloc,free函数,因此没有办法直接getshell
EXP10CTF/TCTF 2020 Quals PWN
直接覆写io_lis ...
2020 RealWorld CTF easy_escape
easy_escape分析首先看一下启动程序run.sh
12345678910#!/bin/sh#Using to build docker environment#export LD_LIBRARY_PATH=/lib/x86_64-linux-gnu/pulseaudio./qemu-system-x86_64 -L ./dependency -kernel ./vmlinuz-5.4.0-58-generic -initrd ./rootfs.cpio -cpu kvm64,+smep \\ -m 64M \\ -monitor none \\ -device fun \\ -append "root=/dev/ram rw console=ttyS0 oops=panic panic=1 quiet kaslr" \\ -nographic
漏洞肯定位于fun设备中,用ida分析一下qemu-system-x86_64,从fun_class_init函数中我们可以得到vendor_id,class_id。在qemu中查看一下resource,看到只有一个 ...