본문으로 바로가기

pwnable.xyz / misalignment

category Wargame/pwnable.xyz 2020. 1. 13. 17:55
  *(_QWORD *)((char *)buf + 7) = 0xDEADBEEFLL;
  while ( (unsigned int)_isoc99_scanf("%ld %ld %ld", &x, &y, &n) == 3 && n <= 9 && n >= -7 )
  {
    buf[n + 6] = x + y;
    printf("Result: %ld\n"buf[n + 6]);
  }
  if ( *(_QWORD *)((char *)buf + 7) == 0xB000000B5LL )
    win();

 

buf+7 주소가 가리키는 8바이트 값이 0xB000000B5가 되면, system("cat /flag"); 를 실행하는 win 함수를 실행할 수 있다.

이해하기 쉽게 그림으로 표현하면 다음과 같다. (little endian에 주의해야 한다)

 

 

즉, buf[0] 에 0xB5FFFFFFFFFFFFFF, buf[1] 에 0xFF0000000B000000를 맞춰 넣으면 win 이 실행된다. (FF는 ?에 해당하는 바이트로, 다른 값으로 설정해도 문제가 없다.)

 

아래에서는 x+y=0xB500000000000000, n=-6x+y=0xB000000, n=-5 를 넣어 봤다.

 

 

 

Last update: 10/22/2020

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

pwnable.xyz / note  (0) 2020.01.13
pwnable.xyz / GrownUp  (0) 2020.01.13
pwnable.xyz / add  (0) 2020.01.13
pwnable.xyz / sub  (0) 2020.01.13
pwnable.xyz / Welcome  (0) 2020.01.13