Full RELRO, Canary, NX, PIE가 걸려있는 64bit 바이너리이다.

그냥 실행시켜봤을 때는 뭘 어떻게 하라는건지도 잘 모르겠다.

 

[main]

__int64 __fastcall main(__int64 a1, char **a2, char **a3)
{
  int v4; // [rsp+0h] [rbp-18h]
  int v5; // [rsp+4h] [rbp-14h]
  unsigned __int64 v6; // [rsp+8h] [rbp-10h]

  v6 = __readfsqword(0x28u);
  sub_A3E();
  v4 = 0;
  v5 = 0;
  _printf_chk(1LL, "1337 input: ");
  _isoc99_scanf("%u %u", &v4, &v5);
  if ( v4 <= 4918 && v5 <= 4918 )
  {
    if ( v4 - v5 == 4919 )
      system("cat /flag");
  }
  else
  {
    puts("Sowwy");
  }
  return 0LL;
}

sub_A3E는 그냥 기본 세팅을 해주는 함수이고 그 뒤부터 보면 v4와 v5에 각각 정수를 입력해준다.

이 때 v4와 v5는 모두 4918 이하여야 한다. 그 후 v4 - v5가 4919라면 system("cat /flag")를 실행시켜준다.

 

v4와 v5는 4918이하여야 하므로 일반적으로 생각했을 때 둘의 차가 4919가 나올 수 없지만 v4와 v5는 int이기 때문에 음수 저장이 가능하다. 그러므로 v4에 "-1"을 넣고 v5에 "-4920"을 넣으면 v4 - v5 = 4919가 되는 매우 간단한 문제이다.

 

'pwnable > pwnable.xyz' 카테고리의 다른 글

[pwnable.xyz] note  (0) 2020.05.08
[pwnable.xyz] GrowUp  (0) 2020.04.25
[pwnable.xyz] misalignment  (0) 2020.04.17
[pwnable.xyz] add  (0) 2020.04.16
[pwnable.xyz] Welcome  (0) 2020.04.11

+ Recent posts