Solución de la tarea con pwnable.kr cmd1, cmd2, asm, blukat. Evita el filtrado en Linux. Escribir shellcode con pwntools

imagen

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 organizacional
Especialmente 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.

imagen

Cuando está conectado, vemos el banner correspondiente.

imagen

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

imagen

Veamos el código fuente.

imagen

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

imagen

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.

imagen

Cuando está conectado, vemos el banner correspondiente.

imagen

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

imagen

Veamos el código fuente.

imagen

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.

imagen

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.

imagen

Cuando está conectado, vemos el banner correspondiente.

imagen

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

imagen

Veamos el código fuente.

imagen

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.

imagen

imagen

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.

imagen

Cuando está conectado, vemos el banner correspondiente.

imagen

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

imagen

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

imagen

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

imagen

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:

  1. Ponemos en la pila una línea: el nombre del archivo.
  2. Abra el archivo con el nombre desde la parte superior de la pila (registro rsp).
  3. 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.
  4. Ahora escribimos en la salida estándar (descriptor 1) una bandera que se encuentra en la parte superior de la pila (registro rsp).
  5. 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() 

imagen

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 .

Source: https://habr.com/ru/post/462091/


All Articles