Linux tips

named pipe: like normal pipes ( | ), but between two different terminals:

In one terminal:

```
mkfifo pipe

cat < pipe

```

In another terminal:

```
ls -l > pipe1

```

And the first receives the output from the second

ldd: The ldd command shows what dynamic libraries an executable file uses. Can be used several times on the same file to check if an OS is using ASLR if a library is every time on a different address.

###### ========================

dos2unix convierte entre formatos de archivos entre distintos OS, parece. ippsec lo usa una vez que vio en un script sherlock.ps1 que le salia unicode, y lo uso para que se convirtirera. lo hace en el video de la maquina bastard

\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*

If we find a .cap file and with wireshark we see protocol 802.11, it is wifi traffic, and the password can be cracked with aircrack-ng file.cap -w /path-to-dictionary/dictionary.txt

Executing "sudo -l" we are able to see if the current user can run commands and sudo, and if he can, whether he needs a password or not\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* (ejemplos)

Compile with mingw:

```
i686-w64-mingw32-gcc 80.c -lws2_32 -o 80.exe

```

And run the executalbe

```
wine 646.exe 10.11.1.35

```

grep recursively to find a text in files in subdirectories:

```
grep -rl "string" /path

```

Grep for everything starting with "pass":

```
grep ^pass

```

Find files:

```
find /path -name program.c

```

###### ==================

en bash, si se quiere hacer fuzzing de un programa que espera un argumento usando python one line, se tiene que meter el argumento en $(), como en stack1 de protostar: ./stack1 $(python -c “print ‘a’\*64+'dcba'”)
grep de varias cosas a la vez. se puede usar egrep, o grep -E (extended grep ambos). and es .\*
searchsploit transaction | egrep -i microsoft.\*ktm
lo anterior busca los resultados que contengan microsoft y ktm, independientemente de las mayusculas
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*+

Add a line at the beginning of a file (useful for big files that take a while to load in editors)

```
sed -i '1 i\newWord' rockyou.txt

```

Adds "newWord" to rockyou.txt

irb opens a ruby interactive console

rdesktop, to connect to a graphical session, if a windows machine allows that (port 3389)

```
rdesktop -u user -p password 192.168.1.100

```

Also, we can set the resolution of the remote desktop:

```
rdesktop -g 1000x600 192.168.1.100

```

Send GET requests with netcat:

```
nc -nv 192.168.1.100 8080

(UNKNOWN) [10.11.1.145] 8080 (http-alt) open

GET /workorder/FileDownload.jsp?module=agent&&FILENAME=%20..\..\..\..\..\..\..\..\..\windows\repair\SAM

Host: 192.168.1.100

Connection: close

<enter>

```

In the guest request we don't pass host IP, that goes in Host. We should receive HTML code if everything went well

In an interactive Python terminal we can do interactively hexadecimal operations, writing all numbers with a format like 0x0bfff7sd. Hexadecimal is understood if the number is preceded by 0x.

If we have access to a very bad shell, which outputs text but we cannot scroll up, we can use sed. For example, to see from line 5 to line 8 of a file:

```
sed -n 5,8p file

```

Esto parece importante para jeff, poniendo mtu 900
Cambiar la MTU de una interfaz de red en Linux
Para **cambiar la MTU** (tamaño máximo del paquete) de una interfaz de red en **Linux** existen dos metodos, el clasico con **ifconfig** y el que debe substituirlo, el comando **ip**. Vamos a verlos ambos y como hacer dichos cambios permanentes en sistemas **RHEL**, **CentOS**, **Fedora** y derivados.
 Para hacer el cambio con **ifconfig** es tan simple como lo siguiente:
 # ifconfig eth3 mtu 9000

ifconfig esta en /sbin/ifconfig. Si no funciona, puede que haga falta hacer export PATH=$PATH:/sbin

con nc se puede transmitir binarios al igual que archivos de texto

scp se puede usar para copiar archivos si tenemos cuenta ssh:
 scp ~/rebels.txt dvader@deathstar.com:~/revenge
para copiar una carpeta entera
scp -r dvader@deathstar.com:~/revenge ~/revenge
mas info en
https://kb.iu.edu/d/agye

cron jobs:
With "crontab -l" crons are shown. The cron job "run-parts" that sometimes is present means "execute all scripts in the indicated folder", with the frequency given by the first symbols \* (or numbers) in the first column of each row. Cron jobs can also be placed in /etc/cron.d and the cron daemon takes them into account and executes them when appropriate. The \* symbols indicate once every time unit (minute, hour, day, month, etc). When \* is divided by a number, the frequency is divided (for instance \*/5 in the first column means execute the job once every 5 minutes).

ps auxww is like ps aux, but doesn't crop long lines (sometimes we may miss the name of a process because of this).

When the ps command outputs processes between brackets [ and ], it is because it hasn't found the arguments with which that proces has been run.

If virtualbox stops working and is unable to load virtual machines and the host gets unresponsive to keyboard or mouse, it may be due to having boot the computer with with a kernel different from that which virtualbox is expecting (typically because of a kernel update). The following has worked in ubuntu:
dpkg-reconfigure virtualbox-dkms

Or we can boot the host selecting the older kernel.

si por lo que sea no se puede usar cat para leer archivos, y la shell no es interactiva, por lo que tampoco se puede usar more o less, se puede usar grep: grep '[a-zA-Z0-9]' /etc/passwd

sticky bit, para permisos de directorios, cuando es una t en vez de una x:
Hoy en día, el sticky bit se utiliza con directorios. Cuando se le asigna a un directorio, significa que los elementos que hay en ese directorio sólo pueden ser renombrados o borrados por el propietario del elemento, el propietario del directorio o el usuario root, aunque el resto de usuarios tenga permisos de escritura y, por tanto, puedan modificar el contenido de esos elementos.

en passwd, los users que al final de la linea tienen como shell /bin/false no pueden logearse. imagino que /usr/sbin/nologin tampoco

parece que si somos euid=0 ya es root (effective users), no solo uid=0

el comando sudo se puede usar para ejecutar comandos como otro usuario especifico, no root, ocn la opcion -u
sudo -u user1 comando.

si se va a modificar un script para añadirle cosas para privesc, porque lo ejecute un cron, etc, hacer una copia del original primero, es muy facil cagarla y luego se pierde mucho tiempo rehaciendo el original

sudo sin contraseña : en /etc/sudoers, tras la linea
root ALL=(ALL) ALL
ponser
nombre\_usuario ALL=(ALL) NOPASSWD: ALL
o mas facil
ALL ALL=(ALL) NOPASSWD: ALL
para que todos puedan correr sudo sin pass

si un programa ejecuta un comando a traves de /usr/bin/env, quiere decir que va a buscar ese comando en las distintas carpetas del $PATH. asi que podemos crear un script, HACERLO EJECUTABLE, y llamarlo igual que el programa que deberia ejecutarse, pero poniendo nuestro codigo, y el programa que llamam a system ejecutara nuestro script con los permisos del programa que llama a system. es lo que pasa en level01 de nebula, con el comando  system("/usr/bin/env echo and now what?");  ejecutado por un programa con SUID. hay que añadir al path, delante de todas las demas carpetas, aquella donde hemos colocado nuestro evil script, asi se encontrara primero el nuestro al buscarn en usr/bin/env. para saber si podemos hacer esto, deberiamos tener acceso al codigo fuente del programa, aunque siempre se puede probar a ver si cuela

si al intentar abrir alguna aplicacion de terminal que requiera colores da el fallo:
Error opening terminal: xterm-256color.
hacer:
export TERM=xterm
pasa en kioptrix3

para poder editar en vim archivos en remote shell sin que haga cosas raras, es porque las dos terminales, la local y la del host tienen distinto numero de filas y columnas. hay que hacer en  nuestro kali "stty size", y dara  2 numeros, las filas y las columnas. luego hay que hacer en el remoto, desde bash, fuera de vim, stty rows x cols y, poniendo en x e y los numeros que nos diera en el local

al hacer symbolic links hay que especificar el camino entero al archivo original, y en el camino del link, si no se pone nada, lo crea en el path actual.

si tenemos algo tipo nc abierto, ctrl-z para mandar a bg, y fg para traerlo de nuevo

puede haber cron jobs tambien en /var/spool/cron

para BOF: si hay que pasar input a un programa cuando se ejecuta, no es lo mismo escribirselo cuando esta corriendo, esperando input, que exportar algo con printf o python print y pasarselo al programa por pipe. especialmente importante al pasar valores en hex. pasa en protostar

readelf para ver contenido de binarios, en que direccion esta cada fuuncion, etc, pero no parece assembly

binary ninja esta guapo para debug, pero es de pago (creo que se parece a radare pero en guay con graficos). con radare se haria (lo hace ippsec en charon)
r2 supershell
aaa
afl #analyze function list
v # para visualizacion
p # dando a p varias veces se cicla por distintas vistas (panes)
V # modo grafico. parece que dando a v (o es b?) se va pasando por distintas funciones
g # con lo anterior nos habiamos puesto en main, y g es “go”, muestra la conexion de las distintas funciones
a este grafico de conexiones se puede llegar directamente sin todo lo anterior poniendo
:> s sym.main #(y enter 2 veces)

find / -perm -5000 2>/dev/null | xargs ls -la
xargs ejecuta comandos a partir de standard input

umask 000: parece que cuando se pone todos los archivos que se creen tendran permisos 666 o 777

parece que los cron.daily, que es donde mas hay pueden variar un poco de sistema a sistema, pero puedo hacer cat /etc/cron.daily en mi propio host ubuntu para comparar con los que den los scripts de privesc

ojo, si encuentro paquetes pcap para mirar con wireshark, asegurarme de que no este aplicando ningun display filter, porque puede ocultar cosas esenciales, como en troll, el contenido de un ftp transfer

ftp puede abrir conexiones a otro puerto de nuestro cliente. se usa port x,x,x,x,x,x, siendo las 4 primeras x la ip nuestra y las dos segundas, el puerto, expresado en 2 bytes hex, de forma que al poner juntos los dos y se convierta, de el puerto en decimal. mirar http://searchenterprisewan.techtarget.com/tip/Understanding-the-FTP-PORT-command. esto aparece en troll, aunque no llega a hacer falta, pero lo que pasa es que al escuchar en el segundo puerto llega ahi el output del comando que se mande al puerto 21, y se cierra el listener

en passwd file, despues de grupo va GECOS en la 5º posicion, es para poner info para identificar o dar mas info de que es ese user. despues va el home directory, y por ultimo la shell. estas cosas se añaden con useradd y distintas opciones, -c, -e, -s (comment, expiration, shell)

epoch: numero de dias desde jan 1 1970, se usa en shadow

groupadd para crear grupos

su -u user1: para shell de como user1

para leer un archivo llamado - hay que usar cat ./-

al crear un user, solo pertenece por defecto a un grupo del mismo nombre que el user

en shadow, si la pass sale como ! es que aun no se ha asignado, acaba de crearse el user

mostrar archivos recursivamente de subdirectorios: ls -laR

decodificar un string en base64: cat xxx.txt | base64 --decode

chgrp es para cambiar el group owner de un archivo (todos los que pertenecen al grupo tienen permisos de grupo). es como chown pero para el grupo

/etc/skel: los contenidos de la carpeta skeleton se copian a las home directory de los usuarios que se crean nuevos

chage -l user: da settings de contraseña del user

passwd -l user: bloquea la pass de la cuenta de user. con passwd -u user se desbloqua. con -e se puede dar fecha de expiracion a la contraseña

groupadd para añadir grupos. se puede añadir nombres de users en /etc/groups al final de la linea correspondiente, separados por coma, y con id se ve que nuestro user ahora esta en otro grupo. tambien se puede usar usermod, pero hay que tener cuidado con las optiones (normalmente -a para append, y añadir users al grupo): usermod -aG account laura

para evitar errores de permission denied al hacer grep para buscar algo como los archivos de cierto tamaño o owner:
ls -laR 2>/dev/null | grep bla
lo importante es poner lo primero el dev null, si no los errores se transmiten al grep

se puede usar el comando tr para shiftear cada letra de un string por la misma cantidad. por ej, para cambiar cada letra 13 posiciones (como la funcion rot13, que aplicada 2 veces devuelve lo mismo al haber 26 letras): cat data.txt | tr '[A-Za-z]' '[N-ZA-Mn-za-m]' (se indica los dos rangos, el inicial y la correspondecia final de como hay que shiftear)

con shift-av pag o shift re-pag se hace scroll en las tty de linux de solo texto

en el archivo /etc/hosts se hace como DNS de forma local, se asigna ips a dominios. es util en game of thrones, aunque no entiendo bien por que, algo por atras debe estar checkeando que se accede al dominio y no a la IP, buscando por la IP a la carpeta que queremos de winterfell lleva  a un decoy

archivo /var/log/auth.log -> contine info de todas las autenticaciones, tipo su, sudo, ssh, etc

xxd -r -p (la p no entiendo bien que hace, pero para com80 de vulnhub hizo falta) sirve para convertir un hexdump en binario. ojo, no poder ejecutar el binario (porque falten librerias, etc), no quiere decir que no podamos ver que strings hay dentro, etc. para poder hacer xxd hay que haber quitado los numeros de lineas en la primera columna, y el ascii dump, y cualquier posible cabecera. puede que el hexdump original de ascii distintos que el hexdump al binario recuperado con xxd. para recuperar un hexdump de 8 columnas para pasar a xxd: cat a.hex | awk -F " " '{print $2 $3 $4 $5 $6 $7 $8 $9}' > b.txt; xxd -r -p b.txt > c.exe

strace: para seguir la pista a como se hace llamadas al sistema

binwalk tambien vale para ver cosas ocultas o ejecutables en un binario. en nineveh ippsec hace binwalk -Me nineveh.png para extraer cosas que forman parte de una imagen

privesc con wildcards: algunos archivos a los que se puede pasar wildcards pueden ser engañados, creando archivos con nombres que realmente se interpretan como argumentos para los comandos. mirar articulo: https://www.defensecode.com/public/DefenseCode\_Unix\_WildCards\_Gone\_Wild.txt

si podemos ejecutar comandos individuales como otro user con sudo -l user, se puede crear un python pty y ejecutarlo como ese user para tener shell completa

si hay algun cron que ejecuta scripts, asegurarnos de que esta con chmod +x lo que queramos que se ejecute, como en bashed de hackthebox

para ejecutar comandos como otro user: sudo -u user1 comando. Para ejecutar una shell como ese otro user: sudo -u user1 bash. Esto se usa en bashed de hackthebox

si en kvm, para instalar xp por ejemplo, pide un archivo del disco a mita de la instalacion, en vista>detalles y en cdrom buscar la iso, con eso ya se entero y siguio la instlacion ok