2019. 1. 24. 23:34ㆍSystem 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을 붙이라고 하더라구요!
그랬더니 아래와 같이 바로
문제가 풀렸습니다!
고생하셨습니다!
'System Hacking > FTZ' 카테고리의 다른 글
[어설픈] 해커스쿨 FTZ level 14문제풀이 (0) | 2019.01.31 |
---|---|
[어설픈] FTZ 해커스쿨 Level 13문제풀이 (0) | 2019.01.28 |
[어설픈] 해커스쿨 FTZ level 11 문제풀이 (0) | 2019.01.22 |
[어설픈] 해커스쿨 FTZ Level 10 문제풀이 (0) | 2019.01.21 |
[어설픈] 해커스쿨 FTZ level9 문제풀이 (0) | 2019.01.20 |