pwn ctfをして奇妙な状況を見つけました。
ctf にはバイナリとサーバーが含まれます。与えられたelf 64ビットがあります。
checksec 出力 (同じローカルおよびサーバー)
Arch: amd64-64-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX disabled
PIE: No PIE (0x400000)
RWX: Has RWX segments
ここでは、RWXセグメントはありますが、NXビットはありません。 gdb(local)を使用してプログラムを実行すると、唯一のセグメントRWXが私のスタックであることがわかります。
0x00000000401000 0x00000000000000 r-x [executable]
0x00000000602000 0x00000000001000 r-- [executable]
0x00000000603000 0x00000000002000 rw- [executable]
0x00000000624000 0x00000000000000 rw- [heap]
0x007ffff7d89000 0x00000000000000 rw-
0x007ffff7db1000 0x00000000000000 r-- [libc]
0x007ffffffff000 0x00000000000000 rwx [stack]
オーバーキルソリューションと同時にctfを完成させ、他の人のようにしたかどうかを調べるためにいくつかの記事を確認しました。
その後、他のセグメントをRWXセグメントとして使用している他の人を見て、自分のエクスプロイトを使用してサーバーの権限を確認しました。
00400000-00401000 r-xp 00000000 103:00 23593680 [executable]
00601000-00602000 r-xp 00001000 103:00 23593680 [executable]
00602000-00603000 rwxp 00002000 103:00 23593680 [executable]
00603000-00624000 rwxp 00000000 00:00 0 [heap]
7ffffffde000-7ffffffff000 rwxp 00000000 00:00 0 [stack]
私はバイナリに対してmd5sumを実行しましたが、それらは同じです。 readelfは、rwxセグメントがスタック(ローカルと同じ)であると言います。
どうやって?