栈溢出笔记-第六天
当时不明白为什么要padding 8个a
原因:
IDA查看当前的rsp是0x38-0x30=0x8,原因看上面
在vul函数ret地方下断点,rbp=0x1,r12=write_got地址,r13=0x1,r14=write_got地址,r15=0x8,执行add rsp,0x38=>rsp就是0x7ffcb7fe4a68,栈提升了。
在执行另一个gadget,rdx=0x200,rsi=write表的地址,edi=0x1,执行 call qword ptr [r12 + rbx8]=>call write_got
执行完,打印出write表的地址。计算出execve地址
rbx给成0,是为了不跳进__libc_csu_init+80函数
在向下执行,ret继续返回到main,就是read函数向bss段写入系统调用地址和/bin/sh字符串,再次通过ROP执行
还有蒸米的,p64(0)=0x00000000和‘a'8一个意思
总结,ROP中只要对rsp栈顶指针有增加,就需要Padding想要大小的字符。
GOT表劫持看长亭的第一天PPT
Linux环境崩溃生成core文件以及调试
64位格式化字符串漏洞修改got表利用详解
GOT表劫持的文章
ret2_dl_runtime_resolve的文章
http://www.vuln.cn/6643
http://pwn4.fun/2016/11/09/Return-to-dl-resolve/
https://ctf-wiki.github.io/ctf-wiki/pwn/linux/stackoverflow/advanced-rop-zh/
UIUCTF pwn200 GoodLuck
相当于泄露栈内存内容:https://bbs.pediy.com/thread-258704.htm,农信银的Lucky_String跟这个题目类似。
hijack GOT
这题相当于覆盖任意地址内存, %8$s + puts_got 把后面第八个参数 puts_got 给读出来
hijack retaddr
https://ctf-wiki.github.io/ctf-wiki/pwn/linux/fmtstr/fmtstr_example-zh/#hijack-retaddr
https://bbs.pediy.com/thread-258704.htm
hijack GOT理解起来不难,hijack retaddr看的有点迷,尤其是下面这块怎么计算覆盖的地址。还得debug一下。
payload = "%2214u%12$hn"
payload += p64(ret_addr)
后面得准备答辩的事情,目前的进度:栈溢出高级部分:7往后的没看,还有蒸米的最后http://www.vuln.cn/6643后面也没看
格式字符串这里理解不深刻,7往后没做题。
考虑到长亭课程后续可能有堆的内容,答辩前,有时间看看堆的知识,先把堆的基础学习了。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
· 程序员转型AI:行业分析
· 重磅发布!DeepSeek 微调秘籍揭秘,一键解锁升级版全家桶,AI 玩家必备神器!