티스토리 뷰
Hackershcool level16 = )
해커스쿨 FTZ 레벨16 [BOF]
코드를 살펴보면 일단 쉘을 실행하는 함수와 printit이라는 함수가 있고 크기가 20인 배열과 취약점이 있는 fgets함수가 있다.
프로그램을 실행시켜보니 깔끔하게 printit함수를 출력시키고 끝나버린다. 하지만 printit함수가 아닌 shell함수의 주소가 들어간다면 쉘이 떨어지게 될 것이다.
메인함수에서는 아까와 같이 56byte의 공간을 할당해주고 있으며 ebp-16지점에서 eax에 값을 넣는 것을 볼 수 있는데 eax의 값에서 어떤 함수를 call해주고 있는 것을 볼 수 있다. 어떤 함수인지 알아보기 위해 main+39에 브레이크포인트를 걸고 eax의 값을 확인해보았다.
eax의 값은 0x8048500 주소에 있는 함수를 불러오는 것을 알 수 있다. 하지만 이미 프로그램 소스를 보았으니 이 코드는 printit함수라는 것을 추측할 수 있다.
확인해보기 위하여 printit함수를 disas 시켜보니 역시 printit함수가 맞았고 이 주소 대신 shell함수의 주소를 넘겨줘야하므로 shell함수의 시작 주소도 확인해보았다.
Shell함수의 주소는 0x080484d0라는 것을 알 수 있고 이 값을 이제 ebp-16에 넣어주면 프로그램은 printit함수 대신 shell함수를 call 할 것이다. 따라서 다음과 같은 코드로 공격해보았다.
그 결과 성공적으로 쉘과 Level17의 패스워드를 얻을 수 있었다 = )
'Tech' 카테고리의 다른 글
Sublime Text2 설치 (1839) | 2013.08.05 |
---|---|
해커스쿨 Level17 (1347) | 2013.04.02 |
해커스쿨 Level15 (648) | 2013.03.30 |
해커스쿨 Level14 (2104) | 2013.03.29 |
해커스쿨 Level13 (403) | 2013.03.28 |
- Total
- Today
- Yesterday
- TISTORY
- Sublime Text 2
- FTZ
- 티스토리
- CK Exploit Kit
- 사이버테러
- 웨일브라우저
- exploit
- writeup
- CODEGATE 2014
- 분석
- 개발
- 악성코드
- 스크립트
- 파이썬
- BOF
- 프로그래밍
- Wargame
- DoH
- 문제풀이
- 웹
- www
- 프로그래밍 언어
- DNSOverHTTPS
- 자바스크립트
- hackerschool
- 해커스쿨
- network
- python
- CloudFlare
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |