afl源码分析
afl-gcc.c分析首先看到main函数,里面包含
12345find_as(argv[0]);edit_params(argc, argv);execvp(cc_params[0], (char**)cc_params);
这几个主要函数,下面我们逐个分析
find_as寻找as和afl-as是否存在且可执行
edit_params将参数传给gcc
12pwndbg> p *cc_params@20$2 = {0x55f648b97eec "gcc", 0x7ffff984528d "-o", 0x7ffff9845290 "exp", 0x7ffff9845294 "exp.c", 0x55f648b97fa3 "-B", 0x55f64a040268 "/home/tianmai/afl", 0x55f648b9805c "-g", 0x55f648b9805f "-O3", 0x55f648b9806 ...
afl++源码分析
afl-cc.c中央编译器 afl-cc 包含各种不同类型的编译器目标和检测选项
对应afl中的afl-gcc.c
主要有如下三个函数的调用:
find_object(obj, argv[0]) 主要来查找汇编器等工具
edit_params(argc, argv, envp) 通过我们传入编译的参数来进行参数处理,将确定好的参数放入 cc_params[] 数组。
在以上的步骤都完成之后,调用execvp(cc_params[0], (char **) cc_params) 执行gcc。
find_object()123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 ...
afl分析
代码插桩如果了解编译过程,那么就知道把源代码编译成二进制,主要是经过”源代码”->”汇编代码”->”二进制”这样的过程。而将汇编代码编译成为二进制的工具,即为汇编器assembler。Linux系统下的常用汇编器是as。不过,编译完成AFL后,在其目录下也会存在一个as文件,并作为符号链接指向afl-as。所以,如果通过-B选项为gcc设置了搜索路径,那么afl-as便会作为汇编器,执行实际的汇编操作。
所以,AFL的代码插桩,就是在将源文件编译为汇编代码后,通过afl-as完成。
afl-as.c中具体插入代码的部分如下:add_instrumentation()函数
1fprintf(outf, use_64bit ? trampoline_fmt_64 : trampoline_fmt_32,R(MAP_SIZE));
通过fprintf()将格式化字符串添加到汇编文件的相应位置
保存edi等寄存器
将ecx的值设置为fprintf()所要打印的变量内容
调用方法__afl_maybe_log()
恢复寄存器
在跳转处插入了调用random封装而成的R(MAP ...
afl源码分析
afl-gcc.c分析首先看到main函数,里面包含
12345find_as(argv[0]);edit_params(argc, argv);execvp(cc_params[0], (char**)cc_params);
这几个主要函数,下面我们逐个分析
find_as寻找as和afl-as是否存在且可执行
edit_params将参数传给gcc
12pwndbg> p *cc_params@20$2 = {0x55f648b97eec "gcc", 0x7ffff984528d "-o", 0x7ffff9845290 "exp", 0x7ffff9845294 "exp.c", 0x55f648b97fa3 "-B", 0x55f64a040268 "/home/tianmai/afl", 0x55f648b9805c "-g", 0x55f648b9805f "-O3", 0x55f648b9806 ...
io之global_max_fast+fsop
#堆中global_max_fast相关利用改写global_max_fast为一个较大的值,然后释放一个较大的堆块时,由于fastbins数组空间是有限的,其相对偏移将会往后覆盖,如果释放堆块的size可控,就可实现往fastbins数组(main_arena)后的任意地址写入所堆块的地址。计算偏移的方式:
123fastbin_ptr=libc_base+libc.symbols['main_arena']+8idx=(target_addr-fastbin_ptr)/8size=idx*0x10+0x20
#FSOP
12345if (((fp->_mode <= 0 && fp->_IO_write_ptr > fp->_IO_write_base)) && _IO_OVERFLOW (fp, EOF) == EOF) { result = EOF; }
mode偏移0xc0IO_wr ...
all刷题记录
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220 ...
house of storm加setcontest利用
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291.毛泽东思想形成和发展的社会条件是什么?答:(1)20世纪前中期世界和中国政局的变动,是毛泽东思想产生和形成的时代背景。(2)毛泽东思想的产生和形成,是近现代中国社会和革命运动发展的客观需要和历史产物。(3)新的社会生产力的增长和工人运动的发展,为毛泽东思想的产生和形成提供了物质基础。(4)新文化运动的兴起和马克思列宁主义的传人与传播,为毛泽东思想的产生和形成准备了思想理论条件。3.如何科学认识毛泽东思想的历史地位?答:毛泽东思想是马克 ...
house of storm
漏洞危害House_of_storm 可以在任意地址写出chunk地址,进而把这个地址的高位当作size,可以进行任意地址分配chunk,也就是可以造成任意地址写的后果,危害十分之大。 House_of_storm 虽然危害之大,但是其条件也是非常的苛刻。
漏洞利用条件
glibc版本小于2.30,因为2.30之后加入了检查
需要攻击者在 large_bin 和 unsorted_bin 中分别布置一个chunk 这两个chunk需要在归位之后处于同一个 largebin 的index中且 unsorted_bin 中的chunk要比 large_bin 中的大
需要 unsorted_bin 中的 bk指针 可控
需要 large_bin 中的 bk指针和bk_nextsize 指针可控
*1*|***1***原理及源码分析
漏洞发生在unsorted_bin的chunk放入largebin的过程中,以下是glibc2.23的源码分析。
1234567891011121314151617181920212223242526272829303132333435363738394041 ...
部分pwn
atoi64ida打开,main函数f5
只有一个输入,只要满足判断条件即可提权
而要满足判断条件很简单(atoi函数可以搜一下),输入501#501#即可(其中#号可以换成其他字符)
boundaryida32打开,分析结果如下:
蛇很简单,撞墙之后会提示try Q;然后再次连接,生成地图后输入q即可提权。(英文看不懂的自己翻译)
白给的random源码
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657#include<stdio.h>#include<stdlib.h>int main(){ setvbuf(stdin, 0LL, 2, 0LL); setvbuf(stdout, 0LL, 2, 0LL); setvbuf(stderr, 0LL, 2, 0LL); int j=0; puts("Please enter your seed."); put ...