天天看點

常見漏洞之xssxss簡介xss分類xss檢測xss利用xss修複

文章目錄

  • xss簡介
  • xss分類
    • 存儲型(持續型)
    • DOM型
    • 反射型(非持續型)
  • xss檢測
  • xss利用
  • xss修複

xss簡介

  • xss(跨站腳本攻擊):攻擊者在網頁中嵌入用戶端腳本,通常是JS編寫的惡意代碼,當使用者使用浏覽器浏覽被嵌入惡意代碼的網頁時,惡意代碼将會在使用者的浏覽器上執行
  • 本質:找輸入,找輸出,構造payload
  • 原理:xss漏洞通常是通過php的輸出函數将javascript代碼輸出到html頁面中,通過使用者本地浏覽器執行的,是以xss漏洞關鍵就是尋找參數未過濾的輸出函數。XSS漏洞的本質是服務端分不清使用者輸入的内容是資料還是指令代碼,進而造成使用者輸入惡意代碼傳到服務端執行,實作竊取使用者資訊等攻擊
  • 常見函數
    • 輸出函數:

      echo printf print print_r sprintf die var-dump var_export

    • trim(string,charlist)

      函數移除字元串兩側的空白字元或其他預定義字元,預定義字元包括、\t、\n、\x0B、\r以及空格,可選參數charlist支援添加額外需要删除的字元。

    • mysql_real_escape_string(string,connection)

      函數會對字元串中的特殊符号(\x 00,\n,\r,\,‘,“,\x1a)進行轉義。

    • stripslashes(string)

      函數删除字元串中的反斜杠。

  • 危害:

    1.網絡釣魚,盜取各類使用者的賬号,如機器登入帳号、使用者網銀帳号、各類管理者帳号;

    2.竊取使用者Cookie,擷取使用者隐私,或者利用使用者身份進一步執行操作

    3.劫持使用者(浏覽器)會話,進而執行任意操作,例如進行非法轉賬、強制發表日志等

    4.強制彈出廣告頁面,刷流量等

    5.進行惡意操作,例如任意篡改頁面資訊,删除文章等,傳播跨站腳本蠕蟲,網頁挂馬等

    6.進行基于大量的用戶端攻擊,如DDOS攻擊

    7.結合其它漏洞,如CSRF漏洞。

    8.進一步滲透網站

    9.擷取用戶端資訊,例如使用者的浏覽曆史、真實IP、開放端口、盜竊企業重要的具有商業價值的資料等;

    10.控制受害者機器向其他網站發起攻擊;

    11傳播跨站腳本蠕蟲等;

xss分類

存儲型(持續型)

存儲型(持久型):允許使用者存儲資料的web應用程式都可能會出現存儲型xss漏洞,當攻擊者送出一段xss代碼後被伺服器端接收并存儲,當攻擊者再次通路這個頁面時,這段xss被程式解讀出來響應給浏覽器造成xss跨站攻擊。将惡意的js腳本長期儲存在資料庫中,一般出現在留言闆,微網誌,評論

  • 經過資料庫,後端語言進行資料處理,隻能測試,看不到源代碼
  • 出現在留言闆,評論區,存到資料庫
  • 發包->x=123->x.php->寫到資料庫某個表->x.php->回顯

DOM型

DOM型:文檔對象模型, 不需要伺服器響應,直接浏覽器的dom解析,與伺服器無關,完全是用戶端的事情。不需要與伺服器互動,隻發生在用戶端處理資料階段

  • 通過操作HTML代碼,發送一個參數,結果沒有發包(F12看網絡),就是DOM型;JS代碼進行處理,可以看到源代碼
  • 發包x=123->本地浏覽器的靜态源代碼->x.php(直接前端代碼就可處理)

HTML DOM樹

常見漏洞之xssxss簡介xss分類xss檢測xss利用xss修複

反射型(非持續型)

反射型(非持久型):當使用者通路帶有xss代碼的URL請求時,伺服器端接收資料後處理,伺服器端接收資料後處理,然後把帶有xss代碼的資料發送到浏覽器,浏覽器解析這段代碼後,最終造成xss漏洞。一般是存在URL裡的,需要攻擊者提前構造一個惡意連結,來誘使客戶點

  • 不經過資料庫,隻能通過測試判斷,看不到源代碼
  • 發包->x=123->x.php->回包
  • 彈出警告視窗,顯示xss:

    <script>alert('xss')</script>

  • 建立一個超連結,點選執行:

    <a href='連結' onclick=alert('xss')>type</a>

  • 進行重定向,當執行代碼的時候,頁面會跳轉至該網址:

    <script>location='網址'</script>

    or

    <script>window.location='網址'</script>

  • 以h1号字型在受害者浏覽器顯示THIS WEBSITE IS UNDER ATTACK内容。

    innerHTML即文本内容,試圖構造payload替換了以前顯示的内容

    <script>document.body.innerHTML="<div style=visibility:visible;><h1>THIS WEBSITE IS UNDER ATTACK</h1></div>";</script>

xss檢測

  • 手工檢測XSS(考慮哪裡有輸入,輸入的地方在哪裡輸出)
    • 可得得知輸出位置

      輸入敏感字元

      <、>、"、'、()

      ,在送出請求後檢視HTML源代碼,看這些輸入的字元是否被轉義

      可輸入一些便于查找的字元,如

      AAAAA<>

      ,在ctrl+F時便于查找
    • 無法得知輸出位置

      在 web應用程式源代碼不對外公開的情況下,在測試XSS是無法得知輸入位置在何處顯示

      eg:一個留言闆,

      在div标簽中:

      <div>XSS TEST</div>

      在input标簽中:

      <input type="text" name="content" value="XSS Test"/>

      對于這種情況,通常會采用輸入“/>XSS Test”來測試,本質:閉合

  • 全自動檢測XSS

    XSSER、XSSF······

    xss利用

  • XSS會話劫持
    • JS操作cookie:不使用使用者的賬号密碼就可登陸;
      • 盜取使用者的cookie,

        document.cookie

        ;利用burpsuite替換cookie,或者利用浏覽器自帶的控制台(console)替換
    • SWSSION會話:維持會話狀态的另一種形式,可能會存儲在cookie中;
      • cookie,session差別:cookie是将資料存儲在用戶端,而session則是儲存在伺服器端,僅僅是在用戶端存儲一個ID;session必cookie要安全
  • XSS Framework架構
  • XSS GetShell
  • XSS蠕蟲

xss修複

XSS漏洞的本質是服務端分不清使用者輸入的内容是資料還是指令代碼,進而造成使用者輸入惡意代碼傳到服務端執行,實作竊取使用者資訊等攻擊

  • 設定重要的 cookie資訊為 httpOnly
  • 對輸入進行檢測和轉義
  • 對使用者從連結擷取參數需要展示到頁面中需要校驗合法性
  • 使用轉義函數進行轉義

繼續閱讀