분류 전체보기 - 148

  1. nebula_level06 1 2015.11.04
  2. nelbula_level05 1 2015.10.29
  3. nebula_level04 2015.10.28
  4. nebula_level03 2015.10.28
  5. nebula_level02 2015.10.28
  6. nebula_level01 2015.10.28
  7. incognito - insideout 2015.10.21
  8. dll injection 추가 2015.07.25

nebula_level06

해킹/시스템 2015. 11. 4. 16:19

nebula_level06 포스팅입니다.


포스팅이 계속 쳐지네요.. 시험 끝나고도 과제가 끊임없이 나와서..ㅋㅋ

열심히 해도 모자랄 판인데 뭔가 할게 너무 많으니 오히려 의욕이 사라지는 듯 합니다.

우선 오늘은 전에 풀었던 nebula06 포스팅 정도만 올리고 과제 마치는 대로 슬슬 속도 붙여 보겠습니다.


flag06폴더에는 아무것도 없습니다.

힌트는 flag06이 /etc/passwd에 암호화된 패스워드를 저장하는 구버전의 패스워드를 사용하고 있다는 것입니다.



먼저 passwd파일에 flag06의 비밀번호가 암호화 되어 저장된 것을 확인합니다.


wget 으로 존더리퍼를 받아서 압축을 풀어줍니다.





src폴더에서 make clean generic 명령어로 설치하고 돌리니 flag06의 패스워드를 hello로 크랙해 줬습니다.

flag06으로 접속해서 패스워드 hello를 입력해 주면 끝!



ps. 존더리퍼가 생각보다 굉장히 까다로운 툴이더군요 지금도 돌리면 나오다 안나오다 합니다.

설치 환경이나 패스워드 덤프의 상태 등등.... 여러가지 환경적인 요인이 영향을 미치는 것 같은데

이것때문에 참 많이 헤맸습니다 윈도우로 옮겨서도 테스트 해보고... 다른 리눅스에서도 해보고 명령어도 이것저것 웹에 있는건 거진 다 입력해본 것 같네요...ㅜㅜ 이때 힘이 다 빠져서 진도가 늦어지는 감도 있습니다...

너무 게으르다고 생각하지 않아주셨으면...ㅠ


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

nebula_level09  (0) 2015.11.07
nebula_level08  (0) 2015.11.06
nelbula_level05  (1) 2015.10.29
nebula_level04  (0) 2015.10.28
nebula_level03  (0) 2015.10.28
Tags
Social

nelbula_level05

해킹/시스템 2015. 10. 29. 00:25

nebula_level05 포스팅입니다.



flag05 폴더로 가보니 숨김파일밖에 없습니다. 하지만 파란색 글씨로 표시되는 것들은 다른 폴더에는 없는 것 들 입니다.


.ssh폴더는 ssh연결에 필요한 인증키와 rsa에 쓰이는 공개키, 비밀키 같은 것이 있고, 인증된 상대의 퍼블릭 키를 저장해서 자동으로 로그인 시켜주는 기능도 있습니다.


제가 이걸 어떻게 아느냐하면 nebula 처음 세팅할 때 분명 ssh포트가 열려있는데 일치하는 key 알고리즘을 찾을수 없다며 xshell이 계속 연결을 못하더군요.... 한동안 이걸 고치겠다고 .ssh폴더와 씨름을 했댔습니다.

삽질이라고 생각했는데 이런식으로 도움이 될 줄은 몰랐네요.

여담이지만 아직 그문제 못고쳤습니다...ㅂㄷㅂㄷ;;; xshell-개인우분투-nebula로 접속해서 쓰는중.. nebula 접속 프로그램을 우분투 안에 만들어서 나름 편하게 하고 잇습니다.



음 아쉽게도 .ssh폴더에는 접근 권한이 없네요

.backup 폴더부터 살펴보겠습니다.




매우 수상한 압축파일이 보여 미리 생성해둔 /tmp/flag05 폴더에 압축을 풀어봤습니다. -C 옵션 찾느라 한참 걸렸네요 -c 아니고 -C입니다..

기존 폴더에 그대로 풀면 권한문제가 생기니 다른 폴더에 넣어야 합니다.

압축을 푼 파일들의 목록을 보니 .ssh폴더에 있던 내용인 것 같네요.


압축을 푼 곳에는 아예 .ssh폴더가 하나 있었습니다. 사실 보통의 경우라면 이것만으로 권한을 얻을 수 있을 것 같지는 않습니다. authorized_keys에 들어있는 공개키를 자신의 공개키인 것 처럼 속인다고 해도 자신의 비밀키와 쌍이 맞지 않을테니까요.

하지만 이것들을 훑어보다가 신기한걸 발견했습니다.




캡쳐에 나온것 처럼 이 .ssh안의 authorized_key와 id_rsa.pub은 같은 값이 들어있습니다. 그말인 즉슨 flag05의 authorized_key가 자신의 공개키와 같으므로 그에 대응하는 비밀키도 자신의 비밀키일 거라는 것입니다.


그렇다면 제가 할일은 그냥 level05 폴더안에 원래 .ssh를 지우고 이거를 집어넣으면 됩니다. 정확히는 flag05의 authorized_key와 그에 대응하는 비밀키를 알았으니 id_rsa.pub와 id_rsa를 각각에 해당하는 값으로 바꿔주면 될겁니다.





backup 안에 있던 ssh폴더를 level05로 옮겨주었습니다. 이제 level05에서 flag05로 ssh 연결을 시도해 보겠습니다.




예상대로 비밀번호 인증 없이 flag05로 로그인 되었고 플래그를 띄우는데 성공했습니다!


끝-



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

nebula_level08  (0) 2015.11.06
nebula_level06  (1) 2015.11.04
nebula_level04  (0) 2015.10.28
nebula_level03  (0) 2015.10.28
nebula_level02  (0) 2015.10.28
Tags
Social

nebula_level04

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

nebula_level04 포스팅입니다.



flag04 프로그램과 token이 들어있습니다. 그냥 실행시키려니 읽을 파일을 달라길래 token을 줘봤습니다.

뱉어버리네요. 역시 이렇게 간단할리가 없습니다.

그럼 gdb로 flag04를 열어서 차분히 보려 했으나...




//출처:https://www.mattandreko.com/2011/12/05/exploit-exercises-nebula-04/


자! 드디어 어셈분석에 한계를 느껴서 코드를 업어왔습니다. 이거 원래는 nebula 공홈이나 어딘가에 힌트로 있어야 하는 것 같습니다. 제가 치팅하는게 아닙니다... 아닐겁니다.

여담이지만 wirte-up 보기 싫어서 꺼내서 디컴파일할까도 생각을 해봤는데 권한문제때문에 바이너리를 가지고 나가는 것도 안되더군요..



아무튼 뭐 코드를 보니 argv로 token의 경로를 받아서 읽어주는 프로그램이군요. 아이러니한 점은 2번째 if문에서 인자값에 "token"문자열이 들어가면 안되는데 뒷쪽에서 open 함수를 호출하기 위해서는 token이 들어가는 경로가 필요하다는 것입니다.

즉 token을 실행시켜야 하지만 token이라는 이름이 들어가면 안됩니다. 볼드모트같은 건가?


심볼릭 링크를 사용하면 간단하게 우회할 수 있을 것 같습니다.





/tmp 밑에 /home/flag04/token을 가리키는 심볼릭 링크 flag04_tok을 만들어주고 이것을 flag04 프로그램의 인자로 전달해주면 알수없는 문자들이 나옵니다.




사실 이부분에서 개연성이 다소 부족하기는 하지만 저게 비밀번호일 거라는 생각을 했습니다.

su로 flag04로 로그인~ 복붙~ 성공입니다.


끝-


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

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

nebula_level03

해킹/시스템 2015. 10. 28. 22:35


flag03 안에는 디렉토리 하나와 스크립트 하나가 들어있습니다.

스크립트 내용은 writable.d 폴더 안에 있는 모든 프로그램을 실행시킨 뒤 삭제하는 기능인 듯 합니다.

처음엔 writable.d 안에 쉘을 실행시키는 프로그램을 넣고 이 스크립트를 실행시켜야 하는 문제인 줄 알았습니다. 하지만 권한때문에 실행이 되지 않더군요. writable.d 안의 파일들이 자꾸 사라져서 어느정도 눈치는 챘습니다만 write-up을 보고나서야 이 스크립트가 일정 시간을 주기로 자동으로 동작하는 것이라는걸 알았습니다.

exploit-exercise 홈페이지가 닫혀서 그런지 제가 받은 iso 파일이 이상한건지 이런 힌트 부분이나 다른 라이트업에서 올려놓고 분석하는 코드같은 것들이 전혀 없어서 좀 당황스럽네요.



우선 그렇다면 스크립트는 flag03의 권한으로 자동으로 실행될 테니 쉘을 띄우는 프로그램을 .d 안에 넣고 기다리기만 하면 되겠네요.


이렇게 간단하게 생각했지만 여기서도 지식의 부족으로 한참 헤메고 말았습니다.


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

The -x option starts a BASH shell in debug mode. You can see all the details of how your command/script is processed. It's a good way to find some bugs if your script does not do what you would expect to

And just as Alex said in the comment above. To run a command in BASH, you have to use -c option like bash -x -c ls.// 출처:  http://stackoverflow.com/questions/10107124/bash-x-command


In UNIX environments, ulimit -t is used to set the maxiumum CPU time that can be used by a process. If that time limit is exceeded, the operating system sends the SIGXCPU signal to the process, which then ends.// 출처: http://support.sas.com/kb/43/126.html

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

위에 스크립트에서 사용된 ulimit -t, bash -x 두가지 옵션에 대한 설명입니다.

bash에 -x 옵션이 들어가면 디버그 모드로 실행한다는 뜻이랍니다 이 옵션으로는 바이너리 파일을 실행시킬 수 없으며 스크립트는 실행이 가능하다는 사실을 확인했습니다. 바이너리를 실행시키려고 하면 cannot execute binary file이라는 오류메시지가 나오며 위 설명에서처럼 -c 옵션을 추가하면 실행시킬 수 있지만 저 스크립트에 -c를 넣기는 힘들어 보입니다.

또한 단지 /bin/sh를 띄우는 스크립트 역시 의미가 없습니다. ulimit -t 5 가 걸려있기 때문에 9.3인지 2인지 곱하기 5 밀리세컨드?? 아무튼 매우 짧은 시간동안만 쉘이 열리게 됩니다.


그래서 매우 짧은 시간동안 얻는 권한을 이용하기 위해 쉘 프로그램을 컴파일하고 권한을 변경시키는 스크립트를 사용하도록 하겠습니다. 권한은 금방 사라지지만 컴파일된 아웃풋을 다른 폴더에 저장한다면 권한을 가진 프로그램이 남아있을 겁니다.



스크립트를 통해 컴파일할 쉘 실행 프로그램입니다. 996은 cat /etc/passwd 에서 읽은 flag03의 id입니다. 5라는 타임리미트 안에 이것을 컴파일하고 실행할 수 있도록 권한을 변경해 주어야 합니다.



스크립트는 python -c 'print "gcc -o /home/flag03/shell /tmp/level03.c; chmod 7777 /home/flag03/shell;"' > /home/flag03/writable.d/loader; chmod 7777 /home/flag03/writable.d/loader; 이렇게 짰습니다. 길어서 복잡해 보이긴 하지만 별거 없습니다. > 기준으로 왼쪽은 스크립트의 내용 즉 쉘을 실행시킬 프로그램을 컴파일/권한변경 하는 스크립트 > 이후는 그것을 실행가능한 스크립트의 형태로 loader라는 이름으로 내보내고 권한을 변경시켜 주는 내용입니다. 권한은 귀찮아서 모두 7777로 해버렸습니다.

이제 생성된 shell 프로그램을 실행시켜 보겠습니다.



성공입니다.


-끝



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

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

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

incognito - insideout

해킹/리버싱 2015. 10. 21. 01:49

2015 인코그니토 inside out 문제 풀이입니다.

확장자를 exe로 바꿔서 실행시켜 보았습니다.



인사이드 아운 애니메이션 캐릭터들이 등장하는 프로그램이군요.

플래그가 있는곳의 단서를 찾기 위해 PEview로 열어봤습니다.




data 섹션에 수상한 문자열이 있습니다. 대회때 눈이 돌아가서 알카노이드만 붙잡고 씨름하다 보니 write up을 보고나서 이 문제를 접해서 저부분이 플래그인 것을 미리 알아버리긴 햇지만...ㅋㅋ

모르고 봤어도 저부분이 인코딩된 플래그일 것이라고는 반드시 의심했을 것 같네요. 비트맵으로 보이지도 않고 일반적인 정보를 인코딩해서 data 섹션에 박아넣을 이유도 없으니까요.



IDA로 해당 부분을 찾아냈습니다. XREF하는 부분을 따라가 봅시다.



bp로 지정한 부분에서 해당 섹션에 접근하고 있습니다.

코드를 다 볼 필요 없이 call 위주로 살펴보면 memset과 strlen이 호출되는군요.

그렇다면 이 다음에 jmp하는 13C182D부분에서 플래그를 디코딩 할 확률이 매우 높아 보입니다.




점프한 부분에 bp를 걸고 동적분석을 해보았습니다.

쓸데없어 보이는 복잡한 코드가 많지만 핵심 동작은 매우 단순합니다.

먼저 013C1841부분까지 코드를 넘겨서 ecx에 들어가는 str[eax]가 아까 찾은 의심스런 문자 배열인 것을 확인했습니다.


[ebp+6A8]이 count 역할을 하는 메모리 영역이고 eax에 넘겨서 매번 루프를 돌때 마다 eax+1을 해준 되 다시 받아옵니다.

[ebp+6b4]부분은 0x29값을 가지고 있고 변하지 않습니다. 이 0x29를 edx에 전달한 후 거기에서 카운터 값인 [ebp+6A8]을 빼줍니다. 

그 후에 ecx와 edx를 xor 연산하여 다시 ecx로 넣어줍니다. 하지만 이 ecx는 다음 루프에서 바로 덮어씌우지고 어디론가 전달되거나 출력되지 않는군요.



xor연산 직후에 ECX값을 ascii값으로 생각하고 받아쓰며 유의미한 값이 나오는지 보았습니다.



처음에 전체 흐름을 파악하기 위해 한바퀴 돌려서 t는 놓쳤지만 이정도 찍어보니 the flag is ~~ 로 나올것으로 보이는군요. 이제 다 풀었습니다.


위 코드와 같은 알고리즘으로 디코딩해주는 간단한 프로그램을 만들어서 플래그를 찍어보겠습니다.


플래그는 B1NG_B0NG_is_a_Friend_oF_ours 였습니다.




'해킹 > 리버싱' 카테고리의 다른 글

gdb 한글 메뉴얼  (0) 2019.01.24
rev task9 문제  (0) 2015.11.06
Tags
Social

dll injection 추가

자료조사/리버싱, 시스템 2015. 7. 25. 16:33

여러 프로세스에 인젝션을 걸어볼것, 디버거를 켜서 어디에 할당되는지 보고

특정한 문자열을 탐지해서 브레이크를 건다던지,.....

open process로 안되는거 있는지

옛날게임 로그, 점수 조작

'자료조사 > 리버싱, 시스템' 카테고리의 다른 글

dll injection 조사 3.  (0) 2015.07.23
dll injection 조사 2  (0) 2015.07.23
dll injection 조사 1  (0) 2015.07.22
Win api를 이용한 gui 개발  (0) 2015.07.16
Tags
Social