|
*(_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 |