CTFSHOW 萌新赛 签到题
1.题目下载地址
2. checksec检查保护

堆不可执行
3.IDA分析

看到了gets()函数,很明显存在溢出
需要知道64位系统和32位系统的区别
64 位系统传参从第一个到第六个依次保存在rdi,rsi,rdx,rcx,r8,r9
从第7个参数开始,接下来的所有参数都才通过栈传递
4.构造ROP链
我们需要找到合适的 gadgets,利用 ROPgadget

addr_rdi=0x400793
addr_ret=0x40053e
- 构造 payload 利用 puts 函数泄漏真实地址(plt 表和 got 表的延迟绑定机制)
- 然后算出基址 libcbase,并劫持程序回到主函数以便再次利用
- 用泄露的地址查出 libc 版本,利用 libc 和 libcbase 算出 system() 和 /bin/sh 真实地址
- 构造 payload getshell

看一下src的大小是0x70
栈的字节对齐(32 位 8 字节对齐,64 位 16 字节对齐,这样对齐的目的是提高效率)
参见x86_64 Linux 运行时栈的字节对齐
对齐只需要在跳转前面来一次空的 ret
4.exp
#-*- coding: utf-8 -*-
fro

最低0.47元/天 解锁文章
2163

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



