Недавно на проекте столкнулся с таким механизмом безопасности API, который использует ключи RSA для проверки целостности запросов. Казалось бы и что тут такого...💻
Реализованный механизм призван помешать злоумышленникам манипулировать запросами, но также затрудняет проведение тестирования на проникновение. В каждый запрос вставляется новый заголовок, который формируется с помощью подписи RSA. Как раз вот тут и очень сильно усложняется процесс тестирования. Только представьте каждый раз менять подпись вручную, при смене одной буквы, запятой, вообще любого символа .😰
Формирование подписи:
- приватный ключ
- ключ для проверки
- HTTP-метод запроса
- URI запроса (закодированный в формате URL)
- тело запроса
- объединение строк символом ( \n )
Решением стала автоматизация RSA-подписей. Для плагина Burp Suite я написал скрипт, которым хочу поделиться.
import base64
import subprocess
try:
import urllib.parse as urlparse # Try python 3 first
except ImportError:
import urllib as urlparse # Fallback for python 2
PRIVATE_KEY = "/path/to/key"
SIGNATURE_HEADER = 'XX-Signature'
if messageIsRequest:
print("Executing signature code")
...
Свое решение более подробно с иллюстрацией работы скрипта и плагина, описал в статье, которую недавно опубликовал на habr.
- Статья
- GitHub