먼저 힌트를 까보면 누군가가 /etc/xinetd.d에 백도어를 심어놓았다고 한다.


그래서 그 위치로 가보니 backdoor라는 파일이 하나 있었다.







열어보니 service finger 라는 것이 있었는데 


이것은  어떠한 서비스를 하기위한 initd 데몬이다.


자세히 보면 실행하는 유저가 level5 이고, 


실행경로는 /home/level4/tmp/backdoor 라고 한다.

그래서 저 경로로 가보았지만 아무것도 없었다.


따라서 실행될 프로그램을 직접 만들어 줘야한다.




이렇게 패스워드를 보여주는 프로그램을 짰다.


그리고 finger 서비스를 이용하여 level 5의 패스워드를 알아낼수 있다.



Flag : what is your name?

'IT > FTZ' 카테고리의 다른 글

[FTZ] level6  (0) 2016.07.09
[FTZ] level5  (0) 2016.07.09
[FTZ] level3  (0) 2016.05.20
[FTZ] level2  (0) 2016.05.20
[FTZ] Level 1  (0) 2016.05.20


hint를 까보면 이런식으로 뜬다.


more hints

- 동시에 여러 명령어를 사용하려면?

; 로 명령어를 끊어 줄수 있다.

- 문자열 형태로 명령어를 전달하려면?

""로 묶어 주면된다.




먼저 find 명령어를 사용해서 찾아보면, /bin/autodig 가 검색된다.


실행 시켜보니 Usage가 뜬다.


저 방식대로 실행해야 하고, 위의 hint를 보았을때 먼저 쉘을 따고, my-pass를 입력하는 순서로 해야한다.

./autodig /bin/bash;my-pass


이고, 문자열 형태로 명령어를 전달하기 위해 "" 로 묶어준다.


./autodig "/bin/bash;my-pass"


명령어를 입력하면, level4의 패스워드가 뜬다.




Flag : suck my brain

'IT > FTZ' 카테고리의 다른 글

[FTZ] level6  (0) 2016.07.09
[FTZ] level5  (0) 2016.07.09
[FTZ] level4  (0) 2016.07.09
[FTZ] level2  (0) 2016.05.20
[FTZ] Level 1  (0) 2016.05.20


hint를 확인해보면

" 텍스트 파일 편집 중 쉘의 명령을 실행시킬 수 있다는데... " 라고 나온다.



id 명령어로 level3의 uid를 얻고, find 명령어로 찾아본다.

/usr/bin/editor을 실행해보면,



편집기에서 쉘을 불러오기 위해서는 여러가지 방법이 있는데,


그중에서 !bash 로 불러오는 방법을 사용하면,




level3의 쉘을 얻게 된다.


my-pass 명령어로 level3의 패스워드를 구한다.




Flag : can you fly?

'IT > FTZ' 카테고리의 다른 글

[FTZ] level6  (0) 2016.07.09
[FTZ] level5  (0) 2016.07.09
[FTZ] level4  (0) 2016.07.09
[FTZ] level3  (0) 2016.05.20
[FTZ] Level 1  (0) 2016.05.20


힌트를 열어보면 " level2 권한에 setuid가 걸린 파일을 찾는다. " 라고 쓰여있다.



먼저 level2의 uid를 알아내고



find 명령어를 이용해서 3002 uid를 가지고 있는 파일을 검색한다.


검색을 해보니 /bin/ExecuteMe 이 나온다.


저 경로로 들어가서 실행시켜보면, 




my-pass와 chmod를 제외한 명령어를 level2 권한으로 실행시켜준다고 한다.


쉘을 얻기 위해서 /bin/bash를 입력해서 level2의 쉘을 딴다.






my-pass로 패스워드를 구한다.


Flag : hacker or cracker


'IT > FTZ' 카테고리의 다른 글

[FTZ] level6  (0) 2016.07.09
[FTZ] level5  (0) 2016.07.09
[FTZ] level4  (0) 2016.07.09
[FTZ] level3  (0) 2016.05.20
[FTZ] level2  (0) 2016.05.20




'IT > Assembly' 카테고리의 다른 글

Reversing / 1일차  (0) 2016.04.13
2. 어셈블리어의 기초  (0) 2016.04.03
1. 어셈블리어의 장단점  (0) 2016.04.03

리버싱


파일을 뜯어서 이프로그램이 어떤 동작,기능을 하는지 분석하여 그원리를 보안하고 이것저것하는 작업을 리버싱이라고한다.


동적 분석

실행해가며 프로그램의 동작을 분석하는 방법


정적 분석

파일의 겉모습을 관찰하면서 분석하는 방법



과제 1






과제 2





과제 3



과제 4,5



과제 7


'IT > Assembly' 카테고리의 다른 글

Reversing / 2일차  (0) 2016.04.17
2. 어셈블리어의 기초  (0) 2016.04.03
1. 어셈블리어의 장단점  (0) 2016.04.03



Cryptography Challenge 1

He also makes a good salad


pnrfne fnynq




카이사르 암호를 이용해서 푼다.




복호화 프로그램 코딩

#include <stdio.h>
#include <string.h>

int main() {

char nomal[100] = { 0 };
int i, j, level = 0;
while (1) {
printf("복호화할 문장을 입력하세요: ");
scanf("%s", &nomal);

for (j = 1; j < 27; j++) {
for (i = 0; i < strlen(nomal); i++) {

nomal[i] = nomal[i] + 1;

if (nomal[i] == 91) {
nomal[i] = 65;
}
else if (nomal[i] == 123) {
nomal[i] = 97;
}

}
printf("+%02d : %s \n", j, nomal);
}
}

}







#include <stdio.h>

#include <string.h>

unsigned long hashcode = 0x21DD09EC;

unsigned long check_password(const char* p){

        int* ip = (int*)p;

        int i;

        int res=0;

        for(i=0; i<5; i++){

                res += ip[i];

        }

        return res;

}


int main(int argc, char* argv[]){

        if(argc<2){

                printf("usage : %s [passcode]\n", argv[0]);

                return 0;

        }

        if(strlen(argv[1]) != 20){

                printf("passcode length should be 20 bytes\n");

                return 0;

        }


        if(hashcode == check_password( argv[1] )){

                system("/bin/cat flag");

                return 0;

        }

        else

                printf("wrong passcode.\n");

        return 0;

}


Hint
hashcode를 5번씩 쪼개 저장 하므로 맞는 식을 세워 입력 해주면 된다.
./col `python -c 'print "\xC8\xCE\xC5\x06"*4 +"\xCC\xCE\xC5\x06"'`


'IT > Pwnable.kr' 카테고리의 다른 글

pwnable.kr / bof  (0) 2016.07.17
pwnable.kr / fd  (0) 2016.04.07




#include <stdio.h>

#include <stdlib.h>

#include <string.h>

char buf[32];

int main(int argc, char* argv[], char* envp[]){

        if(argc<2){

                printf("pass argv[1] a number\n");

                return 0;

        }

        int fd = atoi( argv[1] ) - 0x1234;

        int len = 0;

        len = read(fd, buf, 32);

        if(!strcmp("LETMEWIN\n", buf)){

                printf("good job :)\n");

                system("/bin/cat flag");

                exit(0);

        }

        printf("learn about Linux file IO\n");

        return 0;


Hint 

0x1234 16진수 ==>> 4660 10진수

이고,buf가 LETMEWIN 와같을때,

'IT > Pwnable.kr' 카테고리의 다른 글

pwnable.kr / bof  (0) 2016.07.17
pwnable.kr / col  (0) 2016.04.09

세그먼트 레지스터: 


CS(Code Segment) – 코드를 저장하는 메모리 블록 


DS(Data Segment) – 데이터를 저장하는 메모리 블록 


EX(Extra Segment) – 비디오와 관련된 것을 위해 사용됨 


SS(Stack Segment) – 루틴으로부터 리턴 어드레스를 저장하기 위해 프로세서에 의해 사용되는 레지스터  


인덱스 레지스터: 


SI(Source Index) – 문자열/배열의 소스를 지정하기 위해 사용됨. 


DI(Destination Index) – 문자열/배열의 목적지를 지정하기 위해 사용됨. 


IP(Instruction Pointer) – 다음 명령의 주소를 저장하고, 그래서 직접적으로 변경될 수 없음.   

 

스택 레지스터: 

BP(Base Pointer) – 스택 오퍼레이션을 위해 SP 와 연결되어 사용됨. 


SP(Stack Pointer)   


특별한 목적을 위한 레지스터: 

IP(Instruction Pointer) – 실행된 명령의 offset 를 가지고 있음. 


Flag – 분기(branching)를 위해 사용됨. 플래그 레지스터는 크기가 1 비트이다.

=============

EAX : 곱셈이나 나눗셈 연산 할 때 사용되는 레지스터

 

EBX : 주소 같은거 간접적으로 접근할 때 사용되는 레지스터 


ECX : 반복문 돌릴 때 루프 카운트 되는 레지스터 


EDX : EAX레지스터를 보조해주는 레지스터


EDI , ESI : 조작 , 복사시 소스데이터 주소가 저장


ESP , EBP : 스택프레임의 끝지점 주소가 저장

=========================================================================


' 해당 주소 피연산자를(로) 명령어 하라. '


피연산자란?

- 명령어의 대상과 목적

EX) 레지스터, 메모리, 레이블, 상수

Practice


※ 명령어 


 IA-32 어셈블리 명령어 모음.pdf


MOV : 원하는 곳으로 데이터를 이동 (메모리에서 메모리로는 이동 불가)

MOV 피연산자,값


XCHG : 두 레지스터의 값을 바꿈  

XCHG 레지스터1,레지스터2 


JMP : 원하는 주소나 라벨로 점프

JMP AX

JNE : 같지 않은 경우 점프

JE : 같은 경우 점프

JNZ : 0이 아닌경우의 점프

JZ : 0인 경우의 점프


CMP : 비교 명령

CMP AX ,0x8

점프 명령이 이뤄지기전에 100%일어남


ADD : 덧셈을 수행하는 사칙연산 명령

ADD 레지스터 1, 레지스터 2 

ADD 레지스터, 값  

MOV AX,5h  ;AX 의 값은 5h 

MOV BX,4h  ;BX 의 값은 4h  

ADD AX,BX  ;AX 에 BX 를 더하고, 그 값을 AX 에 저장(5h + 4h = 9h = AX)


XOR : 초기화

XOR AX,AX


LEA : 주소값 가져오기

LEA AX,주소


SUB : 뺄셈을 수행하는 사칙연산 명령

SUB 레지스터 1, 레지스터 2 

SUB 레지스터, 값  

MOV AX,5h  ;AX 의 값은 5h 

MOV BX,4h  ;BX 의 값은 4h  

SUB AX,BX  ;AX 에 BX 를 빼고, 그 값을 AX 에 저장(5h - 4h = 1h = AX)


INC : 피연산자 값을 1 증가

INC AX


DEC : 피연산자 값을 1 감소

DEC AX


POP : 원래 값을 회복

POP AX


PUSH : 레지스터의 값을 잠시 저장

PUSH BX


Practice


MOV AX,51h 


MOV BX,4Fh  


XCHG AX,BX  


PUSH AX 


MOV AX,34h 


POP BX  


PUSH BX  


POP AX  

'IT > Assembly' 카테고리의 다른 글

Reversing / 2일차  (0) 2016.04.17
Reversing / 1일차  (0) 2016.04.13
1. 어셈블리어의 장단점  (0) 2016.04.03

+ Recent posts