[어설픈] 해커스쿨 FTZ level 12 문제풀이

2019. 1. 24. 23:34System Hacking/FTZ

안녕하세요! 

오늘은 

ftz level 12를

풀어보겠습니다!


문제의 소스코드는 

아래와 같습니다!


char type의 크기 256의 배열 str

(real effective)uid를 3093으로 세팅하죠?

쉘에 id level13하면 

3093이라고 뜰거에요!

즉 level 13권한으로 상승 시켜준다는 말이죠 ㅎ


그리고 printf로 "문장을 입력하세요" 출력!

그 다음에 gets로 저희로 부터 입력을 받네요!

그걸 str에 저장하죠!


근데 여기서 gets가 얼마만큼 받을지 

크기를 설정하지 않아서 취약하죠!


그리고 마지막엔 저희가 입력한 

문자열 출력하고 함수가 끝납니다!


근데 생각해보니

저희가 직전에 푼 

level11과 차이점이

딱 하나인거 같은데요?


level11은 argv 방식으로

입력을 받았고


level12는 argv가 아니라

프로그램이 먼저 실행되고

입력 함수가 실행되야

입력받는!


즉 level 11와 동일하게 풀되,

입력방식만 바꿔주면 된다는

이야기겠죠?


ldd로 라이브러리 확인해줍니다~

두 번 입력한 이유는 

혹시 이번에는 라이브러리에 

ASLR 걸려있나해서요!

근데 안걸려 있네요!



level 11에서 했듯이

nm으로 라이브러리에서 함수들 

다 불러와서 그중에 grep으로 system 찾기!

여기도 level 11에서 했듯이

strings으로 라이브러리에서 

출력 가능한 문자열들 호출하고


옵션으로 그 문자열의 위치도 표현해!

라고 -tx로 설정해주고


모든 문자열중에 grep으로

/bin/sh 찾아!

(더욱 자세한 설명은 level 11풀이에 있습니다) 


근데 level11에서의 system 함수, /bin/sh 위치가

똑같네요!


그리고 gdb로 

얼만큼 실제로 할당됐는지 

확인했는데 

0x108 =264

이것마저 level 11과 똑같네요!


그래서 저희가 원하는 거 

다 찾았죠?


그래서 아래와 같이 일단 깔끔하게

개요를 그려봤습니다!


첫 줄은 이해시켜 드리려고 

모든 걸 상세하게 풀어 놓은거고

두 번째 줄은 저희가 exploit하기 위해서

결국에 어떻게 짜야하는지 

적어 놓았습니다!



그래서 실제 exploit 코드를 보면

1. a를 268개 넣고 그 뒤에

 2. system함수 주소 넣고(little endian)

3. 그 뒤에 system 함수의 리턴 주소에 aaaa넣고(어차피 쉘 띄우면 exploit 끝이라 상관 없음)

4. 그 뒤에 /bin/sh의 주소 값을 넣었습니다


그리고 이 값을 ./attackme의 input으로 넣고

실행했는데!


안되네요......

틀릴 리가 없는데...



인터넷에 가서 찾아보니까 

저희가 제대로 input 값을 주려면

(python -c '공격구문';cat)| ./attackme

;cat을 붙이라고 하더라구요!


그랬더니 아래와 같이 바로

문제가 풀렸습니다!


고생하셨습니다!