V8 Pwn Basics 2: TurboFan
众所周知, JS 是解释语言, 解析完 AST 后生成字节码, 然后在 VM 上解释运行. 当一个函数运行了很多次之后, 就会尝试编译成二进制机器码, 从而加速执行. 本文将从字节码开始, 介绍 V8 是如何进行优化和编译的.
众所周知, JS 是解释语言, 解析完 AST 后生成字节码, 然后在 VM 上解释运行. 当一个函数运行了很多次之后, 就会尝试编译成二进制机器码, 从而加速执行. 本文将从字节码开始, 介绍 V8 是如何进行优化和编译的.
学一下 fuzzing. 暂时不是很想啃基础知识, 先来学学使用 AFL++. 找到个 afl-traning, 感觉挺新手友好的, 决定做它的 challenges. 给自己定的目标不是找到漏洞就完事, 而是尽量去分析甚至利用.
怎么有人三月份入了个坑然后就没学了啊. 最近某比赛有个 Webkit, 抄了个 exp 改改出了, 信心找回来了, 这就开始学 v8.
userfaultfd 是一个系统调用, 可以用来自定义 handler 处理缺页等情况. 简单来说是通过新建一个线程, 然后监视一个页面. 在任何时刻出现了缺页的情况, 触发缺页的线程挂起, 监视线程进行处理, 处理完毕后唤醒之前挂起的线程.
在 CTF 题中通常用来卡条件竞争. 当内核模块中有 copy from/to user 的时候, 内核模块会访问用户的空间. 如果我们传入的是一个被 uffd 监视的地址, 那么这个线程将会被挂起直到处理结束. 这样就能够控制内核中线程的执行顺序, 从而更好的达到想要的竞争效果.
uffd 使用模板如下: