栈溢出笔记-第六天
当时不明白为什么要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往后没做题。
考虑到长亭课程后续可能有堆的内容,答辩前,有时间看看堆的知识,先把堆的基础学习了。