2019年第三届红帽杯线上赛wp
2019年第三届红帽杯线上赛wp PWN three IDA打开之后,函数名都是 sub_xxx ,然后通过nc官方部署的程序(或本地在程序所在目录创建flag文件后),获得程序中会出现的字符串定位到了重要函数,我用的是字符串 Maybe is good 。 贴出来一下重要函数对应的内存地址: 函数名(已重命名) 内存地址 main 0x08048CA8 load_flag 0x080488C5 Maybe_is_good 0x0804897E main_method 0x08048B5C 四者结构如图: load_flag 里面需要加载flag文件,如果没有就exit,也就是一开始无法本地打开原因。 Maybe_is_good 里面没有特别的,关键在main_method,先贴出完整代码(以重名部分函数&注释) gdb调试:‘very much’ 后输入 ‘aaa’,‘tell me’ 后输入 ‘bbbbbbbbbbb······’。可以看到eax被写入了’aaa’,ecx被写入了’bbbbbbbbbbbbbbbbbbb····’ 然后就是第22行代码,看不懂就查汇编,对应的汇编是 call eax 。就是当eax是函数来调用。结合前面的eax会被覆写为输入值,就可以进行 ROP 。 攻击大致流程如下: eax被覆写为payload1 写入payload2 call eax