nebula_level01

해킹/시스템 2015. 10. 28. 17:12

nebula_level01 포스팅입니다.

nebula는 ftz와 다르게 레벨을 깨서 다음 레벨의 패스워드를 알아내는 구조는 아니더군요.

level01에 해당하는 flag01이라는 계정이 따로 있고 해당 계정의 쉘을 띄우면 통과한걸로 치는 구조입니다.

레벨은 건너뛰어서 복습을 하고 싶을 때 플래그를 저장해두거나 다시 처음부터 올라갈 필요가 없으니 합리적인 구조라고 생각합니다.




먼저 level01/level01로 로그인을 한 뒤 flag01의 디렉토리를 살펴봤습니다.

flag01이라는 프로그램이 존재하고 실행시키니 "어쩌라고?"를 뱉어냅니다.




gdb로 열어본 모습입니다. 역시나 uid와 gid를 적절히 만져준 후 system함수를 호출하여 실행시켜주는 전형적인 모습입니다. system 함수로 들어가는 인자가 무엇인지 살펴봅시다. 인자로는 0x80485e0주소에 있는 값이 들어가는군요




알아보기 힘드니 문자열로 나타내봤습니다.




뒷쪽은 무시하고.. /usr/bin/env echo and what?을 출력하도록 되어있습니다. 환경변수에서 echo의 패스를 찾아 실행시키면 echo의 원래 기능에 따라서 and what? 이 화면에 출력되도록 하는 구조입니다.

그럼 echo명령이 다른 기능을 수행하도록 수정해 주면 되겠네요.


////////////////////////////////////////////////////////////////////////////////////////////////////////////////

그런데 프로그램의 경로는 시스템 환경에 따라 달라질 수 있습니다. 그때 사용하는 것이 "env" 입니다.
"#!/usr/bin/env + 언어" 식으로 입력하는 방법이 있습니다.//출처: http://blog.gaerae.com/2015/10/what-is-the-preferred-bash-shebang.html


PATH에 대해...

사용자가 전체 경로를 사용하여 명령을 실행할 때 셸이 해당 경로를 사용하여 명령을 찾습니다. 그러나 사용자가 명령 이름만 지정하면 셸이 PATH 변수로 지정된 순서대로 명령의 디렉토리를 검색합니다. 디렉토리 중 하나에서 명령을 찾으면 셸이 명령을 실행합니다.//출처:https://docs.oracle.com/cd/E56343_01/html/E53832/userconcept-39855.html

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////


벌써 이부분부터 개념이 헷갈려 찾아보았습니다...ㅋㅋ

usr/bin/env 명령어는 명령어를 PATH에서 먼저 찾겠다는 뜻이고 PATH는 저런 역할을 한다고 합니다.

우선 그러면 마음껏 수정할 수 있는 /tmp 디렉토리에 쉘을 띄우는 프로그램을 echo라는 이름으로 만들고 PATH에 /tmp를 넣어주면 될 것 같습니다.



system("/bin/sh")라는 한줄짜리 echo 프로그램을 만든 후...


PATH에 /tmp를 추가해줍니다.




그리고 다시 flag01을 실행시키면 쉘이 뜨고 getflag를 하면 성공 메세지가 나옵니다.


끝-


'해킹 > 시스템' 카테고리의 다른 글

nebula_level06  (1) 2015.11.04
nelbula_level05  (1) 2015.10.29
nebula_level04  (0) 2015.10.28
nebula_level03  (0) 2015.10.28
nebula_level02  (0) 2015.10.28
Tags
Social