Hackershcool level11 = )

 

해커스쿨 FTZ 레벨11 [BOF]

 

 

 

 

Level 11로 로그인을 한 뒤 파일 목록을 보니 attackme라는 파일에 level12의 setuid가 걸려있는 것을 확인하고 hint파일을 열어보니 attackme의 소스를 확인할 수 있다.

setuid가 걸려있는 파일이 실행 중인 상태에서는 해당 파일의 소유자의 권한이 주어지므로 이를 이용해 level12의 쉘을 실행시킬 수 있다.

 

 

gdb를 이용하여 attackme 파일의 main함수 부분을 disassemble 해보면 다음과 같은 구조라는 것을 알 수 있다.

①번 코드를 살펴보면 ESP에 16진수로 108크기 만큼 Buffer 영역을 확보해주고 있다. 16진수 108은 10진수로 264이다.

버퍼의 크기는 264바이트이며 우리가 쓰레기 값으로 채워야하는 부분은 264바이트 + EBP 4바이트 = 268바이트가 된다.

 

이를 바탕으로 에그쉘을 가지고 공격을 해볼 수 있다.

 

 

우선 밑줄 친 부분을 살펴보면 크게 세 부분으로 나눌 수 있다.

첫 번째, attackme라는 프로그램의 실행

두 번째, attckme의 인자로 A라는 1바이트 문자 268개 전달

세 번째, Return Address에 들어갈 에그쉘의 주소 (①에서 나온 주소)

 

BOF 공격을 위해 에그쉘을 사용했는데 에그쉘이란 쉘코드를 입력할 공간이 적을 경우 환경변수에 올려서 사용하는 프로그램으로 Return Address의 주소로 에그쉘의 주소를 입력하게 되면 쉘이 실행된다.

에그쉘의 소스는 생략하며 환경변수에 올린 에그쉘의 주소를 얻어오기 위하여 getegg라는 프로그램을 작성하였다. getegg라는 파일을 실행시키면 ①과 같이 주소가 나오며 이 주소를 Return Address의 주소로 넣어준다.

 

<getegg.c의 소스>

 

에그쉘의 주소는 Little Endian방식이기 때문에 뒤에서부터 1byte단위로 끊어서 넣어주면 된다.

공격이 성공하면 Return Address에 들어간 에그쉘의 주소로 인해 쉘이 뜨게 되고 my-pass라는 명령어를 쳐보면 Level 12의 패스워드를 확인 할 수 있다. = )







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

해커스쿨 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
해커스쿨 Level11  (0) 2013.03.25

+ Recent posts

티스토리 툴바