
بروكسي اعتراض HTTP/HTTPS لاختبار آليات مصادقة Windows، يدعم NTLM وKerberos وهجمات pass-the-hash وpass-the-ticket والترحيل (relay)، مع توليد شهادات مدمج لاعتراض MITM.
يتعامل وكيل HTTP هذا مع جميع مصادقات HTTP نيابة عنك.
وهو يدعم NTLM EPA (ربط القناة وربط الخدمة)، وKerberos، وpass-the-hash، وoverpass-the-hash (pass-the-key)، وpass-the-ticket (TGT وTGS).
مقالات ذات صلة:
$ # In a venv
$ python3 -m venv venv
$ source venv/bin/activate
$ python3 -m pip install -r requirements.txt
أو يمكنك استخدام pip/pipx لتثبيت المشروع مباشرة
$ # With pip
$ pip3 install git+https://github.com/synacktiv/Prox-Ez
$ # With pipx
$ pipx install git+https://github.com/synacktiv/Prox-Ez
شغّله بهذه الطريقة، سيحاول المصادقة باستخدام بيانات الاعتماد mydomain/myusername:mypassword على أي موقع ويب يتطلب المصادقة:
python3 proxy.py -dc mydomain/myusername:mypassword
نفس الأمر ولكن باستخدام تجزئة NT بدلاً من كلمة المرور:
python3 proxy.py -dc mydomain/myusername --hashes :31d6cfe0d16ae931b73c59d7e0c089c0
لكي يعمل مع BurpSuite:
Project options -> HTTP -> HTTP/2 -> ألغِ تحديد Enable HTTP/2Set response header "Connection: close" لأن NTLM يصادق على اتصال TCP: Proxy -> Options -> Miscellaneous -> ألغِ تحديد Set response header "Connection: close".Set "Connection" header on incoming requests when using HTTP/1: Proxy -> Options -> Miscellaneous -> ألغِ تحديد Set "Connection" header on incoming requests when using HTTP/1بعد ذلك، ما عليك سوى تحديد وكيل علوي (upstream proxy) في Burp، بحيث يستخدم هذا الوكيل للمضيف الذي لا يمكنك المصادقة معه:
Project options -> Connections -> Upstream Proxy Servers -> انقر على Add -> حدد اسم المضيف البعيد الذي يسبب مشاكل مع مصادقة NTLM، ومضيف الوكيل والمنفذ المكوّنين في الأداة، واترك Authentication type على None.$ python3 proxy.py -h
usage: proxy.py [-h] [--listen-address LISTEN_ADDRESS] [--listen-port LISTEN_PORT] [--cacert CACERT] [--cakey CAKEY] [--cakey-pass CAKEY_PASS] [--certsdir CERTSDIR] [--singleprocess] [--debug] [--dump-keys DUMP_KEYS] [--creds CREDS]
[--default-creds DEFAULT_CREDS] [--hashes HASHES] [--kerberos] [--dcip DCIP] [--spn SPN] [--spn-force-fqdn] [--no-epa]
Prox-Ez: The Swiss Army Knife of HTTP auth.
optional arguments:
-h, --help show this help message and exit
--listen-address LISTEN_ADDRESS, -l LISTEN_ADDRESS
Address the proxy will be listening on, defaults to 127.0.0.1.
--listen-port LISTEN_PORT, -p LISTEN_PORT
Port the proxy will be listening on, defaults to 3128.
--cacert CACERT Filepath to the CA certificate, defaults to ./cacert.pem. Will be created if it does not exists.
--cakey CAKEY Filepath to the CA private key, defaults to ./cakey.pem. Will be created if it does not exists.
--cakey-pass CAKEY_PASS
CA private key passphrase.
--certsdir CERTSDIR Path to the directory the generated certificates will be stored in, defaults to /tmp/Prox-Ez. Will be created if it does not exists.
--singleprocess, -sp Do you want to be slowwwww ?! Actually useful during debug.
--debug, -d Increase debug output.
--dump-keys DUMP_KEYS, -dk DUMP_KEYS
File to dump the SSL/TLS keys to. Useful when trying to debug. When this option is specified, --singleprocess is implied.
--creds CREDS Path to the credentials file, for instance: { "my.hostname.com": { "creds": "domain/user:password", "spn": "HTTP/anothername" }, "my.second.hostname.com": { "creds": "domain1/user1", "hashes": ":nthash1" } }
--default-creds DEFAULT_CREDS, -dc DEFAULT_CREDS
Default credentials that will be used to authenticate.
--hashes HASHES Could be used instead of password. It is associated with the domain and username given via --default_creds. format: lmhash:nthash or :nthash.
--kerberos, -k Enable kerberos authentication instead of NTLM.
--dcip DCIP IP Address of the domain controller (only for kerberos).
--spn SPN Use the provided SPN when an SPN is needed. More details in the article.
--spn-force-fqdn Force the usage of the FQDN as the SPN instead of what was specified in the URL.
--no-epa Deactivate the NTLM EPA feature.
DEBUG:Proxy.ProxyToServerHelper:Our state: MIGHT_SWITCH_PROTOCOL; their state: SEND_RESPONSE
[...]
assert self.conn.our_state in [h11.DONE, h11.MUST_CLOSE, h11.CLOSED] and self.conn.their_state is h11.SEND_RESPONSE
AssertionError