当前位置:首页|资讯

【pwn11 2022ciscn 华南赛区printf_hhh】

作者:K3yB0ard发布时间:2024-09-27

一道2022国赛华南赛区的格式化字符串题。

首先看一下保护

checksec

程序没有canary。

看一下程序逻辑:

main

函数很简单,只有一个main。

程序提供两个选项对应两个输出函数,分别为printf和__printf_chk。均有格式化字符串漏洞。两者不同之处在于__printf_chk对格式化字符串的任意地址写%x$n这种有保护,x$必须是连着的即想要用%4$n必须先用%3$n。且注意到,__printf_chk输出一次之后会关闭标准输出,即我们只有一次泄露信息的机会。且printf调用完会直接exit。

看到这其实有一个基本思路了,首先__printf_chk肯定是给我们一次机会泄露信息用的。

然后一次printf用于getshell,要不然程序直接exit了就没有后续了。

攻击思路如下:

1、利用一次__printf_chk同时泄露栈地址和libc地址

2、一次printf向printf的返回地址写入ogg直接getshell

完整攻击脚本如下:

程序执行结果如下:

exp result

成功getshell。值得注意的是因为之前的__printf_chk调用完关闭了程序的标准输出,则我们拿到shell之后通过exec 1>&2将其重定向即可恢复输出。然后直接cat flag即可。

【笔者在打栈之前也尝试了exit_hook,但是没有劫持成功,知道什么原因的师傅也可在评论区解释下或跟我私聊】

By  Del0n1x

Keyboard


Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1