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의 패스워드를 얻을 수 있었다 = )

 






'WarGame > Hacker School FTZ' 카테고리의 다른 글

해커스쿨 Level17  (0) 2013.04.02
해커스쿨 Level16  (0) 2013.03.31
해커스쿨 Level15  (0) 2013.03.30
해커스쿨 Level14  (0) 2013.03.29
해커스쿨 Level13  (1) 2013.03.28
해커스쿨 Level12  (0) 2013.03.27

+ Recent posts

티스토리 툴바