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 세그먼트가 스택(로컬과 동일)이라고 말합니다.
어떻게 그래?