Comandos
Linux
Find
find es un comando para buscar directorios y archivos en el sistema
podemos utilizarlo para buscar archivos
podemos usarlo para buscar posibles vectores de ataque o escalada de privilegios
Uso :
find / -name passwd
# buscar desde la raiz un archivo con el nombre "passwd"
find / -perm -4000
# buscar archivos con permisos SUID, con el permiso en [[Permisos]] octales
find / -group grupo_2
# buscar archivos con un grupo de usuario especifico
find / -group grupo_2 -type x
# el type sirve para especificar por un tipo de archivo, file o directorio.
# remplazamos la x por estas opciones :
# d : directorio
# f : archivo
find / -user root
# buscar desde la raiz archivos los cuales su propietario sea root
find / -writeable
# buscar desde la raiz archivos con permisos de escritura, lectura o ejecutables
# -writeable : escritura
# -executable : ejecucion
# -readable : lectura
find / -name ho\*
# buscar desde la raiz un archivo que sabes que inicia con ho, pero no sabes que sigue
# otras maneras :
# \*hola
# \*hola\*
# hola\*.sh
-size letra_de_tamaño # busca por archivos de un tamaño especifico
# letras de tamaño:
b : 512 bytes
c : bytes
w : 2 bytes
k : kibibytes (1024 bytes)
m : megabites
g : gigabytes
find -size 102m
# ejemplo buscando archivos de 102 megabites
find / -type f -readable ! - executable
# en esta busqueda descarta todos los archivos que sean ejecutables
Xargs
xargs es un comando que nos permite concatenar comandos en otros
puede ser útil para hacer tareas especificas
encontrar mas información
ser mas rápidos y eficientes
Uso :
find / -perm -4000 2>/dev/null | xargs ls -l
# hacemos un ls a todos los archivos enocntrados en una busqueda del sistema
SSH
SSH, que significa "Secure Shell" o "Cápsula Segura", es un protocolo de red que permite la conexión segura y cifrada a un servidor remoto, facilitando la administración y el acceso a la máquina desde un terminal
puede ser útil para conectarse y trabajar en otras computadoras
es seguro
es dinámico y útil
Uso :
ssh root@example.com -p 22
# conectarse a example.com como root en el puerto 22 (el comun de ssh)
sshpass -p 'password' ssh user@1.1.1.1 -p 443 whoami # nos conectamos y automaticamente despues ejecutamos un comando, nos puede servir tambien si en algun caso por ejemplo se nos expulsa al conectarnos :
sshpass -p 'password' ssh user@1.1.1.1 -p 443 bash
# y nos dara una bash
Los pares de claves SSH son dos claves criptográficamente seguras que pueden usarse para autenticar a un cliente a un servidor SSH. Cada par de claves está compuesto por una clave pública y una clave privada.
El cliente mantiene la clave privada y debe mantenerla en absoluto secreto. Poner en riesgo la clave privada puede permitir a un atacante no autorizado iniciar sesión en los servidores que están configurados con la clave pública asociada sin autenticación adicional. Como medida de precaución adicional, es recomendable cifrar la clave en el disco con una frase de contraseña.
La clave pública asociada puede compartirse libremente sin ninguna consecuencia negativa. La clave pública puede usarse para cifrar mensajes que sólo la clave privada puede descifrar. Esta propiedad se emplea como forma de autenticación mediante el uso del par de claves.
# vamos al directorio de ssh
cd ~/.ssh
# vamos a intentar hacer log in sin necesidad de proporcionar la contraseña
ssh-keygen # genera tus claves para ssh, preberiblemente le damos a enter a todo lo que nos pregunte y nos va a generar 2 archivos : la clave publica y privada
# vamos a configurar la clave publica para que no haya necesidad de poner la contraseña al hacer login en la maquina
# ahi mismo en el directorio de ssh creamos un archivo, con el nombre especifico :
authorized_keys
# otra forma
# si lo ejecutas te pide la password de la maquina y de ahi si lo pones bien se asigna tu clave a las authorized keys de la otra maquina :
ssh-copy-id -i id.rsa user@localhost
# ahi pondremos nuestra clave pública
# conexiones con clave privada
ssh -i id.rsa user@127.0.0.1
Cat
cat es un comando que nos permite leer archivos del sistema de forma rápida y si tenemos permisos de lectura en el archivo el cual vamos a leer
es rápido
es simple
es muy útil
Uso :
cat archivo
# leer un archivo
cat -l java archivo
# leer un archivo con colores como si fuera la sintaxis de java, funciona con los nombres de mas lenguajes de programación
############### Utilidades ##############
# al hacer cat - para leer un archivo que pueda tener ese nombre lo que pasara es que se quedara en pausa porque va a creer que le vamos a dar un parametro. Solucion:
cat /ruta/absoluta/del/archivo/-
cat ./-
# no podemos leer un archivo que tenga espacios en su nombre usando cat de la forma normal ya que pensara que nos estamos refiriendo a varios archivos. Solucion :
cat "espacios en el nombre del archivo"
cat espacios\ en\ el\ nombre\ del\ archivo
cat espacios*
rev
el comando rev nos permite poner en reversa una cadena de texto de forma simple
útil
rápido
simple
Uso :
rev hola
rev file.txt
Whoami
whoami nos permite saber que usuario del sistema somos actualmente
útil
simple
rápido
Uso :
whoami
ls
ls es un comando que nos permite listar lo que hay dentro de un directorio
simple
fácil
rápido
Uso :
ls # listar el contenido del directorio actual
ls -l # listar archivos ocultos
ls -a # listar permisos de los archivos
ls /ruta/de/directorio # listar el contenido de un directorio especifico del sistema
File
file nos permite saber que tipo de archivo es un archivo gracias a los magic numbers
útil
simple
Uso :
file hola.txt
Sed
el comando sed nos permite hacer sustituciones avanzadas de cadenas de texto
útil
Uso :
echo "Hola esto es una prueba" | sed 's/prueba/probando'
# cambia la palabra prueba de la cadena anterior por probando
echo "Hola esto es una prueba" | sed 's/prueba/probandog'
# hace lo mismo pero si hay mas lugares donde en la cadena diga prueba los cambiara tambien en vez de cambiar solo uno
Sort
aplica un ordenamiento alfabético a lo que le indiques en el comando
útil
simple
Uso :
sort file.txt
# ordenar los contenidos de file.txt
Guía
Uniq
el comando uniq nos ayuda a buscar líneas únicas en una cadena proporcionada
útil
simple
uniq -u file.txt
# buscar una cadena unica en file.txt
sort data.txt | uniq -u
# bsucar la cadena unica en data.txt
Guía
https://victorhckinthefreeworld.com/2021/10/21/el-comando-uniq-de-gnu/
Strings
El comando Strings de Linux permite ver los caracteres legibles para humanos dentro de cualquier archivo.
útil
simple
fácil
Uso :
# cuando un archivo no sea legible hay que lanzar este comando
# si le pasamos un archivo a este comando solo nos dira las cadenas de texto imprimibles
strings data.txt
Tail
tail es un comando de Linux que nos permite hacer filtrado de datos por cadenas de texto
simple
útil
Uso :
tail -n 3 data.txt
# filtrar por las ultimas 3 lineas de un archivo de texto
Head
head es un comando de Linux que nos permite hacer filtrado de datos por cadenas de texto
simple
útil
Uso :
head -n 3 data.txt
# filtrar por las primeras 3 lineas de data.txt
Base64
base64 es un comando de linux que nos permite hacer encode y decode de base64 a cadenas de texto
útil
eficaz
simple
Uso :
echo "Hola" | base64
# hacer encode de la cadena de texto hola a base64
cat /etc/hosts | base64 -w 0
# indicamos que la codificacion en base64 en vez de que se haga por varias lineas convertir todo a una sola linea, que puede servir con archivos como se indica en el comando
echo "base64encodeddata" | base64 -d
# hacer decode de una cadena de base64 a texto plano
tee y sponge
tee y sponge nos permiten manipular datos y cadenas de texto en linux
útil
Uso :
# si creamos un archivo con una cadena y filtramos por una parte de esa cadena para despues guardar eso en el mimso archivo quedara vacio, por lo que trabajar con el contenido de un archivo para editarlo no es buena idea. Soluciones :
cat test | filtrado de datos | sponge test
echo "hola" | tee test
7z
7z es un comando de linux que nos permite trabajar con archivos comprimidos de forma eficaz
simple
rápido
útil
Uso :
7z x test.zip # extraer el archivo al directorio actual
7z t test # lista el contenido de un archivo
7z t test # verifica la integridad de un archivo
############### Utilidades ##############
# codigo de extraccion recursiva de comprimido dentro de comprimido
#!/bin/bash
function ctrl_c(){
echo -e "\n\n[!] Saliendo...\n"
exit 1
}
# Ctrl+C
trap ctrl_c INT
first_file_name="data.gz"
decompressed_file_name="$(7z l data.gz | tail -n 3 | head -n 1 | awk 'NF{print $NF}')"
7z x $first_file_name &>/dev/null
while [ $decompressed_file_name ]; do
echo -e "\n[+] Nuevo archivo descomprimido: $decompressed_file_name"
7z x $decompressed_file_name &>/dev/null
decompressed_file_name="$(7z l $decompressed_file_name 2>/dev/null | tail -n 3 | head -n 1 | awk 'NF{print $NF}')"
done
Netcat
netcat es una herramienta de red que permite abrir puertos TCP/UDP en un host, asociar una shell aun puerto concreto y forzar conexiones
útil
simple
Uso :
# conectarse a una maquina por un puerto
nc 1.1.1.1 400
# poner un puerto en escucha
nc -nlvp 443
n : no resolucion DNS
v : verbose
p : puerto
l : listen, escucha
# Ncat puede encriptar el tráfico usando SSL. En el modo de conexión, basta con añadir la opción –ssl.
ncat --ssl 1.1.1.1 445
xxd
Which
which es un comando que nos permite saber si un comando existe mostrándonos su ruta absoluta
útil
simple
Uso :
which whoami
# si te dice la ruta absoluta es que existe, si no te muestra nada es que no existe
diff
encontrar diferencias entre archivos y cadenas de texto
simple
útil
Uso :
diff passwords.old passwords.new
git
git es un comando que nos permite operar con proyectos de git/github tanto internos como los que estan expuestos en internet
util
Uso :
# clonar un proyecto
git clone https://github.com/s4vitar/eviltrust
gti clone ssh://user@localhost/home/user-git/repo
# Con el comando ‘**git log**‘ podremos siempre listar todos los Commits existentes en un proyecto. Lo que obtendremos es un listado de identificadores los cuales podremos aprovechar para, por ejemplo, mediante el uso del comando ‘**git show**‘ seguido del identificador del Commit cuyas propiedades queramos visualizar, ser capaces de ver todos los cambios que se hayan aplicado para un punto dado del proyecto.
git log
git show id_del_commit # ver lo que se cambio en el commit
# En caso de querer volver a un estado del proyecto pasado, podremos hacer uso del comando ‘**git checkout**‘ seguido del identificador del Commit deseado, pudiendo así volver a ese punto de la historia con todos los archivos existentes para ese entonces restaurados.
# El comando ‘**git branch**‘ nos permite crear, enumerar y eliminar ramas, así como cambiar sus nombres. Es importante recalcar que no nos permite cambiar entre ramas o volver a unir un historial bifurcado. Por este motivo, ‘**git branch**‘ está estrechamente integrado con los comandos ‘**git checkout**‘ y ‘**git merge**‘.
git branch -a # ver las ramas
# En **Git**, las **ramas** (o _branches_) son una característica que permite a los usuarios trabajar en diferentes versiones de un proyecto de manera paralela. Una rama es una versión independiente del código, lo que te permite hacer cambios, probar nuevas ideas o desarrollar nuevas funcionalidades sin afectar el código principal.
git checkout nombre_de_rama # ir a una rama.
# En Git, una etiqueta o **tag** sirve básicamente como una rama firmada que no permuta, es decir, siempre se mantiene inalterable. Sencillamente es una cadena arbitraria que apunta a un Commit específico. Puede decirse que un tag es un nombre que puedes usar para marcar un punto específico en la historia de un repositorio.
git tag # listar tags
git show nombre_de_la_tag # mostrar el contenido de la tag
# Los commits son la base principal del trabajo de Git, ya que es el comando más usado para guardar cualquier cambio en esta herramienta. Si te preguntas qué es un **commit**, te puedes hacer una idea al entenderlo **como una captura de pantalla del trabajo que haces cada segundo en Git**, creando en consecuencia una versión del proyecto en el repositorio local.
git add -f key.txt
git commit -m "creamos un archivo nuevo"
git push -u origin nombre_de_la_rama_donde_hicimos_el_commit
Last updated