1. auStack.7_8_을 0xdeadbeef으로 초기화
2. 3개의 부호없는 정수를 받는다(%ld, long double)
3. 마지막 인자 * 8 + 48로 하는 auStack.7_8 배열의 인덱스에 첫번째와 두번째 인자 값을 더함
4. 만약 auStack.7_8_이 0xb000000b5면 win함수 실행(flag을 보여줌)
저 dedf 부분의 값을 바꿔야함
111 222 -5를 했을때 0xdeadbeef 위치에 덮인다. 하지만 마지막 ef때문에 한번에 덮어지지는 않는다.
때문에 두번에 나눠서 덮어야함
0xB000000B5 -> 0xB00000000과 0xB5로 나눌수 있음 하지만 ef때문에 다음 메모리 주소에서 침범하여 덮어야함
그래서 0xB500000000000000을 쓰고 0xB000000를 덮는다면 가능할 거 같음
0xB500000000000000 = -5404319552844595200
0xb000000= 184549376
처음 0xB500000000000000을 썼을때(인덱스 -6) 두번째 0xb000000을 썼을때(인덱스 -5)
from pwn import * p = remote('svc.pwnable.xyz', 30003) p.sendline('-5404319552844595200 0 -6') p.sendline('184549376 0 -5') p.interactive()
pwnable.xyz - misalignment
Decompile
1. auStack.7_8_을 0xdeadbeef으로 초기화
2. 3개의 부호없는 정수를 받는다(%ld, long double)
3. 마지막 인자 * 8 + 48로 하는 auStack.7_8 배열의 인덱스에 첫번째와 두번째 인자 값을 더함
4. 만약 auStack.7_8_이 0xb000000b5면 win함수 실행(flag을 보여줌)
111 222 -5를 했을때 0xdeadbeef 위치에 덮인다. 하지만 마지막 ef때문에 한번에 덮어지지는 않는다.
때문에 두번에 나눠서 덮어야함
0xB000000B5 -> 0xB00000000과 0xB5로 나눌수 있음 하지만 ef때문에 다음 메모리 주소에서 침범하여 덮어야함
그래서 0xB500000000000000을 쓰고 0xB000000를 덮는다면 가능할 거 같음
0xB500000000000000 = -5404319552844595200
0xb000000= 184549376
Exploit Code
'pwnable.xyz' 카테고리의 다른 글