GKCTF-2021-checkin
目录
总结
根据本题,学习与收获有:
- 如果程序的栈溢出只覆盖到
rbp
,那么大概率也是考栈迁移,只是刚好当前函数结束后会执行依次leave; ret
,然后上层函数还有一次leave; ret
- 合理利用程序中的
gadgets
,比如call puts
指令等。劫持了rdi
之后衔接一个call puts
,即可泄露地址
题目分析
checksec
函数分析
vuln
这个哈希函数是怎么看出来的呢?一半靠经验,一般靠猜
md5_hash
经验:
猜测某个字符的md5
为:
这里需要转换一下字节序,后来一试,就是admin
,也就是说user=admin passwd=admin
利用过程
-
第一次栈迁移
需要注意的是,迁移后的栈只有
0x18
个字节的操作空间,如果执行个pop rdi; ret | rdi_value
,就只剩返回地址了。这个时候可以利用:刚好可以泄露地址,又可以执行第二遍栈迁移
-
第二次栈迁移,此时的栈已经在
data
段上了,那么直接上one_gadget
肯定可以滿足条件,因为$sp+0x70
之类的,大概率是0
。此时需要注意的是,由于栈迁移到了data
上,所以构造payload
也需要格外注意一下,可以调试着去构造payload
exp
|
|
泄露地址与第一次栈迁移:
拿到shell
:
引用与参考
1、My Blog
2、Ctf Wiki
3、pwncli
Buy me a coffee~
支付宝
微信