*(_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=-6
과 x+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 |