Hackershcool level12 = )

 

해커스쿨 FTZ 레벨12 [BOF]

 

 

 

Level 12문제도 Level11처럼 hint를 보면 setreuid함수와 gets함수로 문자열을 입력받는 것을 볼 수 있다.

12번 문제도 11번처럼 gdb로 disas main해본 결과 다음과 같았다.

 

 

①을 보면 11번 문제와 마찬가지로 스택에 16진수로 108만큼 공간을 할당 해주는 것을 볼 수 있다. 역시 10진수로 바꾸면 264바이트가 된다. 이후는 11번 문제와 같이 264바이트 + ebp 4바이트 = 268바이트를 쓰레기 값으로 채워주고 Return Address를 에그쉘의 주소로 넘겨주면 된다. 따라서 이전과 같이 공격을 해보았다.

 

 

공격한 방법이 효과가 없었으며 11번과 달리 gets로 입력받으므로 인자 전달방식을 바꿔야겠다고 생각됬고 | (Pipe)를 사용해봤다.

 

 

하지만 쉘을 얻지 못했고 나름대로의 원인과 해결법을 찾아보았다.

① Pipe는 왼쪽의 표준 출력을 오른쪽의 표준입력으로 전달한다.

② 표준입력을 지원하는 명령어인 cat을 Perl문과 같이 사용하기 위해 ‘;’으로 명령어 구분

③ '`'(Back quote)로 묶인 문자열은 명령어로 인식한다.

 

위 사진에서처럼 공격을 한다면 attackme는 제대로된 표준입력을 받지 못하기 때문에 cat 명령어를 붙여주며 이를 위해 ‘;’를 사용하여 명령어를 나눠준다. 하지만 Back quote로 묶어준다면 ';cat'자체를 명령어로 인식하여 제대로 실행하지 못하기 때문에 ‘()’를 사용하여 하나로 묶어주고 Pipe를 통해 attackme로 넘겨준다.

따라서 제대로 된 코드를 쓰면 다음과 같이 쉘이 떨어지고 Level13의 패스워드를 얻을 수 있다.

 

 

 






'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

티스토리 툴바