call이란 함수포인터에 printit 함수의 주소를 담은 후에 마지막에 call 함수 포인터를 호출해서 printit을 실행하네요! 근데 printit함수에는 필요없는것이 존재하고
shell함수에는 level17의 권한이 주어져있네요!
그렇다면 printit의 주소 대신에 shell의 주소를 넣어줘야겟네요!
또한 fgets로 buf에 값을 넣을 수 있는데 48만큼 넣을 수 있으므로 
crap함수와 call을 덮어 쓸 수 잇겠네요


gdb로 열어봤습니다!

main +3 에서 0x38(56)만큼 확장 되었네요!
또한 main+6 지점에서 *call에 printit 의 주소값인 0x8048500을 넣어버립니다!

그리고 main 36,39 지점을 보시면ebp-16 지점을 읽어와 eax에 저장하고 call을 하는걸 보아하니 ebp-16 지점을 shell함수의 주소로 바꿔주면 되겠네요 


info functions를 쓰면 함수들의 정보가 출력이되서 shell의 주소값을 가져왔습니다.
ebp-16지점이니 buf랑 call함수랑 40이 차이가 나는군요 

그렇다면 여태까지 주어진 정보로 공격코드를 생각해보면
buf(40)만큼의 크기를 쓸데없는것으로 채워주고 shell의 주소를 쓴 후에 파이프를 사용하면 되겠습니다


level17의 권한이 주어진것을 확인할 수 있습니다.

'해커스쿨 ftz' 카테고리의 다른 글

FTZ-LEVEL18  (0) 2016.04.24
FTZ-LEVEL17  (0) 2016.04.24
FTZ-LEVEL15 [gdb로 푸는법]  (0) 2016.04.24
FTZ - LEVEL14  (0) 2016.04.24
FTZ - LEVEL13  (0) 2016.04.23


먼저 평소와 같이 HINT를 봐보자!
여지껏 문제에선 보이지 않던 포인터가 보인다
포인터 변수는 '주소 값'을 가지는 변수이다 CHECK에 들어가는 값은 메모리의 주소 값과 같다고 생각할 수 있다 .

check 포인터 변수에 잇는 값이 가리키는 메모리 주소에 0xdeadbeef를 넣어줘야 한다 . 그러기 위해서는 메모리 주소를 찾아야하는데 

ebp-56의 주소를 eax 레지스터에 넣는걸 보아하니 버퍼의 시작 위치인것을 알 수 있다 .


ebp-16지점에 0xdeadbeef를 넣어주면될거같다 .
그럼 이제 0xdeadbeef의 위치를 찾아봐야할거같다 


main+32지점에 deadbeef가 보인다! 그럼 좀 더 자세히 찾아보자 


main+44지점 0x80483e4가 주소이다!
그렇다면 생각할 수 있는 공격코드는 
쓰레기값으로 40을 채워주고 0xdeadbeef의 주소값을 채워주자

(python -c 'print "A"*40+"\xe4\x83\x04\x08"';cat) | level15./attackme
이렇게 생각해 줄수 잇겠다! 
*이것은 제가 hint를 복사해서 푼 자료입니다 혼동하지 마시길 바랍니다.




'해커스쿨 ftz' 카테고리의 다른 글

FTZ-LEVEL17  (0) 2016.04.24
FTZ-LEVEL16  (0) 2016.04.24
FTZ - LEVEL14  (0) 2016.04.24
FTZ - LEVEL13  (0) 2016.04.23
FTZ - LEVEL12  (0) 2016.04.22


먼저 힌트를 봐봅시다 ! 

int crap; // int형 crap 변수를 선언합니다
int check ; // int형 check 변수를 선언합니다 
char buf[20]; //buf[20]배열을 선언합니다.
fgets(buf, 45, stdin); // 문자열을 45바이트까지 키보드로 입력받은 후에 buf 배열에 저장한다
if (check==0xdeadbeef)
{
setreuid(3095,3095);
system("\bin\sh");
}
]
// check 변수에 0xdeadbeef값이 들어있을 경우
3095(level15) 권한을 가지고 /bin/sh를 실행한다!

check변수에 0xdeadbeef 값만 넣어져있다면 해결 할 수있는 문제일거같다
애초에 버퍼 오버플로우가 가능하도록 더 많은 버퍼가 들어갈 수 있게 코드가 되어있다.

스택구조를 대충 파악해보면
char buf[20] dummy1 crap[] dummy2 check[] dummy3 이런식으로 되어있을거같은데 너무 간단하지않나요 ?

gdb로 열어서 구조를 파악해봅시다 


main 3을 보면 0x38 만큼 할당해주네요 [56]
근데 main+39를 보면ebp 에서 16을 뺀 지점에서 0xdeadbeef를 넣는다 라고 되어잇네요 그렇다면 
buf+dummy값을 총 40 넣어준후에 0xdeadbeef만 넣어주면되겟네요 

/bin/sh가 들어 있으므로 따로 값을 넣어 줄 필요는 없을거같습니다 
여기서 인자 전달방식이 level12의 gets와 비슷한 fgets이므로 cat 명령어를 pipe를 이용하여서 전달해 줍시다 

level15의 권한이 주어졋네요!

'해커스쿨 ftz' 카테고리의 다른 글

FTZ-LEVEL16  (0) 2016.04.24
FTZ-LEVEL15 [gdb로 푸는법]  (0) 2016.04.24
FTZ - LEVEL13  (0) 2016.04.23
FTZ - LEVEL12  (0) 2016.04.22
FTZ - LEVEL11  (0) 2016.04.15


LEVEL13의 힌트이다 . 간단히 소스를 설명해보겟다!

long i = 0x1234567; 
long 타입의 변수 i를 선언하구 0x1234567;을 값으로 넣은다.
char buf[1024]; = buf 1024크기를 가진 배열을 선언한다
setreuid(3094, 3094); = level 14의 권한으로 만들어준다


if(argc >1)
strcpy(buf,argv[1]); = argc가 1보다 크면 buf[1024]에 복사해준다
[strcpy = 복사할 때 크기를 체크하지 않는것이 취약점이다!]

if(i != 0x1234567) {
printf(" warnning : Buffer Overflow !!! \n");
kill(0,11);
}
}
level13의 핵심 부분이자 가장 중요한 부분이다!
0x1234567이 아니라면 메시지를 출력하고 kill함수를 실행시켜서 
강제 종료 시켜버린다!
[kill(0,11)에서 0은 프로세스 아이디를 뜻하며 11은 시그널 번호를 말한다 
시그널 번호 11은 프로세스가 다른 메모리 영역을 침범햇다는 뜻을 내포하고있다.]

*자 여기서 I는 "스택 가드"에 해당된다 .
buf와 ret 주소 사이에 스택가드(long i) 를 만들어서 버퍼 오버 플로우를 시킬떄
스택 가드도 같이 변조되는데 그렇다면 프로그램은 스택 가드가 변조됫다는걸 if문으로 비교해서 알게되고 실행을 못시키게 프로그램을 종료 시켜버리는것이다.
자 그럼 이번 level13은 if문이 i를 비교햇을때 변조되지않았다고 판단하게 만든후 권한을 얻어버리는게 핵심인거같다 .




0x418[1048]이 할당되엇다 
아까 소스에서는 buf는 1024였으므로 즉 24만큼의 공간이 더 주어진것이다 .


여기서 0x1234567 즉 I의 값에 4에 공간을 할당한다 .

주어진 24만큼의 공간에서 4를 스택가드에 쓰는군요 

스택 가드가 활성화? 되는 부분이다! 


스택가드가 활성화 하는부분에 브레이크 포인트를 걸어주고 
AAAAAAAA를 넣어줘봅시다!


첫줄에 보시면 0x41414141 0x41414141 이 있군요! 제가 넣은AAAAAAAA가 들어간 모습입니다 


쭉쭉쭉 찾아가시다보면 저기 0x01234567 즉 스택가드의 모습이 보이네요 

저기에 잇는 0x1234567이 변조되면 kill 함수가 실행되어서 프로그램이 종료가 되버리는군요 ? 
그러면 스택가드를 건드리기전까지 쓰레기값을 넣어줘야겟네요 

아까 1048의 공간이 할당되엇고 여기서 4는 스택 가드의 값이지요 ? 
그렇다면 buf[1024] dummy1[?] i[4] dummy2[?] sfp[4] ret[4] 이렇게 스택이 구성되잇네요 
여기서 gdb한걸 읽다보면 dummy값에 12가 주어진것을 알 수 있습니다 .
그렇다면 스택가드 전 까지의 값은 1036이겠군요 
총 1048이 주어졋으니 1036+4 = 1040 dummy2의 값은 8이겟네요 
buf[1024] dummy1[12] i[4] dummy2[8] sfp[4] ret[4]

셸코드의 값을 구해서 (에그를 이용합니다)


따다다닥 넣어주면 끝납니다!

'해커스쿨 ftz' 카테고리의 다른 글

FTZ-LEVEL15 [gdb로 푸는법]  (0) 2016.04.24
FTZ - LEVEL14  (0) 2016.04.24
FTZ - LEVEL12  (0) 2016.04.22
FTZ - LEVEL11  (0) 2016.04.15
FTZ - LEVEL 10  (0) 2016.04.15

시험기간이라서 오랫만에 포스팅하는거같네요 아직 시험이 남앗지만 뭔가 보안 공부에 소홀해지는거같아서 오늘 새벽까지는 보안 공부에 투자하겠습니다 

상당히 많이 햇갈리고 고민했습니다 

좀 더 많은 자료를 읽고 초보 수준에서 얼른 벗어나야겠다고 생각이드는 문제입니다.

*이 글은 초보자가 작성한 글이며 매우 지식이 부족합니다 .혹시나 정확하지 않은 지식을 받아가실 수 있으니 RTL 기법은 직접 공부하시길 바랍니다. *


먼저 힌트를 읽어보겠습니다! 

권한 상승을 시키는 문제네요 

3093은 레벨13의 권한을 의미합니다 

gets함수의 취약점을 이용해서 공격해야하는데요 

gets 함수의 취약점은 엔터를 입력받을 때까지 모두 문자열로 인식하고 버퍼에 담습니다 고로 버퍼의 크기보다 길게 입력해도 엔터를 받을때까지 무조건 스택에 담아버리는군요 

 gdb를 하기위해서 저 코드를 쓰기권한이 존재하는 tmp에 복사해왔습니다

그 후 gdb로 열었습니다 

main+3 부분을 보면 스택에 0x108을 만드네요 264의 크기입니다 이제 저희는 

buf(264) | sfp (4) | ret (4) | argc(4) | argv(4) 대강 이렇게 만들면 되겠네요


자 system과 exit의 값을 먼저 출력했습니다 

왜 system과 exit의 값을 출력하냐면 . 

RTL 공격이란 간단하게 System 명령의 주소를 알아낸후 그 주소를 Return Address로 바꿔서 실행시키는 방법입니다.

이제 여기서 System 명령을 실행 시키기 위해서는 System 명령어가 필요하기 때문에 System 명령어의 주소값과 지금 실행중인 Process를 종료하기 위해서 exit명령어를 실행 시키기 위해서 exit의 주소 값을 가져왓고 그 후 sh shell을 실행시키기 위해서 sh 의 주소값을 가져와야 합니다! 

자 이제 system과 exit의 값을 출력햇는데 저 사진만 보시고는 sh의 주소값을 어떻게 출력해야하는지 감이 안잡히시지요 ?

/bin/sh의 주소를 구하는 file을 직접 만드셔야합니다 .


/bin/sh 의 주소를 구하는 코드입니다 .

자 그리고 여기서는 프로그램을 실행 후에 값을 받아들이기 때문에 

Python과 cat 명령어를 이용해서 풀어야합니다 .( | 이용해야함)





이런식으로 공격코드를 짯는데요 아까 초반부에 

buf(264) | sfp (4) | ret (4) | argc(4) | argv(4) 대강 이렇게 만들면 되겠네요 

라고 말씀을 드렷었지요 ? 

buf +sfp = A*268 
ret = system함수의 주소 
argc = exit의 주소 
argv = /bin/sh의 주소값입니다 .
저렇게 입력한 후 my -pass 를 해주시면 비밀번호가 나옵니다 !
고생하셨습니다


'해커스쿨 ftz' 카테고리의 다른 글

FTZ - LEVEL14  (0) 2016.04.24
FTZ - LEVEL13  (0) 2016.04.23
FTZ - LEVEL11  (0) 2016.04.15
FTZ - LEVEL 10  (0) 2016.04.15
FTZ - LEVEL9(gdb)  (0) 2016.04.10


포맷 스트링 버그 기법으로 풀 수 있는 문제이다! 공격을 해서 쉘을 휙득하면

레벨12의 권한을 얻을 수 있는거같네요!

저렇게 printf에 서식문자를 통하지 않고 바로 포인터 변수를 써버리면 

포맷 스트링 버그를 사용할 수 있습니다!

자 먼저 서식문자를 몇개 넣어야지 str[256] 읽히는지 알아보겠습니다

bffffc14가 나왓네요 자 그럼 srt[256]이 읽힐떄까지 넣어보도록 하죠!

%x를 네번 넣엇더니 AAAA의 값이 제대로 나오는군요 

* 저는 많이 지식이 부족한 이제 막 배워가는 학생입니다 제 글을 보기전에 다른 훌륭한 문서들을 익히고 와주세요! *

포맷 스트링 버그에서 가장 중요한 서식문자%n 이 존재합니다

printf( str ) 이런식이면 문자열중에 %d등과 같은 서식문자를 만나면 스택에서 다음 4바이트를 읽어서 출력합니다!

하지만 %n은 %n이 등장하기 전 출력된 자릿수를 계산하여 스택의 다음 4 바이트에 있는 내용을 주소로 생각하고 그 주소에다가 입력을 합니다!

대충 에시를 들자면 AAAA의 값을 예로 들엇는데 저 값이 %n을 만나면 AAAA는 총 4자리입니다  그리고 스택의 다음 4바이트 내용은 0x41414141인데 이 주소에 자릿수4를 사용해버리는겁니다. 즉 메모리 주소에 원하는 내용을 쓸 수 잇습니다 (%임의정수c)

ret주소에 쉘코드 주소를 박아 넣을 수 잇고 쉘코드를 10진수로 바꿔서 ret주소에 덮어(?)버리면 됩니다

여기서 이제 대충 공격 코드를 생각해 보겠습니다

./attackme `python -c'print"AAAARET주소를 Little Endian으로 나타낸수%8x%8x%8x%쉘코드주소를10진수로 바꾼수c%n"'`

아까 분명히 %x를 4번 썻더니 str의 값이 나온거같은데 저기 공격 코드에서는 3개밖에 안보이네요 그 이유는 RET주소가 STR에 있기 때문입니다. %8x로 한 이유는 각 부분이 최대 8자리를 차지하는것이 이유입니다.

저 위에서쉘코드 주소를 10진수로 바꾼수에서 10진수 정수형으로는 쉘코드 주소의 최대 크기를 감당하지 못하므로 쉘코드 주소를 반씩 나누어서 입력해야 합니다.

./attackme `python -c'print"AAAARET주소를 Little Endian으로 나타낸수AAAARET주소+2를 Little Endian으로 나타낸수%8x%8x%8x%쉘코드주소의 반을 10진수로 바꾼수c%n쉘코드주소의 반을 10진수로 바꾼 수c%n"'`

자 여기서 또 %n은 지금까지 나온 모든 바이트를 세기때문에 문자들도 신경을 써줘야합니다AAAA(4) RET주소(4) AAAA(4) RET주소+2(4) %8x(8)*3 으로 총 40의 바이트입니다

./attackme `python -c'print"AAAARET주소를 Little Endian으로 나타낸수AAAARET주소+2를 Little Endian으로 나타낸수%8x%8x%8x%쉘코드주소의 반을 10진수로 바꾼수-40c%n쉘코드주소의 반을 10진수로 바꾼 수 - 앞 쉘코드 주소의 반을 10진수로 바꾼 수c%n"'`

이게 최종 공격코드입니다 자 이제 주소를 구해볼까요 먼저 RET주소를 구하는 방법입니다

objdump -h attackme | grep .dtors

저기서 보이는 0804960c에 4를 더해준 값이 바로 RET주소입니다

이번엔 쉘 코드를 구해야하는데 에그쉘을 이용하여 구해보겟습니다

저렇게 쉘 코드 주소가 나왔네요 

자 먼저 RET주소를 Little Endian으로 나타내면 

\x10\x96\x04\x08이 됩니다. RET주소 +2의 값은 \x12\x96\x04\x08이 됩니다.

그 다음으로 쉘코드를 10진수로 나타내면 

0xf3a1 = 62369 0xbfff =49151

62369 - 40 = 62329 쉘코드주소전자의 반 - 쉘코드주소후자의 반 = 

음수가 나오기때문에 0x1bfff로 계산합니다 .

114687 - 62369 = 52318

자 이제 권한을 얻어보겟습니다

공격코드 - ./attackme `python -c'print"AAAA\x10\x96\x04\x08AAAA\x12\x96\x04\x08%8x%8x%8x%62329c%n%52318c%n"'`


다음 패스워드를 휙득했습니다!



'해커스쿨 ftz' 카테고리의 다른 글

FTZ - LEVEL13  (0) 2016.04.23
FTZ - LEVEL12  (0) 2016.04.22
FTZ - LEVEL 10  (0) 2016.04.15
FTZ - LEVEL9(gdb)  (0) 2016.04.10
FTZ - LEVEL9 (소스)  (0) 2016.04.10


평소와 마찬가지로 힌트를 보자! 

두명의 사용자가 공유 메모리를 이용한 대화방에서 이야기를 하고 있으며 key_t의 값은 7530이고 두 사람의 대화를 도청하여 level11의 권한을 얻으라한다


이 문제에 들어가기전에 공유 메모리에 관한것들을 공부해야한다

http://akj61300.blog.me/80126318285 이곳에 정리되어 있는 글을 보는것을 추천한다

사실 공유 메모리는 요즘 잘 안쓰는것으로 알고잇고 이 문제는 공유 메모리에 관한

지식만 알고잇으면 푸는 문제이므로 별 다른 이야기 없이 위 링크에서 공부 하면 풀 수 잇을거라고 생각든다.


공유 폴더인 tmp로 이동을 하였다

간단히 중요부분만 소스를 설명하자면

헤더 부분의 sys들은 공유메모리를 사용하기 위한 것들이며 상세한 자료는 링크에 나와있다.

shmget(공유메모리 식별번호 , 공유메모리크기, 동작옵션);

shmat //읽기 전용으로 설정

printf //값 출력




컴파일해서 출력하면 대화를 엿들을 수 있다!


'해커스쿨 ftz' 카테고리의 다른 글

FTZ - LEVEL12  (0) 2016.04.22
FTZ - LEVEL11  (0) 2016.04.15
FTZ - LEVEL9(gdb)  (0) 2016.04.10
FTZ - LEVEL9 (소스)  (0) 2016.04.10
FTZ - LEVEL8  (0) 2016.04.10


hint를 배껴와서 tmp폴더에 level9.c를 만들었습니다.

그리고 vi편집기로 한글을 모두 제외한후에 

tmp폴더에다가 컴파일햇습니다

자 이렇게 열어버렸습니다 . 

이제 위에서부터 해석을 해볼까요 

push ebp                     - 스택의 기준점을 설정해주었다.

mov ebp , esp              - esp 값을 ebp에 복사하였다 이로써 base pointer와 stack pointer가 같은 지점을 가르치게 된다 

sub  esp,0x28               - ESP 에서 28을 빼는 명령이다. ESP는 28바이트 아래 지점을 가리키게 되고 스택에 8바이트의 공간이 생기게 된다 .(스택이 8 바이트 학장되었다.)    

and  esp,0xfffffff0          - ESP의 주소 값의 맨 뒤 4bit를 0으로 만들기 위한 명령어 큰 의미는 없다.

mov eax,0x0                 - EAX 레지스터에 0을 넣는다.

sub  esp,eax                 - ESP에 들어 있는 값에서 EAX에 들어 있는 값만큼 뺀다 stack pointer를 EAX만큼 확장시키는것이다. ( 0이 들어가 있으므로 별 의미는 없음)

sub  esp,0xc                  - 스택을 12바이트 만큼 확장한다.

push 0x8048554             - 0x8048554를 현재 스택에 저장한다 .

call  0x8048350 <printf>  - 0x8048350에 있는 명령을 수행하라는 뜻이다 printf가 들어있다.

add esp, 0x10                - 스택을 16바이트 줄입니다.

sub esp, 0x4                  - 스택을 4바이트만큼 확장한다 

push ds:0x8049698         -  0x08049698라는 (실제로 사용,존재하는) 값을 넣는다 

push 0x28                     -  esp에 40바이트값만큼을 저장하고 스택을 4바이트 확장한다

lea   eax, [ebp-40]          -   eax에 ebp-40에 저장되있는 값을 mov 한다

push eax                       - eax를 집어넣는다.

call 0x8048320 <fgets>    -  0x8048320에 있는 명령을 수행한다 .

add esp,0x10                 - 스택을 16바이트 줄입니다.

sub esp,0x4                   - 스택을 4바이트 만큼 확장합니다.

push  0x2                     -  스택에 2바이트를 집어넣습니다

push 0x804856a            -  스택에 0x804856a값을 집어 넣는다 

lea  eax,[ebp-24]           - eax에 ebp-24에 저장되있는 값을 mov한다 .

push eax                     - eax를 집어넣는다.


우와 이렇게 해석이 다 끝낫네요 초보자인 저에겐 너무나도 어려웠습니다.

lea 부분들을 보시면 40  > 24 이렇게 바뀌죠 ? 즉 16바이트 씩을 할당 받는다는것을 알 수 있습니다!

buf2에 넘어가도록 buf에 16개를 때려박은후에 buf2에 넘어가는 초기 2바이트를 go로 넣어봅시다!

python -c 'print "A"*16+"go"';cat)|/usr/bin/bof 라는 명령어를 입력하여서 풀면됩니다!

'해커스쿨 ftz' 카테고리의 다른 글

FTZ - LEVEL11  (0) 2016.04.15
FTZ - LEVEL 10  (0) 2016.04.15
FTZ - LEVEL9 (소스)  (0) 2016.04.10
FTZ - LEVEL8  (0) 2016.04.10
FTZ - LEVEL7  (0) 2016.04.10


대망의 BOF 문제의 시작입니다 여태까지 방법만 알면됫던 문제에 비해서는

사앙당히 어렵다고 생각합니다 개인적으로는 흥미를 느끼고 따라왓던 동아리 부원들도 

여기서 대부분 추락할거같군요




빨간줄은 무시하시면 됩니다 주석 편하게 보시라고 VS에다가 작성하였습니다.

BOF기법을 대충 공부하시고 저 소스를 보시면 뭔가가 느낌이 오실겁니다! 그럼 FTZ에서 직접 해보도록하죠!


1을 마아악 넣어도 반응이없네요 !

근데 사실 소스만 읽어보면 buf2에 입력할 방법도 없는데 buf2 바이트2개에 go가 잇어야지 풀린다는군요

이거는 bof 기법을 익혀야지만 알 수 있는데요 저도 제대로 된 지식이 부족하여서 설명은 차후에 제대로 하도록하겠습니다 .

대충 짧은 지식으로 말씀 드리자면 buf가 꽉 차버리면 buf2에 나머지 입력한것들이 들어가게되버립니다! 그것을 이용해서 푸는문제인데요 자 그렇다면 

buf 배열을 꽉채운뒤에 go를 넣어버리면 권한을 얻게 됩니다!


노가다를 해서 결국 얻게되엇습니다! 비밀번호가 나오는군요 

원래 정석으로 푸는방법은 스택을 보고 푸는것입니다. 스택을 보고 다시 한번 풀어보겠습니다 


'해커스쿨 ftz' 카테고리의 다른 글

FTZ - LEVEL 10  (0) 2016.04.15
FTZ - LEVEL9(gdb)  (0) 2016.04.10
FTZ - LEVEL8  (0) 2016.04.10
FTZ - LEVEL7  (0) 2016.04.10
FTZ- LEVEL6  (0) 2016.04.10


평소와 같이 hint를 확인ㄴ해보자 . 

level9의 shadow 파일이 서버 어딘가에 숨어있다

그 파일에 대해 알려진 것은 용량이 "2700"이라는 것 뿐이다 .

딱봐도 용량 2700을 검색해봐라! 라는것을 알수잇군요 

find 명령어를 이용합시다!



find 명령어중에서 size를 찾는 명령어를 이용하여 2700의 size를 가진것들을 찾아보았다.

2700뒤에 붙여져잇는 c는 용량의 크기단위이다!

c > byte k > kbyte 

여하튼 저러한 파일들이 나왓는데 gif 와 압축된 파일들 보다는 txt가 좀 만만하다고 생각된다

물론 개인적이지만.. cd명령어를 이용해서 rc.d까지 간 후 열어보자!


먼저 found.txt가 존재하는지 제대로 확인을 한 후에 cat 명령어로 열어봤더니 

이럴수가 저건 무슨 해괴한 단어들이란 말인가 처음에는 여러가지 언어들이라던가 그런것들을 생각해보았다 . 내가 시스템에 대해서 모르는게 정말 많고 완전 초짜니 모르는 개념일수도 잇겠구나 싶었으나 정답은 암호화된것이였다..

이제 이 암호를 어떻게 복호화해야 하나 싶어서 고민을 계속 하던 와중에 답이 안나와서 결국

멘토님에게 물어보니 툴을 이용해야 한다고 말씀하셧다...그래서 블로그를 찾아서 

크래킹 도구인 John the Ripper를 가져왔다. 

칼리 리눅스 내부에도 내장되어 있지만 동아리 친구들은 그런것을 모를테니 다운받을 수 있는 사이트를 가져왔다 .

http://www.openwall.com/john/

여기서 각자 os에 맞게 다운을받읍시다!


그냥 답도 가져와버렸는데 여하튼 저렇게 복호화햇습니다! 바방-!


'해커스쿨 ftz' 카테고리의 다른 글

FTZ - LEVEL9(gdb)  (0) 2016.04.10
FTZ - LEVEL9 (소스)  (0) 2016.04.10
FTZ - LEVEL7  (0) 2016.04.10
FTZ- LEVEL6  (0) 2016.04.10
FTZ - LEVEL5  (0) 2016.04.10


평소와 같이 hint를 확인하게되면 

저런 문구들이 나타나는군요 

/bin/level7 명령을 실행하면 패스워드 입력을 요청한다는군요 

패스워드는 가까운곳에 , 상상력을 총동원하라 

2진수를 10진수를 바꿀 수 있는가? 계산기 설정을 공학용으로 바꾸어라 

뭔가 넌센스 퀴즈같네요 감이 잡힐듯 말듯하면서 알쏭달쏭하네요 

먼저 그냥 /bin/level7을 실행해보겠습니다

level7를 실행시키네 Insert The Password  : 라는 문구가 나오네요 

아무거나 234를 대충 집어넣어봣더니 저런식의 문구가 뜨네요

저기서 --_--_-같은 문구들이 당연히 답으로 직결된다는건 눈치가 없는 사람 아닌 이상

대충 짐작이 갈것입니다.. 2진수를 10진수를 바꿀 수 잇는가 라는 힌트를 생각해보고 

- = 1 _ = 0 으로 잡아서 한번 써봅시다

1101101 1100001 1110100 1100101 이렇게 2진수가 나오는데 10진수로 변환을 해봅시다 

순서대로 109 97 116 101 이 나오네요 

자 여기서 이제 아스키코드표를 봐봅시다 

109 =M 97 = A 116  = T 101 = E 

MATE라는 단어가 나오는군요    

워게임 제작자분의 의도는 코드를 만들어서 풀어봐라! 였겟지만 저는 실력이 너무나도 

부족하기 때문에 하나하나 찾아가면서 풀었습니다 .

다음에 파이썬 공부를 끝마치면 다시 한번 풀어보고 싶은 문제네요 기억해둬야겠습니다.

'해커스쿨 ftz' 카테고리의 다른 글

FTZ - LEVEL9 (소스)  (0) 2016.04.10
FTZ - LEVEL8  (0) 2016.04.10
FTZ- LEVEL6  (0) 2016.04.10
FTZ - LEVEL5  (0) 2016.04.10
FTZ - LEVEL4  (0) 2016.04.10


어라 이번에는 들어오자마자 힌트가 보이네요 ?

여기서 당황하지 말고 아무런 버튼이나 눌러봅시다

텔넷이면 엄청 옛날에 사용하던거같은데요 ? 

선택지가 3개가 있네요 하지만 여기서 1,2,3중 아무 버튼이나 눌러도 

FTZ가 종료되는 어이 없는 현상을 볼 수가 있습니다 -_-;

그래서 강제로 종료시키는 인터럽트 ctrl + c를 누르면

Can't use ctrl + c 라는 문구가 나오며 

ctrl + d 를 누르면 종료되버립니다 

근데 처음 로그인햇을때 나오는 힌트에서 인터럽트를 시키면?


어라! ctrl + c를 누르니 평소의 반가운 ftz가 보이네요 

ls -al을 이용해 파일들을 확인해보았습니다 근데 어라 저기 hint 아래 잇는 

password는 뭔가요 ? 혹시나 해서 cat으로 엿보니..


level7로 가는 패스워드가 떡 하니 나오는군요 허허 풀이만 안다면 정말

어이없는 문제입니다만 저는 처음 겪을때 정말 욕을 하면서 풀엇습니다..

텔넷........화납니다 잊진 않을듯 하니 다행이네요

'해커스쿨 ftz' 카테고리의 다른 글

FTZ - LEVEL8  (0) 2016.04.10
FTZ - LEVEL7  (0) 2016.04.10
FTZ - LEVEL5  (0) 2016.04.10
FTZ - LEVEL4  (0) 2016.04.10
FTZ - LEVEL3  (0) 2016.04.10


ls -al 명령어를 이용하여 hint가 잇다는것을 확인한뒤

cat 명령어로 hint를 열어보았다.

/usr/bin/level5 프로그램은 /tmp 디렉토리에 

level5.tmp 라는 이름의 임시파일을 생성한다. 라고 되어있습니다 .

간단히 말하면 level5를 실행시킬떄 /tmp 디렉토리에 level5.tmp 임시파일이 생기는데

이 임시파일의 내용을 훔쳐봐라 라는 것이겟지요 ? 

/usr/bin에 가서 level5를 찾아보니 존재하는군요 

level5를 실행한후에 tmp에 가서 ls -al를 해보니 level5.tmp가 생성되잇지 않군요 

임시파일이라서 작업 종료시에 바로 지워지는듯 합니다 .

여기서는 우리가 직접 level5.tmp를 만들어서 바로 사라지지 않도록 한후에 

level5를 실행시켜서 나오는 원래 level5.tmp를 

우리가 직접 만든 level5.tmp에 내용이 저장되도록 해야겠습니다 

cat > 명령어를 이용해서 level5.tmp 파일을 만들엇습니다 속 내용은 그냥 아무거나 제가 집어넣엇구요 

완료하는 방법은 ctrl + d 입니다 ~

그후에 ls 명령어로 출력을 해보니 level5.tmp가 존재하는군요 그러면 이제 level5를 실행시켜봅시다

bin폴더에 존재하는 level5를 실행시켰습니다 . 그러면 우리가 만든 level5.tmp에 복사 되어 잇겠지요 ? 

확인을 해보기 위해서 tmp파일로가서 level5.tmp의 내용을 봤더니 

비밀번호가 출력되네요! 

'해커스쿨 ftz' 카테고리의 다른 글

FTZ - LEVEL7  (0) 2016.04.10
FTZ- LEVEL6  (0) 2016.04.10
FTZ - LEVEL4  (0) 2016.04.10
FTZ - LEVEL3  (0) 2016.04.10
FTZ LEVEL2  (0) 2016.04.10


ls -al 명령어를 이용하여 파일들을 확인후 hint가 존재하기에 

hint를 열어봤더니 누군가 /etc/xinetd.d/에 백도어를 심어놓았다! 라고 적혀있다.

백도어하면 컴을 조종하는 그 무시무시한 친구가 생각이난다..어릴때 당해봐서 신비로웠다..

잡설은 그만하고 한번 이동해보겠다!


이동하여서 ls -al명령어를 사용햇더니 처음부터 대놓고 backdoor가 보인다 

자 그럼 backdoor을 열어보자!


먼저 finger 서비스로 실행이 되고있는 백도어이다.

user 의 권한이 level5이다 다음 비밀번호를 얻기 위한 방법이 등장하였다.

또한 실행바이너리경로는 /home/level4/tmp/backdoor이다 

그러면 저것을 실행시키면 되겟구나! 이동을 해봅시다 


원래는 backdoor가 존재 하지 않아야합니다! 하지만 저희 서버에는

풀어놓은 backdoor와 누군가 동아리원을 위한 hint 파일을 만들어놓앗군요 .

hint를 제외하고 지운 후에 다시 해보겠습니다

없던 백도어를 만들어줘야하므로 backdoor.c라는 이름으로 바이편집기를 이용하여 작성하였습니다 .

my-pass를 실행하도록 하였구요 

그 후 gcc -o backdoor backdoor.c 로 컴파일을 하였습니다.

자 여기서 이제 finger 서비스가 된다 하였으니 finger 명령어를 이용하여 보자 

여기서 finger란 리눅스에서 사용자의 계정을 확인하는 명령어다!

여기서 우리가 사용할 명령어는

finger ~host명 < 이것이다 . 원격서버의 사용자의 계정 정보를 확인하는것이다 

자 그럼 실행시켜보자

자 이렇게 명령어를 실행시키면 아래 비밀번호가 나온다!

(참고로 저는 여러번 해도 안나오길래 엔터를 쭈욱 누르다가 하니 나왔습니다 이유는 자세히 모르겟지만 종종 안나오더라구요.,..참고하시길)

'해커스쿨 ftz' 카테고리의 다른 글

FTZ- LEVEL6  (0) 2016.04.10
FTZ - LEVEL5  (0) 2016.04.10
FTZ - LEVEL3  (0) 2016.04.10
FTZ LEVEL2  (0) 2016.04.10
FTZ - LEVEL1  (0) 2016.04.10


ls -al로 확인후 hint를 열어보았더니 저런 코드가 존재한다 .

또한 more hints로 동시에 여러 명령어를 사용하려면 ? 

                         문자열 형태로 명령어를 전달하려면? 이라고 힌트가 추가적으로 주어졌다.

동아리원들과 저 스스로 확실히 공부하기 위하여 주석을 VS로 주석을 달았습니다.


마찬가지로 level4의 권한이 걸린것을 찾아보았다.

/bin/autodig에 있다는것을 알 수 있다.

/bin/autodig로 접근해봤더니 

아까 if문 안에 있던 문구가 출력된다.

이렇게 접근하는 것이 아닌가보다

/bin 폴더로 이동하여서 ls -al를 했더니 autodig가 존재하는걸 볼수 있다.

여기서 단순히 autodig로 접근하려면 아무 반응도 보이지않는다.

그렇다면 어떡해야지 autodig에 숨어있는 password를 볼 수 있을까 ? 

                         동시에 여러 명령어를 사용하려면 ? ;(세미콜론)을 사용한다.

                         문자열 형태로 명령어를 전달하려면?" " 큰따옴표 안에 묶어준다.

이 두개를 이용해서 생각을 해야한다. 동시에 여러 명령어 , 문자열 형태로 명령어 이 두개를 이용해서 my-pass를 autodig안에 때려박아야한다.

그럼 여기서 my-pass의 경로를 생각해보자 /bin/bash 에서 my-pass를 실행 시켜야한다.

아마 이 두개가 문제의 답인거같다.

그럼 여기서 세미콜론과 큰따옴표를 이용하여서 동시에 문자열 형태로 2개를 한번에 실행시켜보자 .

자 이렇게 autodig에 이렇게 넣어보자! 

여기서 햇갈리는 사람들을 위하여 ./autodig < 여기서 . 하나의 의미는 자신의 디렉토리이고

.. 은 상위 디렉토리이다 

저렇게 때려 박아줫더니 level4의 패스워드가 나온다! 

'해커스쿨 ftz' 카테고리의 다른 글

FTZ- LEVEL6  (0) 2016.04.10
FTZ - LEVEL5  (0) 2016.04.10
FTZ - LEVEL4  (0) 2016.04.10
FTZ LEVEL2  (0) 2016.04.10
FTZ - LEVEL1  (0) 2016.04.10

+ Recent posts