티스토리 뷰

Tech

해커스쿨 Level12

pwnbit 2013. 3. 27. 02:04
반응형

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

 

 

 






반응형

'Tech' 카테고리의 다른 글

해커스쿨 Level14  (2104) 2013.03.29
해커스쿨 Level13  (403) 2013.03.28
에그쉘 소스(Eggshell code)  (780) 2013.03.26
해커스쿨 Level11  (977) 2013.03.25
보호나라 3.20 악성코드 전용 무료 프로그램  (1093) 2013.03.21
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
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
글 보관함
300x250