![]() |
Сайт - get-simple.info
Версия 3.3.16 - Latest Stable Version. Интернеты говорят вот так: В админке имеем возможность редактирования шаблонов - php файлы. Удаляем стопер, пишем phpinfo и у нас RCE) Осталось теперь как-то попасть в эту самую админку. Auth bypass или предсказываем значение rand() Система использует xml файлы для хранения данных, скулей не увидим. Посмотрим на то как проходит аутентификация. admin/inc/login_functions.php PHP код:
1) GetSimple использует sha1, брутить слишком много вариантов 2) Юзер == админ, поэтому их количество будет не большим) 3) Нужный юзер скорее всего имеет пароль отличный от необходимого нам диапозона С одной стороны вроде как и нет баги. С другой, если мы заглянем на страницу восстановления пароля, увидим, что этот процесс происходит таким образом: 1) Запрос на восстановление 2) Смена пароля 3) Отправка нового пароля на email На email не отправляется линк на смену пароля, пароль меняется и отправляется на почту. Отсюда можно решить 2 и 3 проблемы таким способом: -- отправляем на аутентификацию всегда пароль, хэш которого 0e[0-9]{38} - например aaK1STfY -- расстреливаем запросами на смену пароля Но проблема слишком большого количества вариантов мешает получить сколько-нибудь значимые результаты. Плюс ко всему, ситуация ослажняется вот этим: admin/resetpassword.php PHP код:
как он генерируется: admin/inc/template_functions.php [PHP] PHP: [COLOR="#000000"]functioncreateRandomPassword() { $chars="Ayz23mFGHBxPQefgnopRScdqrTU4CXYZabstuDEhijkIJKMNV Wvw56789"; srand((double)microtime()*1000000); $i=0; $pass=''; while ($i[COLOR="#007700"] А сколько их, этих начальных чисел? На nix(php-7.3) у меня выплюнул 2kkk результатов. Т.е. два миллиарда полных вариантов пароля, а вот для win: Но разрабы решили вписать свое число. Оно устанавливается функцией srand. Что в ней происходит? Из текущей метки времени Unix с микросекундами берутся именно микросекунды и умножаются на 1кк - именно столько вариантов у нас для брута, микросекунды float 0.XXXXXX, поэтому целочисленное значение у нас никогда не будет больше одного миллиона. Для атаки на потребуется лишь один раз запросить смену пароля, а потом пробрутить наши 1 миллион паролей - дело 20 минут. Генерируем список вариантов возможных паролей: [PHP] PHP: [COLOR="#000000"]$chars="Ayz23mFGHBxPQefgnopRScdqrTU4CXYZabstuDEhijkIJKMNV Wvw56789"; for($i=0;$i[COLOR="#007700"] |
Предлагаю перенести этот пост в статьи, т.к. достойно, а сюда выложить сухую выжимку + приложить эксплоит.
Мораль сей басни такова, что не нужно плодить свои криптовелосипеды |
[QUOTE="Baskin-Robbins"]
Baskin-Robbins said: ↑ Да и хитрые разрабы предусмотрели этот вариант - в нашем диапозоне не 62 символа, как должно быть для [a-zA-Z0-9]{6}, а 57 и нашего нолика тут как раз и не хватает)) [PHP] PHP: [COLOR="#000000"]$chars="Ayz23mFGHBxPQefgnopRScdqrTU4CXYZabstuDEhijkIJKMNV Wvw56789"; for($i=0;$i[COLOR="#007700"] |
[QUOTE="Baskin-Robbins"]
Baskin-Robbins said: ↑ Сайт - get-simple.info Версия 3.3.16 - Latest Stable Version. Интернеты говорят вот так: View attachment 13250 В админке имеем возможность редактирования шаблонов - php файлы. Удаляем стопер, пишем phpinfo и у нас RCE) Осталось теперь как-то попасть в эту самую админку. View attachment 13251 Auth bypass или предсказываем значение rand() Система использует xml файлы для хранения данных, скулей не увидим. Посмотрим на то как проходит аутентификация. admin/inc/login_functions.php PHP код:
1) GetSimple использует sha1, брутить слишком много вариантов 2) Юзер == админ, поэтому их количество будет не большим) 3) Нужный юзер скорее всего имеет пароль отличный от необходимого нам диапозона С одной стороны вроде как и нет баги. С другой, если мы заглянем на страницу восстановления пароля, увидим, что этот процесс происходит таким образом: 1) Запрос на восстановление 2) Смена пароля 3) Отправка нового пароля на email На email не отправляется линк на смену пароля, пароль меняется и отправляется на почту. Отсюда можно решить 2 и 3 проблемы таким способом: -- отправляем на аутентификацию всегда пароль, хэш которого 0e[0-9]{38} - например aaK1STfY -- расстреливаем запросами на смену пароля Но проблема слишком большого количества вариантов мешает получить сколько-нибудь значимые результаты. Плюс ко всему, ситуация ослажняется вот этим: admin/resetpassword.php PHP код:
как он генерируется: admin/inc/template_functions.php [PHP] PHP: [COLOR="#000000"]functioncreateRandomPassword() { $chars="Ayz23mFGHBxPQefgnopRScdqrTU4CXYZabstuDEhijkIJKMNV Wvw56789"; srand((double)microtime()*1000000); $i=0; $pass=''; while ($i[COLOR="#007700"] |
| Время: 16:52 |