해킹/시스템 - 10

  1. nebula_level02 2015.10.28
  2. nebula_level01 2015.10.28

nebula_level02

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

nebula_level02 포스팅입니다.


당연히 먼저 flag02를 실행시켜봤습니다.

무슨 명령어를 실행해서 이런 출력이 나왔다고까지 친절하게 알려주시네요

gdb로 열어보겠습니다.




함수호출 위주로 살펴보니 getenv함수와 asprintf함수가 연속으로 실행되는것이 눈에 띕니다.

asprintf함수는 문자열을 세팅해 주는 함수이고.. 상수로 보이는 0x80486b5에는 세팅될 문자열의 폼, 그 뒤인 esp+0x8 부분에 무언가 들어있겠군요.

일단 +122부분까지 실행시킨 후에 해당 스텍에 무엇이 들어있나 확인해 보겠습니다.





0xbfc46991이라는 주소가 들어있고 예상대로 해당 주소에는 level02가 들어있습니다. getenv함수가 반환되면서 eax를 통해 esp+0x8에 level2문자열이 있는 주소가 들어간 것으로 보입니다.




getenv에 인자로 들어가는 상수의 주소 0x80486b0을 보니 USER라는 문자열이 보입니다. level02는 USER환경변수에서 얻어와서 들어간 것이군요.



앞에 echo명령어에 인자값으로 들어가는 것을 방지하기 위해 tset;로 명령을 끝내주고 /bin/sh를 실행시켜야 합니다.

위와 같이 USER 환경변수를 세팅해주고 flag02를 다시 실행시키니 성공적으로 쉘이 떴습니다.


끝-









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

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_level01  (0) 2015.10.28
Tags
Social

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