__________ ___ ___ \______ \__ __ ______/ | \ | _/ | \/ ___/ _ \ | | \ | /\___ \\ / |____|_ /____//____ >\___|_ / -======\/==security=\/=team==\/ Advisory#23 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Продукт: LiteForum Версия: 2.1.1 Авторы: http://www.softtime.ru Уязвимости: SQL injection ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ----------------------------------------------------------------------------------------------------------------------- 1. Уязвимость в файле addtheme.php ----------------------------------------------------------------------------------------------------------------------- Код: ... $author = trim($_POST['author']); $pswrd = $_POST['pswrd']; $message = trim($_POST['message']); $theme = trim($_POST['theme']); $url = trim($_POST['url']); ... $author = str_replace("'","`",$author); $pswrd = str_replace("'","`",$pswrd); if(!empty($pswrd)) { $query = "SELECT * FROM authors WHERE name = '$author' and passw = PASSWORD('$pswrd')"; $ath = mysql_query($query); ... $theme = str_replace("'", "`", $theme); $author = str_replace("'", "`", $author); $query_theme = "INSERT INTO themes VALUES( NULL, '$theme', '$author', $id_author, '$author', $id_author, 'show', NOW(), $id_forum)"; if(!mysql_query($query_theme)) ... $message = str_replace("'", "`", $message); $theme = str_replace("'", "`", $theme); $author = str_replace("'", "`", $author); $author = str_replace("'", "`", $author); $url = str_replace("'", "`", $url); $query_post = "INSERT INTO posts VALUES( NULL, '$message', '$url', '$path', '$author', $id_author, 'show', NOW(), 0, $id_theme)"; Описание: Получаемые от пользователя переменные $author, $pswrd, $message, $theme и $url, перед использованием в SQL запросе, не проверяются на наличие завершающего данные обратного слеша "\", что может привести к уязвимости типа SQL injection. ----------------------------------------------------------------------------------------------------------------------- 2. Уязвимость в файле addpost.php ----------------------------------------------------------------------------------------------------------------------- Код: ... $author = trim($_POST['author']); $pswrd = $_POST['pswrd']; $message = trim($_POST['message']); $url = trim($_POST['url']); ... $author = str_replace("'","`",$author); $pswrd = str_replace("'","`",$pswrd); if(!empty($pswrd)) { $query = "SELECT * FROM authors WHERE name = '$author' and passw = PASSWORD('$pswrd')"; ... $message = str_replace("'", "`", $message); $author = str_replace("'", "`", $author); $url = str_replace("'", "`", $url); $query_insert = "INSERT INTO posts VALUES( NULL, '$message', '$url', '$path', '$author', $id_author, 'show', NOW(), $id_post, $id_theme )"; Описание: Получаемые от пользователя переменные $author, $pswrd, $message и $url, перед использованием в SQL запросе, не проверяются на наличие завершающего данные обратного слеша "\", что может привести к уязвимости типа SQL injection. ----------------------------------------------------------------------------------------------------------------------- 3. Уязвимость в файле editpost.php ----------------------------------------------------------------------------------------------------------------------- Код: ... $author = trim($_POST['author']); $pswrd = $_POST['pswrd']; $message = trim($_POST['message']); $url = trim($_POST['url']); ... $author = str_replace("'","`",$author); $pswrd = str_replace("'","`",$pswrd); $query = "SELECT * FROM authors WHERE name='$author' AND passw = PASSWORD('$pswrd')"; ... $message = str_replace("'", "`", $message); $query_update = "UPDATE posts SET name = '$message', $path url = '$url' WHERE id_post = $id_post"; Описание: 1. Получаемые от пользователя переменные $author, $pswrd и $message, перед использованием в SQL запросе, не проверяются на наличие завершающего данные обратного слеша "\", что может привести к уязвимости типа SQL injection. 2. Получаемая от пользователя переменная $url вообще не проверяется перед помещением в SQL запрос что может привести к уязвимости типа SQL injection. ----------------------------------------------------------------------------------------------------------------------- 4. Уязвимость в файле read.php ----------------------------------------------------------------------------------------------------------------------- Код: ... require_once("../utils/utils.php"); ... $current_author = $_COOKIE['current_author']; ... if(!empty($current_author)) { settime($current_author,false); $query = "SELECT * FROM authors WHERE name = '$current_author'"; где функция settime находится в файле utils.php и имеет вид: Код: function settime($author,$enter) { $ath = mysql_query("SELECT UNIX_TIMESTAMP(time) FROM authors WHERE name='$author'"); if($ath) { $authr = mysql_fetch_array($ath); $temptime = (int)$authr['UNIX_TIMESTAMP(time)']; if((time() - $temptime)/60>20 || $enter) { $query_update = "update authors set last_time='".date("Y-m-d H:i:s",$temptime)."' where name='$author';"; if(!mysql_query($query_update))puterror("Ошибка при обновлении времени (lasttime) ..."); } $query_update = "update authors set time=NOW() where name='$author';"; if(!mysql_query($query_update))puterror("Ошибка при обновлении времени (time) ..."); } else puterror("Ошибка при обращении к таблице авторов ..."); } Описание: Переменная $current_author получаемая из cookie пользователя не проверяется перед помещением в SQL запрос, что приводит к уязвимости типа SQL injection. ----------------------------------------------------------------------------------------------------------------------- 5. Уязвимость в файле enter.php ----------------------------------------------------------------------------------------------------------------------- Код: ... $author = $_POST['author']; $pswrd = $_POST['pswrd']; ... $author = str_replace("'","`",$author); $pswrd = str_replace("'","`",$pswrd); $query = "SELECT name,id_author,passw FROM authors WHERE name = '$author' AND passw = PASSWORD('$pswrd')"; $ath = mysql_query($query); Описание: Получаемые от пользователя переменные $author и $pswrd перед использованием в SQL запросе, не проверяются на наличие завершающего данные обратного слеша "\", что может привести к уязвимости типа SQL injection. Эксплоит: Пример эксплоита позволяющего получить пароль любого пользователя из базы данных с помощью посимвольного перебора вы можете посмотреть по адресу: http://rst.void.ru/download/r57lite211.txt ----------------------------------------------------------------------------------------------------------------------- 6. Уязвимость в файле register.php ----------------------------------------------------------------------------------------------------------------------- Код: ... $author = trim($_POST['author']); $pswrd = $_POST['pswrd']; $pswrd_again = $_POST['pswrd_again']; $email = trim($_POST['email']); $icq = trim($_POST['icq']); $about = trim($_POST['about']); $subscribe = $_POST['subscribe']; ... if(!empty($email)) { if($subscribe == "on") $subscribe = 'yes'; else $subscribe = 'no'; } ... $query = "SELECT * FROM authors WHERE name LIKE '$author' OR name LIKE '$eng_author' OR name LIKE '$rus_author'"; ... $author = str_replace("'", "`", $author); $about = str_replace("'", "`", $about); $email = str_replace("'", "`", $email); $icq = str_replace("'", "`", $icq); $url = str_replace("'", "`", $url); $pswrd = str_replace("'", "`", $pswrd); $query_author = "INSERT INTO authors VALUES( NULL, '$author', PASSWORD('$pswrd'), '$email', '$subscribe', '$url', '$icq', '$about', '$url_photo', NOW(), NOW(), 0, 0)"; Описание: 1. Переменная $author не проверяется перед помещением в первый запрос типа select что приводит к возможности SQL injection. 2. При пустой переменной $email не проверяется переменная $subscribe что приводит к возможности SQL injection. 3. Переменные $about,$url,$pswrd не проверяются на наличие завершающего символа обратного слеша "\" перед помещением во второй запрос типа insert что приводит к возможности SQL injection. ----------------------------------------------------------------------------------------------------------------------- 7. Уязвимость в файле updateform.php ----------------------------------------------------------------------------------------------------------------------- Код: ... $author = $_POST['author']; $pswrd = $_POST['pswrd']; ... $author = str_replace("'","`",$author); $pswrd = str_replace("'","`",$pswrd); $query = "SELECT * FROM authors WHERE name = '$author' AND passw = PASSWORD('$pswrd')"; Описание: Получаемые от пользователя переменные $author и $pswrd перед использованием в SQL запросе, не проверяются на наличие завершающего данные обратного слеша "\". ----------------------------------------------------------------------------------------------------------------------- 8. Уязвимость в файле update.php ----------------------------------------------------------------------------------------------------------------------- Код: ... $author = trim($_POST['author']); $pswrd = $_POST['pswrd']; $pswrd_again = $_POST['pswrd_again']; $email = trim($_POST['email']); $icq = trim($_POST['icq']); $about = trim($_POST['about']); ... $subscribe = $_POST['subscribe']; ... if(!empty($email)) { if($subscribe == "on") $subscribe = "sendmail = 'yes',"; else $subscribe = "sendmail = 'no',"; } ... $author = str_replace("'","`",$author); $about = str_replace("'","`",$about); $url = str_replace("'","`",$url); $email = str_replace("'","`",$email); $icq = str_replace("'","`",$icq); $pswrd = str_replace("'","`",$pswrd); $query_author = "UPDATE authors SET passw = PASSWORD('$pswrd'), email = '$email', $subscribe url = '$url', icq = '$icq', about = '$about', photo = '$url_photo' WHERE id_author = $id_author"; Описание: Переменные $author, $about, $url, $email, $icq, $pswrd не проверяются на наличие завершающего данные обратного слеша "\" При пустой переменной $email не проверяется переменная $subscribe ----------------------------------------------------------------------------------------------------------------------- Исправления ----------------------------------------------------------------------------------------------------------------------- Авторами форума была выпущена новая версия 2.1.2 в которой описанные ошибки исправлены. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1dt.w0lf // RusH security team // www.rst.void.ru // 30.01.2005 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~