728x90



의무적으로 hint를 열어 보니 소스 코드가 나온다.


buf에 40바이트만큼 표준입력으로부터 읽어드린 뒤


buf2와 "go"가 같으면 uid를 변경하여 bash쉘을 실행한다.



3010은 /etc/passwd파일을 보면 level10의 uid인 것을 알 수 있다.


buf는 buf2보다 코드 상에서 늦게 정의 되었으므로 실제 메모리 stack에서 buf2보다 낮은 주소에 위치하게 될 것이다.


fgets()에서 40바이트를 읽어서 buf에 저장한다. buf는 10byte이기 때문에 10보다 큰 데이터를 입력할 경우 overflow가 일어난다.


처음에 10바이트 입력후 overflow가 일어나는 줄 알았지만 찾아보니 쓰레기값이 있다고 한다.


실제 메모리에는 이렇게 들어있다.


##########메모리###############

낮은 주소

---------------------

|           1           |

|           1           |

|           1           |

|           1           |    ----> bof[10] (linux는 메모리가 4바이트씩 할당되어 12byte다.)

|           1           |

|           1           |

|           1           |

|           1           |

|           1           |

|           1           |

---------------------

|                       |

|       쓰레기         |

|                       |

|                       |

---------------------

|           g          |      -> 우리의 목표

|           o          |

|                       |

|                       |    ----> bof2[10] (역시 12byte다.)

|                       |

|                       |

|                       |

|                       |

|                       |

|                       |

---------------------

|                       |

|      쓰레기          |

|                       |

|                       |

---------------------

|                       |

|       쓰레기         |

|                       |

|                       |

---------------------  ----------------> ebp

|                       |

|        sfp           |

|                       |

|                       |

---------------------  

|                       |

|                       |

|        ret            |

|                       |

---------------------

높은 주소

################################



1을 16개와 go 를 입력하여 overflow가 일어났다.


Good Skill! 과 함께 level10의 쉘을 얻었다. my-pass 하면 끝.



gdb로 까 보면 (level10 권한 필요) buf (ebp-40)와 buf2 (ebp-24) 가 정확히 16 byte 차이가 난다.


## 기본적으로 gdb는 AT&T문법이므로 intel문법으로 변경하고 싶으면

## (gdb) set disassembly-flavor intel 라고 치자.

728x90

'ctf + wargame > 해커스쿨ftz' 카테고리의 다른 글

[ftz] level11  (0) 2015.09.20
[ftz] level10  (0) 2015.09.18
[ftz] level8  (0) 2015.09.18
[ftz] level7  (0) 2015.09.17
[ftz] level6  (0) 2015.09.17

+ Recent posts