Wargame/HackCTF
[HackCTF] pwnable: Offset 풀이
J4guar
2022. 4. 8. 07:30
728x90
반응형
Mitigation
Vulnerability Analysis
main함수 → gets를 통해 [ebp-0x27]에 입력을 받고 select_func의 인자로 전달
select_func 함수
[ebp+0x8] (main함수에서 gets를 통해 입력 받았던 입력 값)을 [ebp-0x2a]에 0x1f size만큼 복사
[ebp-0x2a]와 [ebx-0x1675]를 비교 → True: [ebx-0x1864]의 함수 call = one함수
False: 초기에 설정된 [ebp-0x190b]의 함수 call = two함수
여기까지 살펴보면 [ebp-0x2a]에 0x1f size만큼 복사할 때
[ebp-0xc]의 1byte를 덮어쓸 수 있다는 사실을 알 수 있음
초기 [ebp-0xc] = [ebp-0x190b] = two 함수
- [ebp-0xc]의 1byte를 덮어쓸 수 있음
- two함수와 print_flag함수가 1byte만 다름
Little Endian이기 때문에 1byte를 바꿔서 two함수를 print_flag함수로 바꿀 수 있음
※ PIE가 설정되어 있어서 code영역의 주소가 바뀌지만 하위 12bit는 안 바뀌는 것을 볼 수 있음
Exploit code
Result
반응형