Я прочитал, что пользователь может перезаписать произвольные файлы в файловой системе, указав специально созданное значение для токена PHPSESSID при входе в систему. И он заявляет, что может перезаписать другие файлы сеанса или удалить другие системные файлы.
Только авторизованный пользователь может получить доступ к приложению. Мы поддерживаем сессию в файловой системе. Имя файла сеанса — это идентификатор сеанса с префиксом строковой константы. Когда появляется запрос от клиента, мы берем идентификатор сеанса из PHPSESSID и добавляем строковую константу к идентификатору сеанса и используем его в качестве имени файла для этого сеанса в файловой системе. Только авторизованный пользователь может
Например:
PHPSESSID = A3KJHT63XK496LSDNTJ45
Имя файла сеанса в файловой системе будет «STRINGA3KJHT63XK496LSDNTJ45»
Какова возможность перезаписи / удаления существующего файла, отправив запрос, как показано ниже …
POST /login HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Macintosh; ...(truncated)
Cookie: PHPSESSID=../../php.log;
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 47
login=login&username=user1&password=Password1234
Из приведенного выше примера файл сеанса создается / доступен с именем
«STRING ../../ php.log». Это то, что в ходе аудита уязвимостей безопасности говорится, что, поскольку имя файла указывается напрямую, существует возможность удаления или перезаписи этого системного файла.
В этом случае любая созданная строка с идентификатором сеанса (например, «../../php.log»), которой предшествует некоторая другая строковая константа, такая как «STRING», дает окончательную строку «STRING ../ .. /php.log «, который становится действительным. Имена файлов с таким именем не существует в файловой системе и не может быть никакой уязвимости безопасности.
Тем не менее, я хотел бы знать, какую еще уязвимость представляет вышеуказанный метод?
Задача ещё не решена.
Других решений пока нет …