Даже в самом маленьком приложении можно найти баг, как хорошо что служба ИБ его нашла заранее.
Хотя для вас это будет разминкой. http://:3355
cd deploy
docker-compose -p web_warmup_secrets up --build -d
Архив из директории public/ и IP:PORT сервера
Задача представляет собой эксплуатацию простой SQL-инъекции и 'обход' простого WAF на Lua.
Для начала можно заметить очевидную SQL-инъекцию в Go-коде в параметре password
.
Однако на уровне NGINX (proxy) на lua реализована проверка данного HTTP-параметра, которая не позволяет сделать SQL-инъекцию.
Здесь можно воспользоваться фактом, что URL-парсеры по-разному обрабатывают ';' в параметрах URL — в ранних RFC советуют считать ';' таким же разделителем, как и '&'.
Go до версии 1.17 принимал ';' как разделитель, в то время как nginx lua-парсер не считает это разделителем.
Тогда URL с параметрами вида ?id=1;password=' OR
пройдет проверку, т.к. код на стороне NGINX не найдет параметр
password, в отличие от go-бэкенд'а.
Далее осталось написать UNION sql-инъекцию для чтения локального файла.
CUP{s2b382s0cb9a7cr2d670b8f94s58q8el8binje17}