Чангтинг недавно выпустил предупреждение об уязвимости《в оппозиции1dayПредупреждение о риске|ПанвэйEcologyутечка информации&Любая уязвимость входа пользователя на стойке регистрации》,Ссылка на статью с предупреждениемдляhttps://mp.weixin.qq.com/s/ZvbXbtcpq8EslNKZ2hHW_w,С отношением к обучению и исследованиям,Было проведено беглое исследование возможной логики уязвимости.
Чангтинг опубликовал последнюю версию Xray в статье с предупреждением. Обновленный Xray может удаленно обнаружить уязвимость. Команда обнаружения выглядит следующим образом.
./xray ws --poc poc-yaml-ecology-ofslogin-aul --url http://example.com
Запустите указанную выше команду локально
Данные запроса, отправленные Xray для проверки уязвимости, могут быть перехвачены с помощью Wireshark.
для
/mobile/plugin/1/ofsLogin.jsp?syscode=syscode×tamp=2&gopage=3&receiver=test&loginTokenFromThird=
Теперь, когда конкретный файл найден, можно приступить к анализу.
Откройте файл mobile/plugin/1/ofsLogin.jsp в каталоге установки Panwei ecology9 следующим образом.
Во-первых, в строках 19-23 при доступе к URL-адресу mobile/plugin/1/ofsLogin.jsp сначала будут получены переданные параметры syscode, получателя, метки времени, loginTokenFromThird и gopage.
Затем в строке 26,Вызовите метод AESCoder.encrypt для шифрования параметров AES.,Первый параметр метода AESCoder.encrypt — дляreceiver+timestamp.,Вызовите метод Prop.getPropValue, чтобы получить возвращаемое значение и объединить его с полученным значением системного кода.,Полученное возвращаемое значение используется в качестве второго параметра для,Данные, полученные с помощью AES-шифрования, присваиваются переменной loginTokenFromThird2.
Далее проверка логики входа начинается со строки 36. По строкам 36-39 оценивается, равны ли полученное loginTokenFromThird и сгенерированное значение loginTokenFromThird2. Если они не равны, вход не выполняется и передается в /login/Login. .jsp. Только когда loginTokenFromThird и loginTokenFromThird2 равны, следующая логика входа в систему может продолжать выполняться.
продолжать вниз,Когда loginTokenFromThird равен loginTokenFromThird2,Во-первых, полученное значение системного кода будет использоваться в качестве параметра условия для запроса в таблице данных s_sendinfo.,Поле запроса дляhrmtransrule. Если запрошенное значение hrmtransruleдля пусто (то есть значение системного кода условия запроса не существует в таблице ofs_sendinfo),Назначьте hrmtransrule для «1», если запрошенное hrmtransrule не пусто;,Сделайте вывод по строкам 52-63. Определено переменное правило,Значение по умолчанию для «loginid»,Если hrmtransrule для "0",Затем назначьте правило для"id" if hrmtransruleдля"1";,Затем правилу присваивается значение "loginid",Логика в основе та же.
После выполнения приведенной выше логики суждения,,Значение переменной правила используется в качестве поля условия для запроса в таблице данных HrmResource.,Параметр условия — это значение приемника, полученное для
В это время я выполнил оператор select * from HrmResource;SQL непосредственно в базе данных локальной тестовой среды и обнаружил, что HrmResource — это пустая таблица в среде автора.
То есть в среде автора следующая логика не может продолжать выполняться.
Далее идут кадровые дела->Создайте нового человека в New Personnel
После завершения создания повторите запрос, и вы увидите, что в таблице HrmResource уже есть данные.
Поэтому автор предполагает, что эту уязвимость можно использовать только при наличии данных в пользовательской таблице HrmResource.
Продолжая следующую логику, следующая логика относительно проста. Получите идентификатор из результата запроса и присвойте его идентификатору пользователя. Затем сгенерируйте учетные данные аутентификации на основе идентификатора пользователя, то есть после завершения аутентификации, перейдите к. страница, указанная пользователем, то есть это полученный параметр gopage
анализировать Иди сюда,Вся логика входа очень понятна,Ключ заключается в двух условиях:
1. loginTokenFromThird должен быть равен loginTokenFromThird2, loginTokenFromThird является управляемым, loginTokenFromThird2 генерируется путем вызова внутренней функции шифрования на основе контролируемых параметров, а когда входные параметры функции шифрования остаются неизменными, loginTokenFromThird2 также фиксируется;
2. В таблице информации о пользователе HrmResource должны быть данные.
В таблице HrmResource loginid фактически является именем пользователя для входа.,Например, идентификатор входа системного администратора по умолчанию — sysadmin.,Есть два подхода к логике суждения входа в систему.,Во-первых, значение системного кода не существует в таблице.,Во-вторых, правило hrmtransrule, найденное в соответствии с системным кодом, должно быть «1».,Очевидно, что лучше использовать первый. Далее вы можете создать параметры для генерации loginTokenFromThird2.,Затем оставьте полученное значение loginTokenFromThird2 нетронутым и оставьте нетронутым значение параметра дляloginTokenFromThird, чтобы завершить использование логина любого пользователя.