본문 바로가기

system/writeup

2018 codegate superftp

superftp

2018 codegate superftp

sel의 값을 입력받고 switch문으로 들어가는데 case '1'이 아니라 case 1이어서 16진수로 '\x01'을 입력해야 한다.

 

회원 가입을 하면 chunk를 만들어 주는데 형태는 다음과 같이 id, pw, name, age가 24단위로 써진다. (string으로)

 

로그인 할 때 login_num을 증가시킨다.

 

id, pw를 입력받는 과정에서 stack overflow가 발생한다. (canary 존재)

 

user_download는 heap에 받지만 admin_download는 stack에 받는다.

 

A/B/../C 를 입력하면 A/C로 바뀐다. /../를 제거한 후 /를 찾아서 A/C를 만들어준다. ( 정말 모르겠어서 라업을 참조했다 )

엄청 긴 함수던데 푼사람들 다 게싱으로 했겠지..

 

위 취약점들을 토대로 짠 익스플로잇은 다음과 같다.

  1. name에 /a를 입력한 후 user_download_file('/../a') -> string class의 길이를 덮어 씌워 경로를 바꾸는 작업을 하는 도중에 생긴 unsortedbin의 main arena 와 heap주소 leak (tracemalloc을 통해 확인 가능)
  2. 로그인을 '\x2f'번 한다.
  3. admin_download_file() 함수를 이용하여 stack에 있는 '\x2f'까지 도달한 후 ret을 바꾼다. (거꾸로 흘러가서 바꾸기 때문에 canary 변조 X)

 

pie에 c++이라 분석에 제대로 집중을 못한 문제다.. 이제 좀 익숙해진 것 같아서 좋다


'system > writeup' 카테고리의 다른 글

2018 codegate zoo  (0) 2019.01.25
2018 codegate super marimo  (0) 2019.01.24
2018 codegate baskinrobins31  (0) 2019.01.22
2016 hitcon sleepyholder  (0) 2019.01.22
2016 hitcon secretholder  (0) 2019.01.22