Studying Security

[HackCTF] pwnable: Offset 풀이 본문

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 함수

  1. [ebp-0xc]의 1byte를 덮어쓸 수 있음
  2. two함수와 print_flag함수가 1byte만 다름

Little Endian이기 때문에 1byte를 바꿔서 two함수를 print_flag함수로 바꿀 수 있음

※ PIE가 설정되어 있어서 code영역의 주소가 바뀌지만 하위 12bit는 안 바뀌는 것을 볼 수 있음

Exploit code

Result

 

반응형
Comments