Kraken
  • 🐙Привет!
    • 👋Добро пожаловать!
  • ✏️Крупицы знаний
    • 🌚Общие статьи
      • Как установить Kali Linux
      • Как поставить виртуальную Kali Linux
      • Что такое CVE
      • Обзор популярных алгоритмов хеширования
      • Модель OSI
      • Какие есть алгоритмы шифрования
      • Что такое TCP/IP
      • HSTS
      • Что такое хеширование и как его используют в ИБ
      • Скрипт для проверки данных SSL-сертификата
      • Шифруем файлы на Kali Linux с помощью OpenSSL
      • Как работает WPA2
      • О протоколе FTP
      • Что такое CVSS
      • Что такое политика одного источника (SOP)
      • О Cross-Origin Resource Sharing (CORS)
      • О Content Security Policy (CSP)
      • Что такое Bash
      • Веб-сокеты
      • MITRE ATT&CK
      • Начало в OSINT
      • Особенности и подходы к тестированию мобильных приложений
      • Что такое REST
      • Что такое API
      • Сравнение безопасности среды iOS и Android
      • CSS в ИБ
    • 🎪Карьера
      • Какие бывают роли у пентестеров и в чем их смысл
      • Какие есть виды пентеста
      • Что входит в пентест
      • Какие есть области знаний в веб-пентесте
      • Главные ошибки новичков в ИБ
    • 😰Уязвимости
      • Об атаке Pastejaking
      • Об уязвимости KRACK
      • Об уязвимости Regex DoS
      • Об атаке MITM
      • Что такое уязвимость нулевого дня
      • Атака на протокол STP
      • Защита протокола STP
      • Clickjacking
      • База при атаке на Wi-Fi
      • Атаки по сторонним каналам
      • DNS ребайндинг
    • ⚙️Инструменты
      • Лучшие сканеры открытых портов и инструменты проверки портов
      • Что такое OWASP ZAP и как он помогает защитить приложения?
      • О фреймворке WiFi Exploitation Framework (WEF)
      • WeBaCoo — поддерживаем доступ к взломанному веб-серверу
      • Socialscan — проверяем использование электронной почты и имен пользователей в соцсетях
      • Обзор инструментов Red Team
      • 11 инструментов для сканирования уязвимостей
      • Подборка инструментов для автоматизации атак на JWT
      • О Bulk_Extractor
      • О Unicornscan
      • О Maryam
      • О Picocrypt, утилите для шифрования данных
      • Анализируем трафик с ZUI (Zed User Interface)
      • Об инструменте SkipFish
      • Как получить уведомления на почту о входе по SSH
      • О сканере OpenSCAP
      • О Censys — инструменте для поиска уязвимых поддоменов
      • О Scanless — инструменте для анонимного сканирования открытых портов
      • О SearchSploit — инструменте для поиска эксплойтов
      • Выбираем менеджер паролей
      • О Maltego
      • Устанавливаем и используем Snyk CLI в Windows
      • Проверяем безопасность Docker-образов с помощью Trivy
      • Об инструменте SpiderFoot
      • Сканируем сети с помощью скриптов Bash
      • О фреймворке Volatility на Windows
      • Определяем тип WAF с помощью WafW00f
      • Об инструменте ReNgine
      • О Foremost — инструменте для восстановления данных
      • Chisel — инструмент для проброса портов
      • O Yersinia
      • Об Acunetix
      • O Netcat
      • O Samba
      • O John the Ripper
      • О Common User Passwords Profiler (CUPP)
      • О RainbowCrack
      • Shodan
      • MobSF
      • Netsparker
      • Fortify
      • Veracode
      • Rapid7 InsightVM
      • Aircrack-ng
  • 🛠️ИНСТРУМЕНТЫ
    • ⌨️Беспроводные атаки
      • Aircrack-Ng
    • 🔑Атаки на пароли
      • Crunch
      • John
      • CUPP
      • Hashcat
      • Hydra
    • 👁️Сбор Информации
      • Masscan
      • Dnsenum
      • Parsero
      • Nmap
  • 👨‍💻Пентест
    • Методология
    • 🖥️Аппаратный/Физический доступ
      • Физические атаки
      • Побег из КИОСКа
  • 👾MITRE
    • 🗺️Тактики
      • 🏢Предприятия
        • Разведка
      • 📱Мобильные устройства
      • 🏭ICS
    • 💀CTI
      • ☠️Группы
        • admin@338
        • Ajax Security Team
        • ALLANITE
        • Andariel
  • 📟Справочник по безопасной разработке
    • 👨‍🔬CLIENT SIDE
      • Cross-Site Scripting [XSS]
      • Cross-Site Request Forgery [CSRF]
      • Clickjacking
      • Open Redirects
    • 🖥️SERVER SIDE
      • SQL Injections [SQLi]
      • XML External Entity Injection [XXE]
      • OS Command Injection [Command Execution]
      • File Upload
      • Server-Side Request Forgery [SSRF]
      • Host Header Injection
      • Аутентификация
      • Directory Traversal
      • Template Injection [SSTI]
    • API
  • 🐝OWASP
    • Cross Site Scripting (XSS)
Powered by GitBook
On this page
  • 1. Введение:
  • 2. Методы смягчения последствий и защиты:
  • 2.1. Использование системы безопасного хранения:
  • 2.2. Различные методы защиты и альтернативы:
  • 3. Выводы:
  1. Справочник по безопасной разработке
  2. SERVER SIDE

File Upload

1. Введение:

Загрузка файлов становится все более и более важной частью любого веб-приложения. Представьте себе приложение, которое можно использовать и в котором нет какой-либо загрузки... их можно пересчитать по пальцам одной руки. Каждый разработчик должен уметь защищаться от ошибок и вредоносных файлов таким образом, чтобы обеспечить безопасность приложения и пользователей.

Одним словом, соблюдение этих правил должно быть достаточным для защиты от любых известных атак, которые могут быть совершены через загрузку файлов:

2. Методы смягчения последствий и защиты:

2.1. Использование системы безопасного хранения:

Зомби, которого нет в вашем доме, не может причинить вам вреда!

Шутки в сторону, один из самых важных подходов к обеспечению безопасности функции загрузки файлов заключается в том, чтобы ваш веб-сервер воспринимал загружаемые файлы как инертные, а не как исполняемые объекты. В этом смысле вы можете выбрать альтернативу хранения загружаемых файлов в CDN (Content Delivery Network), например Cloudflare; возможно, вы уже догадались из моей цитаты про зомби, что таким образом разработчик, по сути, снимает бремя безопасности с третьей стороны, с которой он работает, так что файлы всегда хранятся безопасно таким образом.

Конечно, использование CDN может оказаться не самым лучшим вариантом, и тогда вы можете выбрать одну из других альтернатив, например облачное хранилище (Amazon S3, Google Storage Bucket и т. д.) или даже выделенную CMS (хотя это сопряжено с дополнительной головной болью по настройке и вниманию).

2.2. Различные методы защиты и альтернативы:

Вы можете не использовать CDN или любую из перечисленных выше альтернатив. В таком случае, если вам действительно необходимо загрузить файлы на "локальный" диск, вот что нужно сделать:

  • Переименовывать файлы по мере их загрузки: создание собственной или использование стандартной функции хэширования для имен файлов - хороший принцип, чтобы было сложнее догадаться, где именно были сохранены файлы.

  • Запись на диск без прав на исполнение: это необходимый шаг к обеспечению безопасности процесса загрузки. Существует бесчисленное множество скриптов или исполняемых файлов, которые могут быть использованы злоумышленниками, поэтому вы просто обязаны снять такие разрешения с загружаемых файлов.

import os

file_f = os.open("/path/to/your/file", os.O_WRONLY | os.O_CREAT, 0o600)

with os.fdopen(open(file_f, "wb")) as file_handling:
    file_handling.write(...)
var chmodr = require('chmodr');

chmodr('/path/to/entire/folder', 0o600, (err) => {
  if (err) {
    console.log('Failed to execute chmod', err);
  } else {
    console.log('Success');
  }
});
  • Проверка расширений файлов: убедитесь, что проверка происходит после декодирования имени файла и что установлен соответствующий фильтр, чтобы избежать некоторых известных обходов, таких как следующие:

    • Двойные расширения, например .jpg.php, где легко обходится regex .jpg.

    • Нулевые байты, например, .php%00.jpg, где .jpg обрезается, а .php становится новым расширением.

    • Плохой регекс, который не был должным образом протестирован и проверен. Воздержитесь от создания собственной логики, если у вас нет достаточных знаний по этой теме.

  • Проверка содержимого файла: Поскольку содержимое файла может содержать вредоносные или нежелательные данные, разработчик всегда может провести его дополнительную проверку, основываясь на предполагаемом типе файла:

    • Что касается изображений, то стоит прочитать эти два поста: Inject Executable, malicious code into PNG и How can I be protected from picture vulnerabilities. Переписывание изображений - одна из распространенных техник, которая теоретически уничтожает любой вид вредоносного содержимого, которое может быть внедрено в изображение, и обычно это делается с помощью рандомизации.

    • Загружать ZIP-файлы категорически не рекомендуется, поскольку они могут содержать буквально любые типы файлов, а значит, допускают безграничные возможности.

3. Выводы:

Хотя фундаментальные аспекты загрузки файлов остаются неизменными, разработчики не без оснований начали искать способы "встраивания" систем хранения файлов, которые были бы простыми, безопасными и в целом удобными в использовании.

Last updated 1 year ago

📟
🖥️