목록Lab (221)
cdor1's lab
'UPX 패킹된 PE파일을 분석해보자' 1. UPX패커란? PE파일의 내부 코드와 데이터들을 감춰주는 패커의 한 종류이다. Ultimate Packer for eXcutables의 약자로 많이 쓰이는 PE파일 패커중 하나다. PEID로 PE파일의 정보를 보면 이렇다. (UPX패킹이 적용된 파일) (UPX패킹이 적용되지 않은 파일) 2. PEview를 통한 분석 먼저 가장 눈에 띄는 차이점부터 보자. (왼 UPX패킹 오 정상파일) IMAGE_NT_HEADERS 부분의 .textbss~.reloc영역이 단숨에 UPX0, UPX1, .rsrc영역으로 축소되었고.text~.reloc.섹션또한 UPX0, UPX1, .rsrc영역으로 축소되었다.이로써 패킹을 하게 되면 파일 크기가 줄어드는 것이다. 여기서 잠깐!왜..
코딩의 냄새가 난다.. 킁킁공유 메모리란 여러 개의 프로세스가 같은 메모리 영역을 공유해서 좀 더 효율적인 작업을 할 때 사용되는 방식이다. 일단 리눅스에서 공유 메모리를 확인할 수 있는 ipcs명령어를 이용해서 상태를 확인해 보았다.수상해 보이는 Shared Memory가 발견되었다. 근데 key가 16진수다.. 10진수로 한번 변환해 보자!0x00001d6a -> 7530문제에서 힌트로 준 key_t의 값과 동일하다!공유 메모리가 존재하는 것을 알았으니, 이젠 내용을 확인할 방법을 찾아야겠다.구글링을 해서 문제와 관련되어 보이는 shmget, shmat 함수를 찾았고 이를 이용해서 소스를 짜 보았다. 요로코롬!멍멍님과 구타님이 패스워드를 주고받으시는 모습을 볼 수 있었다. 헤헷 level11의 아이디..
오오 드디어 오버플로우 문제가 나왔군요!!buf2 배열에 go라는 문자열을 넣으면 쉘이 실행되면서 level10의 권한을 얻을수 있을것 같은데소스에서는 buf배열에서만 40바이트를 받고 있네요.. 여기서 잠깐!buf배열은 10바이트를 할당했는데 40바이트를 받겠다?10글자 이상을 입력하게되면 무슨 일이 벌어질까요?이것이 바로 스택 오버플로우입니다.입력받는 곳의 길이보다 입력한 문자의 길이가 더 길다면 문자가 넘쳐흘러서 다른 영역을 침범하게 되는데우리는 buf2 영역을 침범해서 go라는 문자열을 넣어주면 되겠군요!! 아직 스택의 상태가 어떤지 모르므로 이렇게 생각하고 한번 시도해 봅시다.(스택은 아래에서 위로 자란답니다)ㅎㅎ 기대도 안했어요 ㅠ왜냐하면!gcc로 컴파일하면서 생기는 더미가 존재하기 때문이죠!..
딱 feel이 왔다. find명령어를 뭔가 변환해서 쓰면 되겠군 했다. 일단 shadow 파일이 무엇인가?리눅스의 암호화된 패스워드 파일이라고 알면 되겠다. 그러면, 파일을 찾은 뒤, 암호화된 파일을 복호화까지 해줘야겠다. 한번 해보자! find명령어에 용량을 인자로 주려면 -size를 붙여주면 된다.우리는 파일의 단위가 무엇인지 모르니까b: blockc: bytek: kilobytew: word4가지 단위를 전부 사용해서 찾아보았다.수상해보이는 파일인 /etc/rc.d/found.txt 파일을 찾았다. (반복되는 문자열이 더 있다.)암호화된 level9의 패스워드 파일이 보인다.이것을 어떻게 크랙할 것이냐? 나는 내 칼리에 깔려있는 john the ripper 라는 툴을 사용하기로 했다.툴은 매우 강력..
오 암호학 문제인것인가! 일단 실행해서 내 닉네임을 넣어봐야겠다! 음.. 당연히 아니겠지만 뭔가 cat 명령어로 열어주려다가 실패하네.. 없네.. 설마 5번 문제처럼 wrong.txt를 만들어놓으면 와서 쓰고가지않을까? ㅎㅎㅎㅎㅎ 될리가없지.. 이때까진 계속 다른 힌트가 있겠지 하고 찾아보았지만 찾을수 없었고 지인분에게 물어보니 그거 파일이 없어서 넣어줘야한다고.. ㅎㅎ(나도 해커스쿨 서버 멀쩡할때 풀었어야 했는데.. 괜히 환경구축해서 푼다고..)/bin/wrong.txt 파일의 내용은--_--_- --____- ---_-__ --__-_- 라고 한다.2진수로 만들어야 하니까 -은 1로, _은 0으로 치환해보자!1101101 1100001 1110100 1100101힌트에 나온대로 2진수를 10진수로 변..
네?전 cat hint 해서 제가 힌트 봐도 되는데 ㅎㅎ 감사합니당 저거 엄청 오래된 서비스일텐데.. 접속이 될까?에.. 안되네너도.. 너도.. 아! 명령어를 바로 넣어볼까? ㅇㅇ 필터링 ...다 안되는데 어떻게 문제를 풀어야 하는거지..그때 문득 떠오른 생각이 리눅스에서 강제종료할때 사용하던 Ctrl+C가 생각났다. 오! 이제 메인 문제가 있는건가!힌트 봐야지~ 힌트가 전에 본거랑 같네???tn이라는 프로그램도 방금 본 프로그램이다..그러다 ls한 결과를 유심히 살펴보니 password라는 파일이 있었다. 여기 있었구나 ㅎ..다 풀고 알게된 것이지만 아마도 level6계정으로 접속하게 되면 hint의 내용을 보여주고 tn을 실행해주는것 같다.그래서 강.제.종.료를 할수 있었던 거겠지 level7의 아이..
음.. 무언가 level5.tmp 파일에 힌트가 있을것 같은 느낌이 든다.실행시켜서 내용을 봐야지! ㅎㅎ 내파일 어딧쪄? ...고뇌한 결과 프로그램이 생성하는 파일이름이랑 이름이 같은 파일을 /tmp 경로에 만들어놓으면 저 프로그램이 와서 무언가를 하고 가지 않을까?라고 생각하게 되었고 한번 시도해 보려 한다. 파일을 만들고! .생성 확인 하고!.프로그램 실행 시키고!.내용 보고!.패스워드가 있네?????(추가 힌트가 있을줄 알았다 ㅠ) level5의 아이디와 패스워드는level5/what the hell 이다.
그렇다고 한다. 문제에 나온 경로대로 /etc/xinetd.d/에 들어가 보니 이름이 backdoor인 수상한 파일이 있다.cat 명령어로 들여다 보니 finger라는 서비스로 /home/level4/temp/backdoor라는 파일이 실행되는 것으로 보인다. 저 경로대로 /home/level4/temp/에 들어가서 backdoor라는 파일을 찾아보았는데 backdoor은 커녕 아무런 파일도 보이지가 않는다.그래서 my-pass를 실행시키는 프로그램을 하나 만들어서 finger 서비스를 실행하면 level5의 패스워드가 노출되도록 하려고 한다. system("my-pass");를 실행하여 패스워드를 보여주는 코드를 하나 만들어 gcc -o backdoor backdoor.c 로 컴파일하였다.이제 fing..
요번에는 힌트에 파일 소스를 준다. 갑자기 어려워진 기분이 들 수 있는데 소스를 차근차근 살펴보자.autodig는 리눅스의 nslookup 정도로 생각하면 되겠다. strcpy(cmd,"dig @");strcat(cmd,argv[1]);strcat(cmd,"version.bind chaos txt");이 부분에서 dig @ (입력값) version.bind chaos txt이런 방식으로 명령어를 만든 후, system(cmd); 로 명령을 실행한다. 문제는 여기서 어떻게 쉘을 실행시켜야 하냐인데, more hints에 나와 있다시피 동시에 여러 명령어를 전달하는 방법과 문자열 형태로 명령어를 전달하는 방법을 알아보자. 요번에는 find명령어가 좀 바뀌었는데, 힌트에서 이름을 주었기에 이름으로 한번 찾아보..
그렇다고 한다. 1번과 같은 명령어에서 소유주만 level3로 바꾸어서 찾아보았다./usr/bin/editor라는 파일이 수상하다...요래요래 생긴 에디터가 나온다.이 에디터는 vi에디터라고 하는 것인데 리눅스에서 많이 쓰이는 에디터이다.이 vi에디터는 명령을 입력할때 :(명령) 방식으로 명령어를 입력한다.우리는 힌트에서 쉘의 명령어를 실행시킬 수 있다는 것을 알았다. 결과는 성공적이였고 level3로 바뀐 uid와 패스워드를 얻을 수 있었다. level3의 아이디와 패스워드는level3/can you fly? 이다.