동일한 바이너리와 다른 권한, 어떻게 가능합니까?

동일한 바이너리와 다른 권한, 어떻게 가능합니까?

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

어떻게 그래?

관련 정보