вторник, 28 декабря 2010 г.

ManageEngine ServiceDesk. Хранение паролей в куках.

Забавная ситуация (крайне не безопасная) в программном продукте 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, было бы эффективнее, но лень не дает мне этого сделать!

3 комментария:

  1. Функция, используемая в самом 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;
    }

    ОтветитьУдалить
  2. а есть алгоритм, преобразующий пароль в строку, которая записывается в базу - параметр PasswordInfo?

    ОтветитьУдалить
  3. http://freetime-at-work.blogspot.com/2010/12/manageengine-servicedesk.html это в смысле?

    ОтветитьУдалить