<summary><strong>Вивчайте хакінг AWS від нуля до героя з</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Якщо ви хочете побачити свою **компанію в рекламі на HackTricks**або**завантажити HackTricks у PDF** Перевірте [**ПЛАНИ ПІДПИСКИ**](https://github.com/sponsors/carlospolop)!
Якщо вас цікавить **кар'єра хакера**і взламати невзламне - **ми шукаємо співробітників!** (_вимагається вільне володіння польською мовою, як письмово, так іусно_).
1. Якщо вони застосовуються, **перевірте****попередні розширення**. Також перевірте їх, використовуючи деякі **великі літери**: _pHp, .pHP5, .PhAr ..._
2._Перевірте **додавання дійсного розширення перед** розширенням виконання (використовуйте також попередні розширення):_
3. Спробуйте додати **спеціальні символи в кінці.** Ви можете використовувати Burp для **перебору** всіх **ascii** та **Unicode** символів. (_Зауважте, що ви також можете спробувати використати **попередні** згадані **розширення**_)
4. Спробуйте обійти захист **обманом парсера розширень** на стороні сервера за допомогою технік, таких як **подвоєння****розширення**або**додавання сміттєвих** даних (**нульові** байти) між розширеннями. _Ви також можете використати **попередні розширення** для підготовки кращого навантаження._
6. Спробуйте поставити **виконавче розширення перед дійсним розширенням**і моліться, щоб сервер був неправильно налаштований. (корисно для експлуатації помилок конфігурації Apache, де будь-що з розширенням\*\* _**.php**_**, але** не обов'язково закінчується на .php\*\* виконає код):
7. Використання **альтернативного потоку даних NTFS (ADS)** в **Windows**. У цьому випадку після забороненого розширення і перед дозволеним буде вставлено символ «:». В результаті на сервері буде створено **порожній файл з забороненим розширенням** (наприклад, "file.asax:.jpg"). Цей файл може бути відредагований пізніше за допомогою інших технік, таких як використання його короткого імені файлу. Шаблон "**::$data**" також можна використовувати для створення непорожніх файлів. Тому додавання крапки після цього шаблону також може бути корисним для обходу подальших обмежень (.напр., "file.asp::$data.")
8. Спробуйте порушити обмеження імені файлу. Дійсне розширення відсікається. І зловмисний PHP залишається. AAA<--SNIP-->AAA.php
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # відняти 4 тут і додати .png
# Завантажте файл і перевірте відповідь, скільки символів він дозволяє. Скажімо, 236
1. Список слів Content-Type: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt)
* Обійдіть перевірку **магічного числа**, додавши на початок файлу **байти реального зображення** (переплутати команду _file_). Або введіть оболонку всередину **метаданих**:\
* Якщо до вашого зображення додається **стиснення**, наприклад, за допомогою деяких стандартних бібліотек 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.
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.
* Спробуйте також **завантажити виконуваний** файл (.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, які використовуються лише для **імпорту файлів**, тому, на деякому етапі, хтось міг дозволити **це розширення для виконання**.
Якщо ви можете завантажити файл XML на сервер Jetty, ви можете отримати [RCE, оскільки **нові \*.xml та \*.war автоматично обробляються**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Таким чином, як зазначено на наступному зображенні, завантажте файл XML в `$JETTY_BASE/webapps/`і очікуйте оболонку!
Для детального дослідження цієї вразливості перегляньте оригінальне дослідження: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
Вразливості на виконання віддалених команд (RCE) можуть бути використані на серверах uWSGI, якщо є можливість змінити файл конфігурації `.ini`. Файли конфігурації uWSGI використовують конкретний синтаксис для включення "магічних" змінних, заповнювачів та операторів. Зокрема, оператор '@', використовуваний як `@(filename)`, призначений для включення вмісту файлу. Серед різних підтримуваних схем в uWSGI, схема "exec" особливо потужна, дозволяючи читати дані зі стандартного виводу процесу. Цю функцію можна використовувати для злочинних цілей, таких як виконання віддалених команд або запис/читання довільного файлу, коли обробляється файл конфігурації `.ini`.
Виконання полезного навантаження відбувається під час розбору файлу конфігурації. Для активації та розбору конфігурації процес uWSGI повинен бути або перезапущений (можливо, після збою або через атаку з відмовою в обслуговуванні), або файл повинен бути налаштований на автоматичне перезавантаження. Функція автоматичного перезавантаження, якщо вона увімкнена, перезавантажує файл у вказані інтервали при виявленні змін.
Важливо розуміти нестрогий характер розбору файлу конфігурації uWSGI. Зокрема, обговорене полезне навантаження може бути вставлене в бінарний файл (наприклад, у зображення або PDF), що додатково розширює обсяг потенційної експлуатації.
У деяких випадках ви можете виявити, що сервер використовує **`wget`** для **завантаження файлів**і ви можете **вказати****URL**. У цих випадках код може перевіряти, що розширення завантажених файлів знаходиться в білому списку, щоб гарантувати, що будуть завантажені лише дозволені файли. Однак **цю перевірку можна обійти.**\
Максимальна довжина **імені файлу** в **linux** становить **255**, однак **wget** обрізає імена файлів до **236** символів. Ви можете **завантажити файл з іменем "A"\*232+".php"+".gif"**, це ім'я файлу **обійде****перевірку** (як у цьому прикладі **".gif"** є **дійсним** розширенням), але `wget` перейменує файл на **"A"\*232+".php"**.
New name is AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php.
Saving to: ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’
Зверніть увагу, що **інша опція**, яку ви можете розглядати для обходу цієї перевірки, - це зробити **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)
* Якщо ви можете **вказати веб-серверу перехопити зображення з 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)):
Завантажте посилання, що містить символьні посилання на інші файли, потім, звертаючись до розпакованих файлів, ви отримаєте доступ до зв'язаних файлів:
Неочікуване створення файлів у каталогах під час розпакування є значною проблемою. Незважаючи на початкові припущення, що ця настройка може захистити від виконання команд на рівні ОС через зловмисні завантаження файлів, ієрархічна підтримка стиснення та можливості траверсування каталогів формату ZIP можуть бути використані. Це дозволяє зловмисникам обійти обмеження та вийти з безпечних каталогів завантаження, маніпулюючи функціоналом розпакування цільового додатка.
Автоматизований експлойт для створення таких файлів доступний на [**evilarc на GitHub**](https://github.com/ptoomey3/evilarc). Утиліта може бути використана наступним чином:
Додатково, **хитрість символічного посилання з evilarc** є варіантом. Якщо метою є спрямування на файл, наприклад, `/flag.txt`, символічне посилання на цей файл повинно бути створено у вашій системі. Це гарантує, що evilarc не зіткнеться з помилками під час своєї роботи.
Для отримання додаткових відомостей **перевірте оригінальний пост за посиланням**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
3.**Зміна за допомогою Hex-редактора або vi**: Назви файлів всередині zip змінюються за допомогою vi або hex-редактора, змінюючи "xxA" на "../" для переходу по каталогах.
Завантажте цей вміст з розширенням зображення, щоб використати уразливість **(ImageMagick, 7.0.1-1)** (з [експлойтом](https://www.exploit-db.com/exploits/39767))
Вбудовування PHP shell у частину IDAT файлу PNG може ефективно обійти певні операції обробки зображень. Функції `imagecopyresized` та `imagecopyresampled` з PHP-GD особливо важливі в цьому контексті, оскільки вони часто використовуються для зміни розміру та ресемплінгу зображень. Можливість вбудованого PHP shell залишатися незмінним під час цих операцій є значним перевагою для певних випадків використання.
Детальне дослідження цієї техніки, включаючи методологію та потенційні застосування, наведено в наступній статті: ["Кодування веб-шелів у частинах IDAT файлів PNG"](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/)
Поліглотні файли виступають унікальним інструментом у кібербезпеці, діючи як хамелеони, які можуть законно існувати одночасно у кількох форматах файлів. Цікавим прикладом є [GIFAR](https://en.wikipedia.org/wiki/Gifar), гібрид, який функціонує як GIF та архів RAR одночасно. Такі файли не обмежуються цією парою; комбінації, такі як GIF та JS або PPT та JS, також можливі.
Основна корисність поліглотних файлів полягає в їх здатності обійти заходи безпеки, які перевіряють файли за типом. Загальна практика в різних додатках передбачає дозвіл лише певних типів файлів для завантаження - наприклад, JPEG, GIF або DOC - для зменшення ризику, що можуть створювати потенційно шкідливі формати (наприклад, JS, PHP або Phar файли). Однак поліглот, відповідно до структурних критеріїв кількох типів файлів, може хитро обійти ці обмеження.
Незважаючи на їх адаптивність, поліглоти зіштовхуються з обмеженнями. Наприклад, хоча поліглот може одночасно втілювати файл 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)
<summary><strong>Вивчіть хакінг AWS від нуля до героя з</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Якщо ви хочете побачити вашу **компанію рекламовану в HackTricks**або**завантажити HackTricks у PDF**, перевірте [**ПЛАНИ ПІДПИСКИ**](https://github.com/sponsors/carlospolop)!
* Відкрийте для себе [**Сім'ю 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 репозиторіїв.