보통 scanf("%d", &passcode1) 과 같이 받는다.
그런데 여기서는 &passcode1이 아닌 passcode1로 받았다.
이 의미는 scanf에서 입력한 값이 1234라면, 1234라는 값이 passcode1에 저장되어있던 쓰레기값에 해당하는 주소에 저장된다는 것이다.
그래서 아마 세그폴이 떴을 것이다.
gdb
name은 ebp-0x70에서부터 100바이트만큼을 차지하고,
passcode1은 ebp-0x10에서부터 4바이트, passcode2는 ebp-0xc에서부터 4바이트만큼을 차지한다.
name을 입력할 때 passcode1을 변조할 수 있다는 것을 알 수 있다.
그리고 scanf("%d", passcode1) 부분에서는 passcode1의 위치인 ebp-0x10에 담겨있는 값에 해당하는 위치에 값을 쓸 수 있는 것이다.
말이 좀 어렵지만..
여기서 fflush의 GOT을 확인한다. 0x804a004이다.
여기서 jmp 0x804a004를 실행하면 flag를 실행하도록 익스하면 된다.
134514147 = 0x080485e3
'워게임 > pwnable.kr' 카테고리의 다른 글
8번 - leg (0) | 2022.01.31 |
---|---|
6번 - random (0) | 2022.01.17 |
4번 - flag (0) | 2022.01.12 |
3번 - bof (0) | 2022.01.12 |
2번 - collision (0) | 2022.01.11 |
댓글