Забавная ситуация (крайне не безопасная) в программном продукте manageengine servicedesk plus связанная с хранением паролей на клиентской станции в куках. Существует множество вариантов собрать куки от пользователей и имея этот список можно легко получить пароли к учетным записям, в том числе к ActiveDirectory, если авторизация в программе осуществляется через него.
Авторизуемся на сайте и заглянем в куки браузера:password=ххххххх; expires=Wed, 28 Dec 2011 12:56:43 GMT; path=/; domain=хххххх
Вот оно! Ну конечно же не в открытом виде храниться пароль, а после небольших изменений. Каких? Сейчас расскажу:
При авторизации и наличии галочку "запомнить меня", клиенту устанавливаются куки с логином, доменом в который входит пользователь и хэшем пароля. Хэш очень прост. Чтобы его вернуть в прежний вид необходимо представить его строкой из десятичных кодов каждого символа и перед переводом в читабельный вид прибавить к каждому значению цифру 23. Сделано это для того, чтобы все символы после преобразования имели по 2 цифры. Именно по этому пароли не должны быть в кириллице, либо содержать спец.символы.
И напоследок, скрипт на php, для обратного преобразования:
$res = "";
$str = "хххххххххх";
for( $i = 0; $i < strlen( $str ); $i += 2 ) {
$res .= chr( 23 + substr( $str, $i, 2 ) );
}
echo $res;
Конечно иметь такой скрипт, но написанный на javascript, было бы эффективнее, но лень не дает мне этого сделать!
Функция, используемая в самом Service Desk Plus:
ОтветитьУдалитьfunction decryptPassword( encPassword ) {
var str_out = "";
var num_out = encPassword;
for( i = 0; i < num_out.length; i += 2 ) {
num_in = parseInt( num_out.substr( i, [ 2 ] ) ) + 23;
num_in = unescape( "%" + num_in.toString( 16 ) );
str_out += num_in;
}
var textPassword = unescape( str_out );
return textPassword;
}
а есть алгоритм, преобразующий пароль в строку, которая записывается в базу - параметр PasswordInfo?
ОтветитьУдалитьhttp://freetime-at-work.blogspot.com/2010/12/manageengine-servicedesk.html это в смысле?
ОтветитьУдалить