题干:VDSO attack
纯汇编编写,栈溢出调用系统BPI
本题只有一个符号表,没有使用libc中的函数,题目开始使用的系统调用写入0x400数据到v1,但是v1只有0x10大小,所以存在栈溢出漏洞,由于没有libc,所以无法使用普通ROP构造链条,这里只能打系统信号机制,系统调用中read返回给rax输入的个数,系统调用号15(64位)32位是77,会触发Sigreturn,把栈上的数据返回给寄存器。系统在执行sigreturn系统调用的时候,不会对signa做检查,它不知道当前这个frame是不是之前保存的哪个frame。由于sigreturn会从用户栈上恢复所有寄存器的值,而用户栈是保存在用户进程的地址空间中的,是用户进程可读写的。如果攻击者可以控制栈,也就控制了所有寄存器的值,而这一切只需要一个gadget:“syscall;retn”,并且该gadget的地址在一些较老的系统上是没有随机化的,通常可以在vsyscall中找到,地址为0xffffffffff600000。如果是32位linux,则可以寻找int 80 指令,通常可以在vDSO中找到,但是这个地址可能是随机的
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课