总结一下关于AFL++ qemuafl fuzzing模式的实现方法,以供后面查阅
这几天阅读了一篇关于怎样用AFL对路由器设备进行fuzzing的文章FirmAFL记录一下这篇文章比较有意思的地方。
论文地址:https://www.usenix.org/conference/usenixsecurity19/presentation/zheng
代码仓库:https://github.com/zyw-200/FirmAFL
Emtaint是来自中科大的一篇关于iot二进制安全分析的一篇论文,发表于ISSTA2023。文中提出了一种船新(也不完船新)的针对binary的变量污点分析\alias判断的策略。同时Emtaint说明了在iot binary中,处理inderect call的重要性。本文也复现了论文给出的工具
一道很有意思的基于栈溢出的题目,有两个关键的gadget add byte ptr [rbp - 0x3d], bl
以及抬栈技巧,感觉比较巧妙(折磨),在这里记录一下
这次分析的royal randomeware是一个勒索软件。他最近非常活跃(最后一次报告就是今天早上)。其实原理还是挺简单的。总共分析起来也不算特别复杂。
Mirai属于经典的物联网僵尸网络,产生时间比较久,因此在github上有其泄露的源码。接下来内容我将按照源码进行分析。另外还有一个正在流行的僵尸网络样本Gafgyt,也将在本文后半部分分析。这也是我第一次分析恶意软件。
来自corctf2022的一道corchat。当时是六月份,就顾着培训了,都没有来得及好好看看题目。听说这道题比较好就来学习一下。这道题难度不高,但是很有意思。和之前刚接触的一道覆盖$fs_base
的题目是一样的想法。(后来才知道,原来这种方式叫做覆盖master canary,在多线程题目里面还挺常用的)
开始复现CAFL工具,工具原文和笔记在链接。这一周着手写了一个对于compare条件之前,提取操作数并转发的简单(其实我觉得写起来查资料超级麻烦的)pass
预推免了,来刷一点算法题,ctf我对不起你
其实回想学习CTF的这一年半,最快乐的时候还是学习新知识,刚接触heap的那会,还会去学angr和Z3,学逆向,学misc,到现在glibc2.35上来之后逐渐对传统heap chall不感兴趣了。也不知道后面会不会继续打CTF。但是无论如何,他给我的收获都是课堂上知识无法比拟的。
下面的算法题主要来自于leetcode。
white box fuzzing一般使用符号执行,天生使用符号执行从根本上限制了他们的扩展能力,并且执行速度一般非常慢(24小时以上),而grey box fuzzing技术并不是直接抛弃拒绝无法达到的路径,而是根据每个seed的score(能够到达目标地址的可能性,通过判定距离目标位置的远近,或者机器学习的方法),给出seed优先权。但是由于不对地址做预先筛选,大部分执行路径是无法到达target site的。
本文给出的Beacon的创新点在于,通过廉价的静态分析,我们可以计算直接导致目标路径不可行的程序变量值的合理近似值,从而根据此就可以修剪超过80%的不可行路径(包含无法到达以及到达时数据条件不满足两种情况)。
关于fuzz领域看的第二篇论文。这篇论文创新性的将数据流差距和控制流顺序也放在seed评估中(而不是传统的代码覆盖率),并自动化的实现了从core dump和patchlog中提取数据限制的方法。提升了对于direct fuzz效率的提升。
这一节的关键是parsing interpreters,据说是书中最为重要的部分之一。其实等看完了之后发现,应该就是所谓的优先级转换。看完了这一篇还是对前端解析中优先级的处理有了更深的认识,知道了具体是怎么实现的,甚至可以根据自己的需求,调整运算优先级。
编译器实践第三课,Representing Code
上一章节我们提到如何把代码作为字符串,识别出对应的变量,关键字,表达式,运算符等,并把它们提取出来。而这一章后面一章,将会把这些token转化为更为复杂的内容。这一章关注的是,关于这些“更为复杂的内容”的定义。
关于编译器学习的第二课,这次介绍了一个和C语言风格极其类似的LOX语言。后面我们要实现的编译器就和这个语言相关。
此外本篇还介绍了关于tree-walk interpreter中,scanner的代码原理部分。
2022强网杯的house of cat。高版本下UAF的直接利用。看了很多wp发现在高版本下,基本所有攻击都聚焦于FSOP方向了。看来这才是大势所趋。
注意到前几天dice_hope也有一个一模一样的题,简单做法是改libc的got表为system,也可以FSOP泄露一个栈地址来劫持返回地址。但是这道题开了沙箱,也就是只能用第二种方法了。
学习手动实现编译器上面的编译器原理内容,希望难度不大,能跟着学下去~
crafting-interpreters 1
好久没打比赛了..被一个培训搞得身心俱疲。今日被松神带着打了一场比赛,逐渐找找之前的感觉。
暑假还打算学一下编译,不知道本科有没有机会学了,珍惜剩下的时间吧
比赛题目官方存档以及wp
来自pwnhub春季赛的一道题目,比赛的时候看了,完全没有思路。赛后复现发现题目确实很复杂。但是也学到了非常多。包括:能够任意地址写的magic,反向shell,alarm设置rax,构造syscall指令的方法。
最后一个pwn是一个python,看了半天实在不知道哪里有问题。最后一题是赛后看了wp复现的,后来才知道是对puthon的性质不熟悉,利用的是侧信道攻击。
更新中…
启动docker命令:sudo docker exec -it c_ares_FB /bin/bash
好久没发博客了,一方面因为复现虎符实在是自闭了,一个周末怎么看都没看懂那道vdq和gogogo,另一方面做的buu题目也不是很有价值。这里记录一下复现的2022zer0ctf的accountant。感觉这里的题目还是对我这种菜鸡比较友好的。
基于语法的fuzzing,主要面向黑盒测试。个人觉得这种方式可以再结合覆盖率动态调整演变方向,并且可以结合AI中的进化算法,演变出coverage更高的输入。
本次测试对象是LibXML2,目的是发现CVE-2017-9048漏洞。此外,还有fuzzingbook中关于mutation相关知识的学习。
和之前题目realloc代码部分几乎一样,新增了GOT表不可写,导致堆布局更加复杂。个人觉得能够独立完成这道题(或者看了大致思路之后自己完成堆布局)能够算是堆布局方面至少是中级水平了。
发现自己的基础还是薄弱。参加TQLCTF一道题也不会做,看了wp,发现需要这种攻击方法。于是才过来学。本篇包含了tcache结构图。
第五次学习kernel,寒假也接近了尾声。回想一下寒假学了什么,主要是复习了一下堆中不熟悉的IO_FILE攻击、建立了这个博客,pwnable.tw上刷了4道题,学习了kernel,出了一道题,打了一次dicectf。还是感觉时间好快。
pwnable上300分的babystack。第二次见到利用栈残余数据完成的攻击。利用测信道(不过是程序内的)完成爆破,一开始也没有想到。只能说这题非常巧妙了。做了整整两个晚上才做完。
tcache stashing unlink attack最先一次见到是在buuoj上的新春红包题上。链接
这次再次学习,是为了后面的House-of-pig做准备
记录一下IO_FILE的学习。之前都是零散的看到题目做题,不会了复现别人的做法。现在把新旧版本的IO_FILE利用方法整合一下。本篇文章主要关注 劫持IO_FILE任意读写(泄露libc、任意写)
第一次做VM相关题目,之前也有看到过,但是逆向虚拟机实在太复杂,而且别人的wp根本不会去讲怎么逆向的。这次2022RWctf一上来就是vm题,但是给了源码,而且是比较简短的虚拟机,正好可以借此学习一下逆向vm与一般vm的写法和漏洞点。
kernel基础环境+驱动编译+基础提权、沙箱绕过