2013-12-15 35 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> 

無論如何,有助於解釋這是非常感謝。最後,我希望我的英語不是那麼糟..

編輯:嗯,哇..爲什麼這會被投票下來..?尋求幫助/解釋是如此糟糕?

+3

它似乎主要是脆弱的,因爲超級密碼直接存儲在客戶端可用的cookie中,所以任何用戶都可以訪問它或偷走它。 – adeneo

+1

在PHP部分顯示'$ cur_username',非轉義對XSS易受攻擊。如果一個惡意鏈接被共享爲'yourscript?username = '那麼''將被執行。你需要使用'htmlspecialchars($ cur_username)'來緩解它。 –

+0

我猜這些評論描述了整個代碼。你真的想明白什麼? – 2013-12-15 18:16:38

回答

1

JavaScript是無關緊要的。該漏洞利用PHP。

用戶輸入($_GET["username"]$_POST["username"]):

  • 從通過鏈接或形式
  • 可以包含瀏覽器
  • 可以通過其他網站所提供給瀏覽器(或電子郵件)來JavaScript的
  • 直接輸出到頁面上沒有消毒
0

我想盡管Quentin已經做了出色的工作,指出了答案,但還是提供了更多的信息。

其中一些要求您明白$ _GET,$ _POST和$ _COOKIE超級全局變量的作用。以下是一些關於如何利用這些的例子,以及每種方法的意義。

$ _GET:只要有人向您的頁面發出HTTP GET請求,就會設置此超全局數組,然後PHP將在服務器端執行。當PHP代碼檢查它時,它可以通過URL訪問傳遞給它的參數,這通常是如何創建GET請求的。鑑於此處使用的PHP代碼,惡意用戶需要做的就是輸入URL(在他們的代碼中)

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

$ _POST:只要有人向您的頁面發出HTTP POST請求,就會設置此超全局數組,然後PHP將被執行服務器端。這可能不會像GET請求那樣可能,因爲它需要更多的努力才能實現。它也不會有效,因爲設置登錄cookie的JavaScript可能不會運行。最簡單的方法來做到這一點?一個瀏覽器擴展,允許任意的HTTP請求使用指定的參數與指定的方法,如this one.

$ _COOKIE:這個超全局數組是設置每當有人訪問您的網站,不管是什麼,它設置爲所有在用戶請求您的網站時檢測到的Cookie是同一個域名的網站。用戶必須做的一件事就是一次訪問易受攻擊的站點,或者使用適當的域創建一個cookie,然後輸入用戶名,例如root。當他們再次進入您的網站時,他們將以該用戶的身份登錄,沒有那麼多,只是去http://myvulnerablesite.com

除了這些漏洞之外,還有一些其他問題,關於始終相信用戶實際上正在使用您的(因爲這個練習是關於XSS的,而不是整個網站的問題),但是密碼實際上從來沒有被檢查過,而且像Quentin指出的那樣JavaScript是完全不相關的。由於密碼未經PHP檢查,因此它對登錄用戶完全沒有任何影響。

我希望這能讓你對這裏發生的事情有一些瞭解。您似乎瞭解JavaScript正常,所以我不會繼續:)