介绍
DefconQuals2019,难题基本不会,做了几道简单的speedrun04、speedrun06
speedrun04
静态编译,而且strip了,所以可能找不到主函数。找一下字符串,看一下引用就能找到了。
程序很简单,读入长度,然后read读。
漏洞点在长度最多为257,而read所写的buffer只有256长,有一个字节的溢出。
这个溢出将会改掉rbp,所以ret之后栈的内容可以被我们控制。
因为有aslr,所以栈是随机的,改掉最后一位后,栈的位置也不能完全控制(把最后一位写成\x00可以控制栈往前移),所以我们rop的前面需要padding一部分。(脚本见最后)
speedrun06
程序很简单,读入shellcode后直接运行,但是会对你的shellcode进行一定的处理。
首先会会在前面加一段code,清空除rip外的寄存器;其次会在0x5、0xa、0x14、0x1d这四个位置插入一个0xcc也就是int3。
利用方式,对于寄存器清零,我们可以直接调用syscal,这样rcx会被置为rip;其次对于0xcc,我们选择用jmp跳过去(开gdb的时候你会发现0xcc没影响,不要被它隔断shellcode就好,但是一打远程就会发现会在0xcc处断掉,所以必须jmp过去)(脚本见最后)
脚本
1 | #!/usr/bin/env python2 |
1 | #!/usr/bin/env python2 |