# 403 & 401 Bypasses {{#include ../../banners/hacktricks-training.md}} ## HTTP Verbs/Methods Fuzzing Спробуйте використовувати **різні дієслова** для доступу до файлу: `GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH, INVENTED, HACK` - Перевірте заголовки відповіді, можливо, можна отримати якусь інформацію. Наприклад, **200 відповідь** на **HEAD** з `Content-Length: 55` означає, що **дієслово HEAD може отримати інформацію**. Але вам все ще потрібно знайти спосіб ексфільтрувати цю інформацію. - Використання HTTP заголовка, такого як `X-HTTP-Method-Override: PUT`, може переписати використане дієслово. - Використовуйте **`TRACE`** дієслово, і якщо вам пощастить, можливо, у відповіді ви також зможете побачити **заголовки, додані проміжними проксі**, які можуть бути корисними. ## HTTP Headers Fuzzing - **Змініть заголовок Host** на деяке довільне значення ([це спрацювало тут](https://medium.com/@sechunter/exploiting-admin-panel-like-a-boss-fc2dd2499d31)) - Спробуйте [**використати інші User Agents**](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/User-Agents/UserAgents.fuzz.txt) для доступу до ресурсу. - **Fuzz HTTP заголовки**: спробуйте використовувати HTTP Proxy **заголовки**, HTTP Authentication Basic та NTLM brute-force (лише з кількома комбінаціями) та інші техніки. Для цього я створив інструмент [**fuzzhttpbypass**](https://github.com/carlospolop/fuzzhttpbypass). - `X-Originating-IP: 127.0.0.1` - `X-Forwarded-For: 127.0.0.1` - `X-Forwarded: 127.0.0.1` - `Forwarded-For: 127.0.0.1` - `X-Remote-IP: 127.0.0.1` - `X-Remote-Addr: 127.0.0.1` - `X-ProxyUser-Ip: 127.0.0.1` - `X-Original-URL: 127.0.0.1` - `Client-IP: 127.0.0.1` - `True-Client-IP: 127.0.0.1` - `Cluster-Client-IP: 127.0.0.1` - `X-ProxyUser-Ip: 127.0.0.1` - `Host: localhost` Якщо **шлях захищений**, ви можете спробувати обійти захист шляху, використовуючи ці інші заголовки: - `X-Original-URL: /admin/console` - `X-Rewrite-URL: /admin/console` - Якщо сторінка **за проксі**, можливо, саме проксі заважає вам отримати доступ до приватної інформації. Спробуйте зловживати [**HTTP Request Smuggling**](../../pentesting-web/http-request-smuggling/index.html) **або** [**hop-by-hop заголовками**](../../pentesting-web/abusing-hop-by-hop-headers.md)**.** - Fuzz [**спеціальні HTTP заголовки**](special-http-headers.md), шукаючи різні відповіді. - **Fuzz спеціальні HTTP заголовки** під час fuzzing **HTTP Methods**. - **Видаліть заголовок Host** і, можливо, ви зможете обійти захист. ## Path **Fuzzing** Якщо _/path_ заблоковано: - Спробуйте використовувати `/%2e/path` (якщо доступ заблоковано проксі, це може обійти захист). Спробуйте також `/%252e**/path` (подвійне кодування URL) - Спробуйте **Unicode обхід**: _/**%ef%bc%8f**path_ (кодування URL символів схоже на "/"), тому, коли його знову закодують, це буде _//path_ і, можливо, ви вже обійшли перевірку назви _/path_ - **Інші обходи шляху**: - site.com/secret –> HTTP 403 Forbidden - site.com/SECRET –> HTTP 200 OK - site.com/secret/ –> HTTP 200 OK - site.com/secret/. –> HTTP 200 OK - site.com//secret// –> HTTP 200 OK - site.com/./secret/.. –> HTTP 200 OK - site.com/;/secret –> HTTP 200 OK - site.com/.;/secret –> HTTP 200 OK - site.com//;//secret –> HTTP 200 OK - site.com/secret.json –> HTTP 200 OK (ruby) - Використовуйте весь [**цей список**](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/Unicode.txt) у наступних ситуаціях: - /FUZZsecret - /FUZZ/secret - /secretFUZZ - **Інші обходи API:** - /v3/users_data/1234 --> 403 Forbidden - /v1/users_data/1234 --> 200 OK - {“id”:111} --> 401 Unauthriozied - {“id”:\[111]} --> 200 OK - {“id”:111} --> 401 Unauthriozied - {“id”:{“id”:111\}} --> 200 OK - {"user_id":"\","user_id":"\"} (JSON Parameter Pollution) - user_id=ATTACKER_ID\&user_id=VICTIM_ID (Parameter Pollution) ## **Parameter Manipulation** - Змініть **значення параметра**: з **`id=123` --> `id=124`** - Додайте додаткові параметри до URL: `?`**`id=124` —-> `id=124&isAdmin=true`** - Видаліть параметри - Переставте параметри - Використовуйте спеціальні символи. - Виконайте граничне тестування параметрів — надайте значення, такі як _-234_ або _0_ або _99999999_ (лише кілька прикладів). ## **Protocol version** Якщо ви використовуєте HTTP/1.1 **спробуйте використовувати 1.0** або навіть перевірте, чи **підтримує 2.0**. ## **Other Bypasses** - Отримайте **IP** або **CNAME** домену та спробуйте **зв'язатися з ним безпосередньо**. - Спробуйте **навантажити сервер**, надсилаючи звичайні GET запити ([Це спрацювало для цього хлопця з Facebook](https://medium.com/@amineaboud/story-of-a-weird-vulnerability-i-found-on-facebook-fc0875eb5125)). - **Змініть протокол**: з http на https, або з https на http - Перейдіть до [**https://archive.org/web/**](https://archive.org/web/) і перевірте, чи був у минулому цей файл **доступний у всьому світі**. ## **Brute Force** - **Вгадайте пароль**: протестуйте наступні загальні облікові дані. Чи знаєте ви щось про жертву? Або назву виклику CTF? - [**Brute force**](../../generic-hacking/brute-force.md#http-brute)**:** спробуйте базову, digest та NTLM аутентифікацію. ```:Common creds admin admin admin password admin 1234 admin admin1234 admin 123456 root toor test test guest guest ``` ## Автоматичні інструменти - [https://github.com/lobuhi/byp4xx](https://github.com/lobuhi/byp4xx) - [https://github.com/iamj0ker/bypass-403](https://github.com/iamj0ker/bypass-403) - [https://github.com/gotr00t0day/forbiddenpass](https://github.com/gotr00t0day/forbiddenpass) - [Burp Extension - 403 Bypasser](https://portswigger.net/bappstore/444407b96d9c4de0adb7aed89e826122) - [Forbidden Buster](https://github.com/Sn1r/Forbidden-Buster) - [NoMoreForbidden](https://github.com/akinerk/NoMoreForbidden) {{#include ../../banners/hacktricks-training.md}}