2013-12-15 3 views
-1

У меня возникли проблемы с пониманием того, что делает следующий javascript. взял его в лабораторную сессию и даже протестировал (или, по крайней мере, пытался, поскольку он не работал со мной, как другие ученики, он продолжал просить меня войти в систему и никогда не показывать приветственное сообщение). лаборатория - это атаки XSS, и инструктор сказал нам, что этот сценарий может быть использован, и я не вижу, как ?.Что делает следующий javascript?

не против комментариев; Я добавил их, чтобы помочь мне понять, когда трассировка код

<html> 

    <head> 
    <title>Mobile code:: XSS cookie example </title> 
    <link rel="stylesheet" type="text/css" href="SecureM.css"/> 
    </head> 

    <body> 
    <script language="Javascript"> 
    function checkCookie(){ 
     //Here is the initialization of variables to be used for this function 
     var lf = "\n";  //character for next line (lf = line feed) 
     var CookieString = document.cookie; //cookies are accessible through the document.cookie property 
     var CookieSet = CookieString.split(';'); //This splits document.cookie on semicolons. CookieSet becomes an array containing all cookies that are set for this domain and path. 
     var SetSize = CookieSet.length; 
     var CookiePieces; 
     var ReturnValue="";  //set default empty return if no cookie found 
     var x = 0; 
     for (x = 0; ((x < SetSize) && (ReturnValue == "")); x++){ 
     CookiePieces = CookieSet[x].split('='); 
     if (CookiePieces[0].substring(0,1) == ' '){ 
      CookiePieces[0] = 
      CookiePieces[0].substring(1, CookiePieces[0].length); 
     }  //end if statement 
     if (CookiePieces[0] == "superSecretPassword"){ 
      ReturnValue = CookiePieces[1]; 
     }  //end if statement 
     }   //end for loop 
     return ReturnValue; 
    } //end checkCookie() function 

    if (checkCookie() == ""){ // no cookie found, relocate to login.php 
     window.location.href="login.php"; 
    } 
    </script> 

    <? 
    if (isset($_GET["username"])){ 
     $cur_username = $_GET["username"]; 
    } 
    else if (isset($_POST["username"])){ 
     $cur_username = $_POST["username"]; 
    } 
    else if (isset($_COOKIE["username"])){ 
    $cur_username = $_COOKIE["username"]; 
    } 
    else{ 
     $cur_username = "No Name"; 
    } 
    echo "<strong>LOGIN SUCCESSFULL!</strong><br/><br/>"; 
    echo "<strong>Thank you, ".$cur_username." your information have been updated</strong>"; 
    // 


    ?> 
    </body> 
</html> 

во всяком случае, помощь в объяснении это очень ценится. наконец, я надеюсь, что мой английский не был так уж плох.

отредактировал: um, wow .. почему это проголосовали вниз ..? так плохо спросить о помощи/объяснении ??

+3

Он, кажется, в основном уязвим, поскольку пароль суперсекретного хранится непосредственно в файле cookie, доступном на стороне клиента, поэтому любой пользователь может получить к нему доступ или украсть его. – adeneo

+1

Отображение '$ cur_username' в части PHP, unescaped уязвим для XSS. Если вредоносная ссылка была разделена как 'yourscript? Username = ', то '' будет выполнена. Вам нужно будет использовать 'htmlspecialchars ($ cur_username)', чтобы смягчить его. –

+0

Я думаю, что комментарии описывают весь код. Что вы действительно хотите понять. –

ответ

1

JavaScript не имеет значения. Эксплоит - через PHP.

вход пользователя ($_GET["username"] и $_POST["username"]):

  • Родом из браузера
  • Может быть дано в браузере на другом сайте (или по электронной почте) через линию или форму
  • Может содержать JavaScript
  • ли выход непосредственно на страницу, без обеззараживания
0

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

Некоторые из этих требований требуют, чтобы вы точно понимали, что делают супер-глобальные переменные $ _GET, $ _POST и $ _COOKIE. Вот несколько примеров того, как вы можете использовать их, и что каждый означает.

$ _GET: Этот суперглобальный массив устанавливается, когда кто-то делает HTTP-запрос GET на вашу страницу, а PHP затем выполняется на стороне сервера. Когда PHP-код проверяет его, он имеет доступ к переданным ему параметрам через URL-адрес, который обычно создается при создании запроса GET. Учитывая используемый здесь PHP-код, всем злоумышленникам нужно будет указать URL-адрес (в ИХ-коде)

http://yourvulnerablesite.com/?username=root '); exit();

$ _POST: Этот суперглобальный массив устанавливается всякий раз, когда кто-то делает HTTP POST-запрос на вашу страницу, а затем PHP высылается серверной стороне. Вероятно, это будет не так, как запрос GET, потому что для реализации потребуется немного больше усилий. Это также не будет так эффективно, потому что JavaScript, который устанавливает зарегистрированный файл cookie, вероятно, не будет работать. Самый простой способ сделать это? Расширение браузера, которое позволяет произвольно обрабатывать HTTP-запросы с указанными параметрами с указанным методом, например this one.

$ _COOKIE: Этот суперглобальный массив устанавливается, когда кто-то посещает ваш сайт, несмотря ни на что, и он настроен для всех файлы cookie, обнаруженные в запросе пользователя на ваш сайт, которые были сайтом по тому же домену. Все, что нужно сделать пользователю, - это посетить ваш уязвимый сайт один раз или создать файл cookie с соответствующим доменом и ввести имя пользователя, например root.Когда они снова войдут в ваш сайт, они войдут в систему как этот пользователь, так как просто не будет http://myvulnerablesite.com

Есть еще некоторые проблемы, кроме этих уязвимостей, в отношении того, что вы всегда доверяете, что пользователь фактически использует ваш сайт (поскольку упражнение относится к XSS, а не к общим проблемам с сайтом), но пароль на самом деле никогда не проверяется, и JavaScript совершенно неактуальен, как указал Квентин. Он абсолютно ничего не делает для входа пользователя в систему, поскольку пароль не проверяется с помощью PHP.

Надеюсь, это даст вам некоторое представление о том, что здесь происходит. Вы, кажется, понимаете JavaScript в порядке, поэтому я не буду этого делать :)

Смежные вопросы