例子
https://github.com/scwuaptx/HITCON-Training/tree/master/LAB/lab6
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int count = 1337 ;
int main(){
if(count != 1337)
exit(1);
count++;
char buf[40];
setvbuf(stdout,0,2,0);
puts("Try your best :");
read(0,buf,64);
return 0;
}
gcc -m32 -z relro -z now -fno-stack-protector -mpreferred-stack-boundary=2 -no-pie a.c -o a
之前方法的问题
buf只有40B,但是却read了64B,这里发生了栈溢出
实际测试得到offset=44,所以只有20B可以写exp
ret2text没有对应的函数
ret2shellcode有read函数,bss有写权限,可以read在bss中写入shellcode,然后write返回到bss,但是长度超过了24B
ret2libc:泄露地址什么的可以使用puts泄露地址,c