Burp Suite является если не основным то, пожалуй, одним из главных инструментов пентестера. С момента выхода первого релиза Burp приобрел множество новых функций, появилась платная и бесплатная версии. Однако зачастую при проведении пентеста встроенного функционала не хватает, и в этом случае на помощь приходит Burp Extender – набор интерфейсов для расширения возможностей Burp. Сама программа написана на Java, и писать расширения предлагается также на этом языке. Тем не менее усилиями сторонних разработчиков в настоящее время появилось несколько проектов, цель которых – дать возможность создавать расширения и на других языках. Среди них:
- Buby – позволяет писать расширения на Ruby с использованием jRuby;
- Resty Burp – предоставляет REST/JSON-интерфейс для функционала Burp, что позволяет писать расширения на любом языке (к сожалению, работает только с платной версией Burp).
- Jython Burp API – открывает доступ к интерфейсам Burp Extender на Jython (реализация Python на Java);
Недавно попался сайт, который блокировал IP посетителя, если тот совершал подозрительные действия. Способ обойти такую защиту был найден практически сразу – нужно было лишь добавлять ко всем HTTP-пакетам заголовок X-Forwarded-For со случайным IP. Однако в Burp реализовать такую обработку исходящих пакетов для всех инструментов, в частности Proxy, Spider и Repeater, оказалось невозможным. И здесь на помощь пришел Jython Burp API, который позволил довольно быстро получить необходимый результат. Для этого потребовалось установить Java Development Kit и Jython 2.7, затем в рабочей директории Burp скомпилировать исходники Jython Burp API следующей командой:
javac -cp burpsuite_v1.4.01.jar;jython.jar java/src/*.java java/src/burp/*.java
Для обработки запросов расширение должно реализовывать интерфейсы соответствующих инструментов Burp (например, IProxyRequestHandler, ISpiderRequestHandler, etc) и иметь метод processRequest. В итоге, получилось следующее расширение:
import random
from gds.burp.api import IIntruderRequestHandler, IScannerRequestHandler, IProxyRequestHandler, \
IRepeaterRequestHandler, ISequencerRequestHandler, ISpiderRequestHandler
from gds.burp.core import Component, implements
class RandomIP(Component):
implements(IIntruderRequestHandler,
IProxyRequestHandler,
IRepeaterRequestHandler,
IScannerRequestHandler,
ISequencerRequestHandler,
ISpiderRequestHandler)
headerName = 'X-Forwarded-For'
def processRequest(self, request):
request.raw = request.raw.replace('\r\n\r\n',
'\r\n' + self.headerName + ': ' + self.__generateRandomIP() + '\r\n\r\n',
1)
return request
def __generateRandomIP(self):
s = []
for i in xrange(4):
s.append(str(random.randint(1,254)))
return '.'.join(s)
Расширение было помещено в папку Lib/gds/burpext вместе с необходимым init.py:
__all__ = ('RandomIP')
Все расширения регистрируются в burp.ini, в моем случае было необходимо добавить следующие строки:
[components]
...
gds.burpext.randomip.RandomIP = enabled
[handlers]
intruder.request = RandomIP
proxy.request = RandomIP
repeater.request = RandomIP
scanner.request = RandomIP
sequencer.request = RandomIP
spider.request = RandomIP
И наконец, запуск:
java -cp java/src/;jython.jar;burpsuite_v1.4.01.jar burp.StartBurp -i
В итоге, пробел в функционале Burp был устранен. Надеюсь, данный мануал поможет всем, кто хочет начать писать расширения для Burp на Python.
P.S. Для тех, кто пишет на Java, отмечу свежую статью на английском про организацию окружения для разработки под Burp на Java.
Leave a Reply