# Inicio

Apuntes (ayuda memoria) de diversas herramientas.


# Bash

Bash, Bourne-again shell.

Shebang.

```bash
#!/bin/bash
```

Generación de lista de IDs numéricos.

```bash
for i in $(seq 1 1000); do echo $i >> ids.txt; done
```

Generación de lista de puertos.

```bash
for port in {1..65535}; do echo $port >> ports.txt; done
```

Generación de lista de direcciones IP.

```bash
for a in {1..255}; do
    for b in {1..255}; do
        echo "192.168.$a.$b" >> ips.txt
    done
done
```

Descarga de archivos.

```bash
fileNames=`cat file-names.txt`

for fileName in ${fileNames} ; do  
  curl http://<target>/${fileName} -O ${fileName}
done
```

Convertir a mayusculas.

```bash
x="text"
echo ${x^^}
```


# cURL

Ejecutar cURL utilizando proxy.

```shell
curl <request> -x http://127.0.0.1:8080 -k
```

URL encode de parámetro.

```shell
value=$(echo "<parameter-value>" | jq -sRr @uri); curl -i -s "http://<target>/index.php?parameter=$value"
```


# Docker

## Instalación

Instalación en Kali Linux.

```sh
sudo apt update
sudo apt install -y docker.io
sudo systemctl enable docker --now
sudo usermod -aG docker $USER
```

## Contenedores

Listar contenedores.

```sh
# en ejecución
docker ps
# en ejecución y detenidos
docker ps -a
```

Eliminar un contenedor y también los volúmenes anónimos asociados.

```sh
docker rm -v <container>
```

Eliminar todos los contenedores no utilizados (detenidos).

```sh
docker container prune -f
```

## Imágenes

Listar imágenes locales.

```sh
docker images
```

Eliminar imágen.

```sh
docker rmi <image>
```

Eliminar todas las imágenes no utilizadas (sin contenedor asociado).

```sh
docker image prune -a -f
```

## Volúmenes

Listar volúmenes.

```sh
# todos los volúmenes
docker volume ls
# solo volúmenes no utilizados por ningún contenedor
docker volume ls -f dangling=true
```

Eliminar volumen.

```sh
docker volume rm <volume>
```

Eliminar todos los volúmenes no utilizados (sin contenedor asociado).

```sh
docker volume prune -f
```

## Recursos

Limpieza de recursos no utilizados (contenedores, imágenes, volúmenes y redes).

```sh
docker system prune -a --volumes -f
```


# Git

## Git

### Estados de archivos <a href="#git-configuracion" id="git-configuracion"></a>

* Modificado (modified).
* Preparado (staged).
* Confirmado (committed).

### Configuración <a href="#git-configuracion" id="git-configuracion"></a>

Obtener configuración del repositorio.

```shell
git config --list
```

Configuración de usuario.

```shell
# Globalmente
git config --global user.name "<firstname-lastname>"
git config --global --get user.name

# Repositorio específico
cd <repository-folder>
git config user.name "<firstname-lastname>"
git config --get user.name
```

Configuración de correo electrónico.

```shell
# Globalmente
git config --global user.email "<email>"
git config --global --get user.email

# Repositorio específico
cd <repository-folder>
git config user.email "<email>"
git config --get user.email
```

Establecer color automático de la línea de comandos para Git (facilita la revisión).

```shell
git config --global color.ui auto
```

### Repositorios <a href="#git-repositorios" id="git-repositorios"></a>

Inicializar un directorio existente como un repositorio de Git.

```shell
git init
```

Clonar repositorio a través de una URL.

```shell
git clone <url>
```

### Modificaciones locales <a href="#git-modificaciones-locales" id="git-modificaciones-locales"></a>

Visualizar cambios realizados localmente.

```shell
git status
```

Agregar archivos modificados localmente.

```shell
# Agregar archivo
git add <file>
# Agregar todos los archivos modificados
git add .
```

Confirmar cambios realizados localmente.

```shell
git commit -m "<descriptive-message>"
```

Listar confirmaciones (commits) realizadas.

```sh
git log --pretty=oneline
git log --all --graph --pretty=short -n 5
git log --stat
```

### Modificaciones remotas <a href="#git-modificaciones-remotas" id="git-modificaciones-remotas"></a>

Obtener repositorios remotos.

```sh
git remote -v
```

Identificar diferencias entre los repositorios local y remoto.

```sh
git fetch
git diff main origin/main
```

Fusionar repositorio local con los cambios del repositorio remoto.

```sh
git merge
```

Enviar cambios realizados localmente a repositorio remoto.

```shell
git push
```

Traer cambios de un repositorio remoto a repositorio local.

```shell
git pull
```

### Ramas (branches) locales

Visualizar ramas locales.

```sh
git branch
```

Crear una rama local.

```sh
git branch <branch-name>
```

Cambiar de rama localmente.

```sh
git checkout <branch-name>
```

Crear y cambiar a rama creada localmente.

```sh
git checkout -b <branch-name>
```

Eliminar una rama local.

```sh
git branch -d <branch-name>
```

### Ramas (branches) remotas

Visualizar ramas remotas.

```sh
git branch -r
```

Crear rama en repositorio remoto y enviar los cambios realizados localmente a la nueva rama remota.

```sh
git push origin <branch-name>
```

Crear rama localmente y actualizar desde repositorio remoto.

```sh
git checkout main
git checkout -b origin/<branch-name>
git pull origin <branch-name>
```

Eliminar una rama remota.

```sh
git push origin --delete <branch-name>
```

Git mantiene una lista local de ramas (branches) remotas para cada usuario, en caso de inconsistencias desde un usuario es posible actualizar este listado.

```sh
git remote update origin --prune
```

### Fusionar (merge)

Fusionar rama con la rama activa actualmente.

```sh
git branch
git merge <branch-name>
```

### Restaurar (restore) y revertir (revert)

Restaurar archivo modificado (modified).

```sh
git restore <file>
```

Restaurar archivo preparado (staged).

```sh
git restore --staged <file>
```

Revertir confirmación (commit) realizado.

```sh
git log --pretty=oneline -n 10
git revert <commit-hash>
```

## GitHub CLI

### Repositorios <a href="#github-cli-repositorios" id="github-cli-repositorios"></a>

Clonar repositorio.

```shell
gh repo clone <repository>
```


# Metasploit

## Base de datos

Estado de base de datos.

```shell
msfdb status
```

Iniciar base de datos.

```shell
msfdb init
```

Verificar conexión de Metasploit a la base de datos.

```shell
msfconsole
db_status
```

## Variables

Asignar variable global.

```shell
setg <variable> <value>
```

Eliminar valor de variable.

```shell
unset <variable>
```


# Nessus

Estado del servicio de Nessus.

```shell
 systemctl status nessusd.service
```

Iniciar servicio de Nessus.

```shell
 systemctl start nessusd.service
```

Detener servicio de Nessus.

```shell
 systemctl stop nessusd.service
```

Reiniciar servicio de Nessus.

```shell
 systemctl restart nessusd.service
```

Iniciar servicio de Nessus utilizando proxychains.

```shell
proxychains systemctl start nessusd.service
proxychains /opt/nessus/sbin/nessus-service -D
```


# Nmap

Top ports Nmap.

```shell
# TCP
awk '$2~/tcp$/' /usr/share/nmap/nmap-services | sort -r -k3 | head -n 10 | awk -F '/tcp' '{print $1}' | awk '{print $2}'
awk '$2~/tcp$/' /usr/share/nmap/nmap-services | sort -r -k3 | head -n 10 | awk -F '/tcp' '{print $1}' | awk '{print $2}' | sort -n
awk '$2~/tcp$/' /usr/share/nmap/nmap-services | sort -r -k3 | head -n 10 | awk -F '/tcp' '{print $1}' | awk '{print $2}' | sort -n | tr '\n' ','

# UDP
awk '$2~/udp$/' /usr/share/nmap/nmap-services | sort -r -k3 | head -n 10 | awk -F '/udp' '{print $1}' | awk '{print $2}'
awk '$2~/udp$/' /usr/share/nmap/nmap-services | sort -r -k3 | head -n 10 | awk -F '/udp' '{print $1}' | awk '{print $2}' | sort -n
awk '$2~/udp$/' /usr/share/nmap/nmap-services | sort -r -k3 | head -n 10 | awk -F '/udp' '{print $1}' | awk '{print $2}' | sort -n | tr '\n' ','
```

Ruta de scripts.

```
/usr/share/nmap/scripts
```


# Node.js

## Múltiples versiones

### Linux/Unix <a href="#multiples-versiones-linux-unix" id="multiples-versiones-linux-unix"></a>

* <https://github.com/nvm-sh/nvm>

```sh
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/<version>/install.sh | bash
nvm list
nvm install --lts
nvm current
```

## npm

Ejecutar una aplicación.

```sh
npm install
npm run dev
```

Analizar las dependencias de una aplicación para identificar vulnerabilidades.

```sh
npm audit
npm audit report
```


# Python

## Paquetes <a href="#paquetes" id="paquetes"></a>

Listar paquetes instalados.

```shell
pip freeze
pip list
```

## Entornos virtuales

### Linux/Unix <a href="#entornos-virtuales-linux-unix" id="entornos-virtuales-linux-unix"></a>

Crear entorno virtual.

```shell
# nativo
python -m venv <name>

# virtualenv
pip install virtualenv
virtualenv <name>
```

Ingresar/activar entorno virtual.

```shell
source <name>/bin/activate
```

Salir/desactivar entorno virtual.

```shell
deactivate
```

#### pipx <a href="#entornos-virtuales-linux-unix-pipx" id="entornos-virtuales-linux-unix-pipx"></a>

* <https://github.com/pypa/pipx>

Instalar aplicación en entorno virtual.

```sh
pipx install <package>
```

### Microsoft Windows <a href="#entornos-virtuales-microsoft-windows" id="entornos-virtuales-microsoft-windows"></a>

Instalar entorno virtual.

```sh
pip install virtualenv
```

Crear entorno virtual.

```sh
virtualenv <name>
```

Ingresar/activar entorno virtual.

```sh
# PowerShell
<name>/Scripts/activate.ps1
```

Salir/desactivar entorno virtual.

```sh
deactivate
```

## Múltiples versiones

### Linux/Unix <a href="#multiples-versiones-linux-unix" id="multiples-versiones-linux-unix"></a>

* <https://github.com/pyenv/pyenv>


# Semgrep

https\://github.com/semgrep/semgrep

## Linux/Unix

Instalación con entorno virtual.

```sh
# Instalación
pipx install semgrep
pipx install semgrep==<version>

# Actualización 
pipx upgrade semgrep

# Desinstalación
pipx uninstall semgrep
```

Escaneo general.

```sh
semgrep scan <project-path>
semgrep scan --config auto --text --text-output=semgrep.txt <project-path>
```

Escaneo por patrón.

```sh
semgrep -e '<pattern>' --lang=<language> <project-path>
```

Escaneo por reglas.

```sh
semgrep scan --config <rules.yaml> <project-path>
semgrep scan --config <rules-path> <project-path>
```


# Snyk

https\://snyk.io/

Instalación en Linux.

```sh
curl https://static.snyk.io/cli/latest/snyk-linux -o snyk
chmod +x ./snyk
mv ./snyk /usr/local/bin/
```

Escaneo general.

```sh
snyk code test <project-path>
```

Escaneo de dependencias.

```sh
snyk test <project-path>
```


# SQLite

## sqlite3

Abrir base de datos.

```shell
sqlite3 <database-name>
```

Mostrar información de la base de datos.

```shell
.database
```

Visualizar configuración.

```shell
.show
```

Configurar visualización de encabezados (nombres de columnas).

```shell
.headers on
```

Listar tablas de la base de datos.

```shell
.tables
```

Obtener datos de una tabla.

```shell
SELECT * FROM <table-name>;
```

Modificar el modo de salida de obtención de datos.

```
.mode ascii 
.mode box
.mode column
.mode csv
.mode html
.mode insert
.mode json
.mode line
.mode list
.mode markdown
.mode quote
.mode table
.mode tabs
.mode tcl
```

Salir de sqlite3.

```shell
.quit
```

## DB Browser for SQLite

* <https://sqlitebrowser.org/>

```shell
sqlitebrowser <database-name>
```


# SSH (Secure SHell)

Conexión con contraseña a servicio SSH en una sola línea.

```shell
sshpass -p "<password>" ssh <user>@<IP-address>
```


# tmux

tmux, terminal multiplexer.

## Sesiones

Iniciar una nueva sesión.

```shell
tmux
tmux new
tmux new-session
```

Iniciar una nueva sesión con nombre específico.

```shell
tmux new -s <session-name>
```

Iniciar una sesión con nombre específico y ventana con nombre específico.

```shell
tmux new -s <session-name> -n <window-name>
```

Listar sesiones.

```shell
tmux ls
tmux list-sessions
Ctrl + b s
```

Moverse a la sesión anterior.

```
Ctrl + b (
```

Moverse a la sesión siguiente.

```
Ctrl + b )
```

Eliminar una sesión.

```shell
tmux kill-session -t <session-name>
```

Eliminar todas las sesiones.

```shell
tmux kill-session -a
```

Eliminar todas las sesiones, con excepción de una específica.

```shell
tmux kill-session -a -t <session-name>
```

Renombrar sesión actual.

```
Ctrl + b $
```

Separarse de la sesión.

```
Ctrl + b d
```

Unirse a una sesión específica.

```shell
tmux a -t <session-name>
```

## **Ventanas**

Crear una ventana.

```
Ctrl + b c
```

Renombrar ventana actual.

```
Ctrl + b ,
```

Cerrar ventana actual.

```
Ctrl + b &
```

Moverse a la ventana anterior.

```
Ctrl + b p
```

Moverse a la ventana siguiente.

```
Ctrl + b n
```

Seleccionar ventana por número.

```shell
Ctrl + b <window-number>
```

## **Paneles**

Agregar panel dividido verticalmente.

```
Ctrl + b %
```

Agregar panel dividido horizontalmente.

```
Ctrl + b "
```

Moverse entre paneles.

```
Ctrl + b + ↑
Ctrl + b + →
Ctrl + b + ↓
Ctrl + b + ←
```

Alternar el diseño de los paneles.

```
Ctrl + b spacebar-key
```

Moverse al siguiente panel.

```
Ctrl + b o
```

Mostrar número de paneles.

```
Ctrl + b q
```

Seleccionar panel por número.

```shell
Ctrl + b q <panel-number>
```

Aplicar/quitar zoom sobre panel.

```
Ctrl + b z
```

Convertir panel a ventana.

```
Ctrl + b !
```

Cambiar tamaño de panel.

```
Ctrl + b + ↑
Ctrl + b + →
Ctrl + b + ↓
Ctrl + b + ←
```

Cerrar panel actual.

```
Ctrl + b x
```

## **Modo copia**

Entrar en modo copia.

```
Ctrl + b [
```

Comenzar a copiar.

```
Ctrl + spacebar-key
```

Finalizar copiado.

```
Ctrl + w
```

### Búsqueda

Búsqueda hacia arriba (up).

```
Ctrl + s
```

Búsqueda hacia abajo (down).

```
Ctrl + r
```

Ingresar el texto a buscar y presionar `enter`.

Presionar `n` para ir buscando la cadena continuamente.

Presionar `Shift + n` para ir buscando la cadena continuamente de forma inversa.

Salir del modo copia.

```
q
```

Pegar texto copiado.

```
Ctrl + b ]
```


# Archivos de configuración

## Hosts <a href="#hosts" id="hosts"></a>

```
/etc/hosts
```

## DNS

```
/etc/resolv.conf
```


# Advanced Packaging Tool (APT)

Listar paquetes con actualizaciones pendientes.

```shell
apt update
apt list --upgradable
```

Actualizar solo un paquete.

```shell
apt install --only-upgrade <package>
apt upgrade <package>
```

Eliminar un paquete.

```sh
apt remove <package>
apt remove --purge <package>
```


# Búsqueda y manipulación de texto

## grep

```shell
grep <word> <file>
# Expresiones regulares
grep -Ei "<word-1>|<word-2>|<word-3>" <file>
# Invertir filtro
cat /etc/passwd | grep -Eiv "/usr/sbin/nologin|/bin/false"
```

## sed

```shell
echo "hack the world" | sed 's/world/planet/'
```

## cut

```shell
cut -d ":" -f 1 /etc/passwd
```

## awk

```shell
echo "uno-dos-tres" | awk -F "-" '{print $1, $3}'
```

## tr

```shell
tr --delete '\n' < <file>
tr -d '\n' < <file>
tr -d '[[:space:]]' < <file>
```


# Kali Linux

Cambiar contraseñas predeterminadas.

```shell
# Usuario kali
passwd

# Usuario root
sudo passwd root
```

Modificar hotsname.

```shell
sudo su
nano /etc/hostname
nano /etc/hosts
```

Agregar un nuevo usuario.

```shell
sudo su
adduser <username>
usermod -a -G sudo <username>
usermod -a -G wireshark <username>
chsh -s /bin/zsh <username>
```

Usuario por defecto en pantalla de inicio de sesión.

```shell
sudo nano /etc/lightdm/lightdm.conf
```

{% code title="lightdm.conf" %}

```
[LightDM]
greeter-hide-users=false
user-session=mrw0l05zyn

[Seat:*]
greeter-hide-users=false
user-session=mrw0l05zyn
```

{% endcode %}

Diseño de pantalla de inicio de sesión.

```shell
sudo nano /etc/lightdm/lightdm-gtk-greeter.conf
```

{% code title="lightdm-gtk-greeter.conf" %}

```
background = #77767b
hide-user-image = true
```

{% endcode %}


# Logs

```sh
ls -l /var/log
sudo tail -10 /var/log/auth.log
who /var/log/wtmp | tail -5
journalctl
journalctl -u <systemd-unit>
```


# Monitoreo

## Archivos

```sh
tail -f <file>
tail -n <number-of-lines> <file>
```

## Ejecución de comandos

```sh
watch <command>
watch -n <number-of-seconds> <command>
```


# Procesos

## Sistema

Listar procesos.

```sh
ps -ef
ps aux
ps aux --sort=-%mem
```

Buscar proceso por nombre de aplicación.

```sh
ps -fC <application-name>
```

Procesos que están utilizan un puerto específico.

```sh
lsof -i:<port>
```

Detener un proceso.

```sh
kill <PID>
kill -9 <PID>
```

Detener procesos por nombre.

```bash
pkill -fec <name>
```

## Sesión de terminal actual

Finalizar proceso.

```
Ctrl + C
```

Suspender proceso.

```
Ctrl + Z
```

Enumerar trabajos que se ejecutan en la sesión actual de la terminal.

```sh
jobs
```

Traer un trabajo a primer plano.

```sh
fg
fg %<number>
fg %<name>
```


# Proxy

```sh
export http_proxy=http://127.0.0.1:8080
export https_proxy=http://127.0.0.1:8080
```


# Terminal

Listar variables de entorno.

```shell
printenv
```

Crear variable de entorno.

```shell
export <NAME>="<value>"
```

Eliminar variable de entorno.

```shell
unset <NAME>
```

Borrar el historial de la sesión actual (Zsh).

```sh
local HISTSIZE=0
```


# Usuarios

Crear usuarios.

```sh
useradd <user>
useradd <user> -d /home/<directory>
useradd <user> -g <principal-group>
```

Agregar usuario a grupos.

```sh
usermod -G <group> <user>
```


# Archivos de configuración

## Hosts

```
C:\Windows\System32\drivers\etc\hosts
```


# Símbolo del sistema (cmd)

Privilegios de archivo.

```shell
icacls <file>
```

Visualizar archivos ocultos.

```shell
dir /a:h
```

Ejecutar proceso en background.

```shell
start /B <file.exe>
```

Ejecutar proceso como un usuario en particular.

```shell
runas /user:<user> "C:\<path>\<file.exe>"
```

Vaciar la caché de resolución de DNS (Domain Name System).

```shell
ipconfig /flushdns
```

Eliminación de directorio, incluidos todos los archivos y subdirectorios anidados (recursivamente).

```shell
rmdir /s <directory>
```


