poniedziałek, 7 maja 2012

DIY CMS v1.0 Poll - Multiple Web Vulnerabilities

DIY CMS jest bogate w funkcje PHP, oparte na MySQL, jest to CMS z wolnym kodem - opensource. Nadaje się do zarządzania wszelkiego rodzaju treści. Jest to modułowy, rozszerzalny.
Można budować swoje własne moduły dla konkretnych celów, dodać pewne funkcjonalności do własnych potrzeb i projektować motywy, które reprezentują zawartość strony internetowej.

Na chwilę obecną posiada oryginalnie wbudowane moduły:


    - blog

    - download

    - guestbook

    - pages

    - web_directory

    - video

    - search

    - contact-us

    - forum

    - news

    - users

    - audio

    - poll
I prawie wszystkie z nich są dziurawe.

Zajmijmy się modułem poll

Jest on podatny na SQL Injection oraz CSRF

W pliku /diy-cms/modules/poll/index.php
linie: 50 - 55

$ppp = $mod->setting('polls_per_page');
        if(!isset($_GET['start']))
        {$start = '0';
        }else{
        $start = $_GET['start'];
        }
Zamieńmy sobie na:

$ppp = $mod->setting('polls_per_page');
        if(!isset($_GET['start']))
        {$start = '0';
        }else{
        $start = (int)$_GET['start'];
        }


W pliku /diy-cms/modules/poll/add.php
line: 53 - 84

         if($submit)
        {
           extract($_POST);
           $type  = $_POST["polltype"];
           $question = $_POST["question"];
           $status = $_POST["active"];
           $date = time();

           $arr_post_vars = array($type,  $question);
                         
           if (!required_entries($arr_post_vars))
           {
               error_message($lang['LANG_ERROR_VALIDATE']);
           }

           if($status == '1')
           {
              $result = $diy_db->query("update diy_poll_questions set status='0' ");
          }
  
          $result = $diy_db->query("INSERT INTO diy_poll_questions VALUES ('','$question','$type','$status','$date')");
          $qid = $diy_db->insertid();


Zamieńmy sobie na:

         if($submit)
         {
         extract($_POST);
         $type  = $_POST["polltype"];
         $question = $_POST["question"];
         $status = $_POST["active"];
         $date = time();

         $arr_post_vars = array($type, $question);
                         
         if (!required_entries($arr_post_vars))
         {
             error_message($lang['LANG_ERROR_VALIDATE']);
         }

         if($status == '1')
         {
             $result = $diy_db->query("update diy_poll_questions set status='0' ");
         }
         $question = htmlspecialchars(strip_tags($question));   
         $result = $diy_db->query("INSERT INTO diy_poll_questions VALUES ('','$question','$type','$status','$date')");
         $qid = $diy_db->insertid();


W pliku /diy-cms/modules/poll/edit.php
Linie: 69 - 76

         $result = $diy_db->query("update diy_poll_questions set question='$question', type='$type', status='$status' where qid='$qid' ");

     foreach ($_POST['answer'] as $answer)
     {
        $answer = $answer;
        if (!empty($answer)) {
        $diy_db->query("update diy_poll_answers set answer='$answer' where aid='$aid' ");
         }


Zamieńmy sobie na:

         $question = htmlspecialchars(strip_tags($question));   
         $result = $diy_db->query('update diy_poll_questions set question='$question', type='$type', status='$status' where qid='$qid/'');

     foreach ($_POST['answer'] as $answer)
     {
        $answer = htmlspecialchars(strip_tags($answer));
        if (!empty($answer)) {
        $diy_db->query("update diy_poll_answers set answer='$answer' where aid='$aid' ``);
         }


Lista prawdopodobnie dziurawych plików w całym CMS:


SQL Injection:


    global.php
    includes/general.functions.php
    modules/audio/control/approve_comments.php
    modules/audio/control/approve_posts.php
    modules/audio/control/viewcat.php
    modules/audio/list.php
    modules/audio/viewpost.php
    modules/blog/archive.php
    modules/blog/control/approve_comments.php
    modules/blog/control/approve_posts.php
    modules/blog/control/viewcat.php
    modules/blog/index.php
    modules/blog/list.php
    modules/blog/main_index.php
    modules/blog/tags.php
    modules/blog/viewpost.php
    modules/contact-us/control/index.php
    modules/download/control/approve_comments.php
    modules/download/control/approve_files.php
    modules/download/control/viewcat.php
    modules/download/list.php
    modules/download/view_file.php
    modules/forum/control/approve_comments.php
    modules/forum/control/approve_posts.php
    modules/forum/control/viewcat.php
    modules/forum/list.php
    modules/forum/search.php
    modules/forum/viewpost.php
    modules/guestbook/control/index.php
    modules/guestbook/index.php
    modules/news/control/approve_comments.php
    modules/news/control/approve_posts.php
    modules/news/control/viewcat.php
    modules/news/list.php
    modules/news/search.php
    modules/news/viewpost.php
    modules/poll/index.php
    modules/users/admin.php
    modules/users/control/newusers.php
    modules/users/index.php
    modules/video/control/approve_comments.php
    modules/video/control/approve_posts.php
    modules/video/control/viewcat.php
    modules/video/list.php
    modules/video/viewpost.php
    modules/web_directory/control/approve.php
    modules/web_directory/control/viewcat.php
    modules/web_directory/list.php


XSS / CSRF:

    modules/poll/add.php
    modules/poll/blocks/poll.block.php
    modules/poll/control/index.php
    modules/poll/edit.php
    modules/poll/view.php
    modules/search/index.php
    modules/download/control/addcat.php
    modules/download/control/approve_files.php
    modules/download/control/edit_cat.php
    modules/download/control/misc.php
    modules/download/addcomment.php
    modules/download/add_file.php
    modules/download/editcomment.php
    modules/download/edit_file.php
    modules/guestbook/add.php
    modules/guestbook/edit.php
    modules/pages/add.php
    modules/pages/edit.php
    modules/web_directory/control/addcat.php
    modules/web_directory/control/edit_cat.php
    modules/web_directory/add.php
    modules/web_directory/edit.php
    modules/web_directory/index.php
    modules/web_directory/list.php
    modules/contact-us/index.php
    modules/forum/addcomment.php
    modules/forum/addpost.php
    modules/forum/editcomment.php
    modules/forum/editpost.php
    modules/forum/control/addcat.php
    modules/forum/control/edit_cat.php

Brak komentarzy:

Prześlij komentarz