Как найти флаг в файле

Обновлено: 04.07.2024

Каждый процесс поддерживает соответствующий флаг fd для всех открытых файлов. В настоящее время определен только один флаг дескриптора файла: FD_CLOEXEC: если флаг fd файла установлен (то есть 1), когда процесс выходит из дочернего процесса, дескриптор файла должен быть закрыт перед выполнением exec.

  • Флаг close_on_exec - это битовый флаг всех файловых дескрипторов процесса.Каждый бит представляет дескриптор открытого файла и используется для определения состояния FD_CLOEXEC (1, установлено; 0, очищено) открытого файла.
  • FD_CLOEXEC по умолчанию равен 0, поэтому дескрипторы файлов, унаследованные дочерним процессом, по умолчанию открыты. (Проблема безопасности "Сверхмощность")
  • Установите флаг закрытия при выполнении файла: fcntl (fd, F_SETFD, flags | FD_CLOEXEC), чтобы установить (сначала флаги можно получить с помощью F_GETFD).
Проблемы безопасности, вызванные FD_CLOSEEXEC

Когда родительский процесс открывает определенные файлы и разветвляет дочерний процесс, дочерний процесс будет иметь разрешения на чтение для этих файлов по умолчанию, но во многих случаях дочерний процесс не хочет иметь так много разрешений. —— Решение: установите флаг FD_CLOSEEXEC и закройте унаследованный открытый файл перед запуском новой программы.

  • Если это сокет, поскольку сам сокет fd содержит такую ​​информацию, как локальный IP-адрес, номер порта и т. Д., Если сокет fd унаследован и занят дочерним процессом или не закрыт, это вызовет новый родительский процесс перезапустить и не использовать эти сетевые порты в обычном режиме Серьезно Устройство отключено.
  • Пример: на веб-сервере он сначала будет запущен с привилегиями root, чтобы открывать порты, журналы и другие файлы, которые могут быть открыты только с привилегиями root. Затем отключите питание обычных пользователей, отключите некоторые рабочие процессы, а затем выполните дальнейшие операции, такие как анализ сценариев, запись журналов и вывод результатов в этих процессах. Это неявная проблема безопасности: дочерний процесс наследует fd родительского процесса, поэтому скрипту, запущенному в дочернем процессе, нужно только продолжить работу с этими fd, и он может использовать обычные разрешения для «неавторизации» файлов, которыми может управлять пользователь root.

2. Флаг состояния файла.

Укажите атрибуты статуса файла, которые задаются параметром flags для open. В отличие от «соответствующего процесса флага дескриптора файла», флаг состояния файла используется всеми флагами дублированных файлов, подключенными к одному и тому же открытому файлу (когда задействован dup, флаг состояния fd используется совместно, пока используется общая запись в таблице файлов).

Классификация флагов состояния файлов

1. Логотип метода доступа: Указывает, что идентификатор файла разрешено использовать для чтения, записи или и того, и другого, включая O_RDONLY, O_WRONLY и O_RDWR.

  • Эти методы доступа выбираются при открытии файла и не могут быть изменены впоследствии.
  • Метод доступа к файлу можно получить с помощью функции fcntl. —— Так как режимы доступа для чтения и записи не занимают по одному биту каждый, переносимый метод получения режима доступа к файлу состоит в использовании слова маски O_ACCMODE для выполнения побитовой операции И ('&') со значением флага состояния файла, чтобы получить бит режима доступа, а затем сравнить результат с этими 3 значениями одно за другим (функция APUE set_fl).

2. Подпишите при открытии: Укажите некоторые параметры, которые влияют на поведение при открытии файлов.

  • Эти параметры не сохраняются после открытия файла, за исключением O_NONBLOCK.Поскольку O_NONBLOCK также является режимом работы ввода-вывода, этот флаг сохраняется.
  • O_CREAT: если установлено, создавать и открывать этот файл, когда файл не существует.
  • O_EXCL: если O_CREAT и O_EXCL установлены одновременно, открытие завершается ошибкой, когда указанный файл уже существует. Убедитесь, что не повредили существующие файлы.
  • O_TRUNC: усечь файл до нулевой длины.Эта опция полезна только для обычных файлов и не полезна для специальных файлов, таких как каталоги или FIFO.
  • O_NONBLOCK: предотвращает длительную блокировку открытия файла. Обычно это имеет смысл только для устройств, сетей и файлов конвейера. Этот флаг также используется как флаг режима работы ввода-вывода, что означает, что указание O_NONBLOCK в открытом состоянии также устанавливает неблокирующий режим ввода-вывода. Следовательно, чтобы открыть файл без блокировки и не повлиять на нормальный блокирующий ввод-вывод, вы должны сначала установить O_NONBLOCK для вызова open, а затем вызвать fcntl, чтобы закрыть этот бит.

3. Флаг режима работы ввода / вывода.: Используйте рабочий метод чтения / записи fd. Эти флаги устанавливаются с помощью open () и могут быть получены и изменены позже с помощью fcntl ().

  • O_APPEND: используется для дополнительной записи. Если этот бит установлен, все операции write () записывают данные в конец файла независимо от его расположения. Это единственный надежный способ добавить данные в конец файла. Дополнительный метод может гарантировать, что независимо от того, записывают ли другие процессы тот же файл или нет, операция write () всегда записывает данные в конец текущего файла. Напротив, если этот бит не установлен, если вы просто переместите позицию файла в конец файла, а затем запишите данные, после установки позиции файла перед записью могут быть другие процессы, расширяющие файл (соответствующие два разных Когда процессы открывают один и тот же файл, они используют один и тот же vnode, но каждый имеет свою собственную системную таблицу открытых файлов и, следовательно, имеет свое собственное местоположение файла), в результате чего записанные данные появляются где-то перед концом фактического файла.
  • O_NONBLOCK: используется для неблокирующего ввода-вывода.
  • O_ASYNC: используется для управляемого сигналами ввода-вывода (асинхронный ввод-вывод). Если этот бит установлен, сигнал SIGIO будет генерироваться при наличии входных данных в идентификаторе файла.
  • O_SYNC: используется для синхронизации ввода-вывода. Если этот бит установлен, файл открывается в режиме синхронного ввода-вывода, и любая операция, которая записывает файл, будет блокировать вызывающий процесс до тех пор, пока не будут выполнены все данные в буфере ввода-вывода ядра и атрибуты файла, связанные с этой записью. записано на физический носитель.
  • O_DSYNC: используется для синхронизации ввода-вывода данных. Если этот бит установлен, файл открывается в режиме синхронного ввода-вывода, и любая операция, которая записывает файл, будет блокировать вызывающий процесс до тех пор, пока данные буфера ввода-вывода ядра не будут записаны на физический носитель. Однако, если записанные данные не влияют на чтение только что записанных данных, они не ждут обновления атрибута файла.
  • O_RSYNC: если этот бит установлен, файл будет открыт в режиме синхронного ввода-вывода, и любая операция по чтению файла будет ожидать завершения всех операций записи в одну и ту же область с помощью O_DSYNC и O_SYNC. Если флаги O_SYNC и O_RSYNC установлены одновременно, операция чтения блокируется до тех пор, пока атрибут времени доступа файла не будет записан на физический носитель данных. Если флаги O_DSYNC и O_RSYNC установлены одновременно, операция чтения будет заблокирована до тех пор, пока все данные, относящиеся к поддержанию целостности файла, не будут записаны на физический носитель данных.

Проще говоря, основная функция флагов O_SYNC, O_DSYNC и O_RSYNC - записывать данные непосредственно на диск или читать их прямо с диска.

Три, схема структуры данных ядра открытого файла

这里写图片描述

这里写图片描述

这里写图片描述

Знайте из трех картинок выше:

  • У процесса есть свой собственный флаг дескриптора файла и запись в таблице файлов (флаг состояния файла, текущее смещение) для каждого открытого файла. Когда дочерний процесс разветвляется, дескриптор открытого файла и флаг дескриптора файла наследуются по умолчанию, а записи таблицы файлов копируются, а не совместно используются, гарантируя, что каждый процесс получит свою собственную запись таблицы файлов.
  • Во время dup - запись в таблице общих файлов в процессе, то есть флаг состояния общего файла и текущее смещение. Но dup сбросит флаг FD_CLOEXEC, поэтому процесс fork по-прежнему открывает файл и копирует запись в таблице файлов.
  • Наследуйте файловый дескриптор и наследуйте флаг файлового дескриптора. Запись в таблице общих файлов, то есть флаг состояния общего файла и текущее смещение.

В-четвертых, функция интерфейса

dup / dup2: копировать существующий файловый дескриптор

dup: Возвращает минимальное значение доступных дескрипторов файлов. FD_CLOEXEC по умолчанию сброшен.

dup2: Копировать в указанный файловый дескриптор: если fd2 уже открыт, сначала закройте файл, а затем скопируйте и вернитесь в fd2 и очистите FD_CLOEXEC; если fd = fd2, не закрывайте файл и сохраняйте статус флага его дескриптора файла и возвращайте fd2 одновременно.

fcntl: изменить атрибуты открытого файла (просто укажите fd)

Прототип функции:

Функция функции: 5 категорий

  1. Скопируйте существующий дескриптор (cmd = F_FUPFD или F_DUPFD_CLOEXEC)
  2. Получить / установить флаг дескриптора файла (cmd = F_GETFD или F_SETFD)
  3. Получить / установить флаг состояния файла (cmd = F_GETFL или F_SETFL)
  4. Получить / установить владение асинхронным вводом-выводом (cmd = F_GETOWN или F_SETOWN)
  5. Получить / установить блокировку записи (cmd = F_GETLK, F_SETLK или F_SETLKW)

Интеллектуальная рекомендация


Краткое описание общих функций MPI

содержание 1, основная функция MPI 2, точка-точка функция связи 3, коллективная функция связи 1, основная функция MPI MPI_Init(&argc, &argv) Информировать системы MPI для выполнения всех необх.

Примечание 9: EL выражение


JVM память

концепция Виртуальная машина JVM управляет собственной памятью, которая разделяет память во многие блоки, наиболее распространенной для памяти стека и памяти кучи. 1 структура виртуальной машины JVM H.

Проблема сетевого запроса на Android 9.0

вЗапустите Android 9 (API Уровень 28) или вышеНа устройстве операционной системы Android, чтобы обеспечить безопасность пользовательских данных и устройств, использование по умолчанию для зашифрованно.


Учебная запись по Webpack (3) В статье рассказывается о создании webpack4.0.

предисловие Для изучения веб-пакета автор также предпринял много обходных путей. Есть много вещей, которые я хочу знать, но я не могу их найти. Автор поможет вам быстро начать работу. Цель этой статьи.

Несколько человек спросили меня какие инструменты я использую для CTF. Мой выбор зависит от специфики CTF. Существуют всевозможные CTF для разных аспектов ИБ, Forensics, Steganography, Boot2Root, Reversing, расследование инцидентов, Web, Crypto и также те, что сочетают в себе несколько разновидностей. Для каждого направления необходим свой набор инструментов для получения флага.

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

Стеганография

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

Есть несколько вещей, которые я делаю в ходе решения задач:

- Проверяю расширение файла. Я тратил много времени на то, чтобы в конечном итоге понять, что я имею дело с файлом другого расширения.
- Использую стандартные инструменты прежде чем исследовать глубже. Проверьте файл с помощью file, strings, exiftool, pngcheck и откройте в шестнадцатеричном редакторе и только потом переходите в инструменты, предназначенные для определенного типа файла.
- Используемые инструменты зависят от типа файла. Google: 'filetype ctf tools'.

Есть десятки инструментов, которые я не смогу охватить в этом руководстве. Это руководство должно дать вам довольно хорошую отправную точку для поиска дополнительных инструментов и методов стеганографии.

Получение флага во многом зависит от вашей настойчивости и умения пользоваться поисковиком.

Инструменты

Инструменты, упомянутые выше, не являются единственными инструментами. Но для начала этого должно хватить.

Примеры использования инструментов

File:


Расширение файла было изменено


Другой GIF файл, который им не является

Sonic visualizer:


Помните, что не обязательно флаг будет находиться спектрограмме если это mp3 файл.


Кадр для файла выше был скрыт между mp3 фреймами. С помощью strings удалось получить флаг в этом задании. Изображение ниже.


Пример еще одной спектрограммы с флагом


Hex editor: это шикарный инструмент для множества целей. Редактор показывает исходной содержание файла.



Тот же файл в Hex редакторе, как вы можете видеть тут отображается больше данных, чем в самом файле.

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


Strings: отлично подходит для вывода печатаемых строк из файла.


Strings -a сканирует файл целиком, а не только секцию с данными

binwalk: отлично подходит для проверки вложенных файлов (или скленных в один файл)


Binwalk -e автоматически распакует все файлы. Для примера выше ничего не нужно распаковывать.

pngcheck: проверка на наличие каких-либо повреждений или аномальных разделов. Команда pngcheck -v покажет чанки данных, которые не являются критическими для рендеринга.



exiftool: вывод метаданных для медифайлов


stegsolv: отличный инструмент с GUI, позволяющий анализировать изображение и находить цветовые слои, карты и скрытые строки.


Эти два инструмента подходят для декодирования строк и unicode.


Примеры из реальных CTF

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

Ложные расширения файлов


Данный файл записан как GIF, но вывод команды file показывает, что это не так



Вот так выглядит реальный GIF

Можно посмотреть реальное содержание файла


Этот файд в hex-редакторе


Просто текстовый редактор


Тот же файл с утилитой strings

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

Скрытые файлы


Вы можете увидеть, что это ICO файл


Интересные строки для ICO файла


Тот же файл в hex-редакторе

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

Я покажу два способа решения этой проблемы. Первый способ простой, а второй сложный.

Метод 1: использование binwalk

Мы используем binwalk -e для извлечения любых потенциальных файлов. Это сработало и теперь у нас есть запароленный ZIP файл. Как вы можете видеть ниже.


Метод 2: распаковка и сохранение hex

На картинке ниже вы можете видеть, что я просто сохранил отдельно секцию, начинающуюся с 50 4b, которая является заголовком файла PK.



Вставка и сохранение сырого hex начиная с заголовка PK

Я сохранил файл из шестнадцатеричного редактора как test.zip


Но ZIP оказался защищенным


На этой картинке мы видим, что два метода извлечения файла дают одинаковые результаты.

Попробуем раскрыть пароль при помощи fcrackzip.


Я потратил на это намного больше времени чем хотел, установив количество минимальных символов 4. Мне казалось, что никто не станет использовать пароль менее 4 символов и был не прав. Теперь у нас есть txt файл, извлеченный из архива.

Просто скрытые


Давайте разберем файл несколькими инструментами, упомянутыми выше.


Да, это просто картинка JPEG


Тут мы видим все двоичные строки, найденные в картинке


То же в hex-редакторе


Открытый в notepad файл показывает аналогичные вещи

Двоичная строка, преобразованная в ASCII, дает нам флаг.

Скрытый в изображении

Рассмотрим простое задание для иллюстрации. Часть изображения скрыта, поскольку это все еще активный CTF.

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


Откроем изображение в Stegsolve и полистаем слои пока не найдем флаг.


Красивые цвета

Я видел такое несколько раз. Сначала это раздражало. Первое задание, которое я решил, заняло так много времени, что даже времени CTF не хватило.

Я проделал с этим файлом то же, что и с другими: file, strings и все остальное. Даже если не получается, создатель CTF дает обычно подсказку.


Вот предоставленная картинка


Тот же файл, открытый в GIMP

У нас есть файл открытый в GIMP. Если мы используем пипетку для каждого цвета, то получаем 1: 8b8b61 2: 8b8b61 3: 8B8B70 4: 8B8B6A 5: 8B8B65 6: 8B8B73, который является шестнадцатеричным представлением. Нам нужны последние две цифры каждого из значений цвета. Остается 61 61 70 6А 65 73. Преобразуя этот код в ASCII, мы получаем флаг.

CTF (capture the flag или захват флага) — это командные соревнования по информационной безопасности и системному администрированию, проходящие в двух форматах.

Другой формат CTF-соревнования — classic (либо attack-defense). Каждая команда получает выделенный сервер или небольшую сеть для поддержания её функционирования и защиты. Во время игры команды зарабатывают очки за корректную работу сервисов своего сервера и за украденную информацию (она же — «флаги») с серверов соперников.

Таски в jeopardy бывают разных категорий, от криптографии до веба, но все они основаны на поиске флагов, которые чаще всего представлены строкой, начинающейся со слова flag. Флаг обычно хорошо спрятан, и нужно немало потрудиться, чтобы его найти.

В этой статье мы обсудим следующий таск:

Анализ веб-сервера

Прим. перев. Идёт разбор таска с h1-212 CTF 2017 года, поэтому ссылки уже не работают. Но если есть желание, можете развернуть сервер самостоятельно, взяв исходники отсюда.

Если взглянуть на веб-сервер, то можно заметить, что на адресе 104.236.20.43 крутится стартовая страница Apache. Исходя из этого мы точно знаем, что используется Apache и что флаг может находиться в одной из его директорий. Тогда самым логичным шагом будет проверить адрес 104.236.20.43/flag. Там лежит фальшивый флаг, который может пригодиться позже, так как разработчики тасков иногда оставляют своего рода подсказки, необходимые для дальнейшего решения.

Исследование ошибочных конфигураций и их исправление

Верно настроив виртуальный хостинг и посетив нужный нам сайт, мы обнаружили пустую страницу и получили куки admin=no.





Использование уязвимостей








SSRF (server side request forgery) — это эксплойт, с помощью которого можно заставить уязвимое приложение сделать запрос на предоставленный URL. Так можно получить доступ к внутренним службам или данным, недоступным для обычного пользователя.

Для начала нужно найти способ обойти требования к поддомену и домену высокого уровня. Одним из способов будет использование символов перевода или разрыва строки (CRLF — carriage return line feed), чтобы в запросе было несколько строк. Это позволит удовлетворить требованиям и заставит сервер обрабатывать каждую строку запроса в отдельности.

CRFL-символы используются для обозначения конца строки. Так как сервер использует дистрибутив Linux, мы можем просто использовать LF или \n для создания новой строки.


Использование SSRF и получение флага

Так как теперь нам не нужно беспокоиться о требованиях к домену верхнего уровня или поддомену, можно попробовать обратиться к локальному хосту по порту 80, например, вот так: .


Декодировав ответ из Base64, мы, как и ожидалось, получим дефолтную страницу Apache. Более того, это подтверждает, что мы получили доступ к локальному окружению. Возможно, флаг находится на том же месте, что и фальшивый флаг, но на внутреннем порту. В первую очередь стоит попробовать распространённые порты, такие как 8443, 8080, 443 и 22.




Это расшифровывается как «Hmm, where would it be?» («Хммм, где же он может быть?»). Мы уже близко, давайте попробуем localhost:1337/flag, так как об этом была подсказка ранее.



Это даст нам следующее:

Мы получили флаг и успешно решили таск. Ещё можно было найти порт, просканировав все порты и проверив их ответы. Это было бы долго и довольно утомительно, но вполне реально с помощью Burp Intruder.

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

Если вам после этого райтапа захотелось попробовать свои силы в CTF, то список площадок с тасками можно найти здесь.

Утилита chflags, устанавливает или снимает флаги файлов, согласно переданным команде опциям. Можно использовать следующие значения опций: -f Не отображать диагностическую информацию в случае неудачи, при изменении флагов файла, не менять код завершения, для сигнализации о неудачной операции. -H Если установлена опция -R, следовать по символическим ссылкам в командной строке. ( Символические ссылки встреченные при обходе девева не сопровождаются ) -h Если файл является символической ссылкой, устанавливать флаг на саму ссылку, вместо файла на который она ведет. -L При использовании с опцией -R, следовать по ссылкам -P При использовании с опцией -R, не следовать по ссылкам. Поведение по-умолчанию. -R Изменить флаги для иерархии файлов, включая корневую директорию для данной иерархии. -v Выводить информацию во время выполнения, имя файла на котором изменены флаги. Еесли опция указана дважды, будет так-же показано восьмеричное значение флагов. Флаги файлов могут быть заданы восьмеричными значениями, или разделенным запятыми списком ключевых слов. Можно использовать следующие ключевые слова. Добавление или удаление приставки "no" из ключевого слова, очищает соответствующий флаг Например: Восьмеричные значения:: Другие комбинации ключевых слов, могут быть получены путем комбинирования приведенных выше октетов. Пока не заданы опции -H, -L или -h, chflags примененный к символической ссылке, выполнится, но не будет иметь никакого эффекта. Опции -H, -L и -P будут проигнорированы без опции -R. Более того, данные опции переопределяют друг друга, поэтому использована будет последняя. Что-бы посмотреть установленные флаги, используйте команду ls вслудующем формате: ls -lo.

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

chflags возвращает 0 при успешном завершении операции и >0 в случае ошибки. Так-же смотрите: ls(1), chflags(2), stat(2), fts(3), security(7), symlink(7) настройка политики безопасности

Читайте также: