我在做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(本地)运行程序时,我可以看到唯一的段是 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 是堆栈(与本地一样)。
怎么会这样?