# 13+37 (Pwn)

Check file binary

![](https://490253784-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPUciVRKC9aAQtoyYpIe9%2Fuploads%2Fo74ggQrNtGEaRU7MKoDv%2Fimage.png?alt=media\&token=1fe8727c-7270-4fa0-9eb5-9c5e86c2adcc)

Decompile bằng IDA&#x20;

{% code lineNumbers="true" %}

```c
int __cdecl main(int argc, const char **argv, const char **envp)
{
  char s[32]; // [rsp+0h] [rbp-30h] BYREF
  int v5; // [rsp+20h] [rbp-10h]
  unsigned __int64 v6; // [rsp+28h] [rbp-8h]

  v6 = __readfsqword(0x28u);
  setvbuf(stdout, 0LL, 2, 0LL);
  setvbuf(stdin, 0LL, 2, 0LL);
  v5 = -889275714;
  printf("13+37 = ");
  fgets(fmt, 5, stdin);
  sprintf(s, fmt);
  if ( v5 != -889275714 )
  {
    puts("you are so 1337!!!");
    system("cat flag.txt");
  }
  return 0;
}
```

{% endcode %}

Bài này dính bug format string ở line 13, chỉ cần in nhiều hơn 32 kí tự vào biến s, biến v5 sẽ bị ghi đè (overflow).

Mình xài %35c để in 35 kí tự vào biến s.

![](https://490253784-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPUciVRKC9aAQtoyYpIe9%2Fuploads%2FFpEZskEObM9o94rHPtIE%2Fimage.png?alt=media\&token=5a13a879-ffe5-4995-80ab-8529556cb5a1)

Flag: `W1{13+37=?_th3_4nSw3r_l1e_1n_f0rm4t_str1ng}`
