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 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