2 XSS

XSS的原理

XSS(跨站腳本攻擊)原理

1. 核心機制

XSS攻擊的本質是惡意腳本在用戶瀏覽器中執行。攻擊者通過向網頁注入惡意代碼,當其他用戶訪問該頁面時,瀏覽器會執行這些代碼(沒有對用戶的輸入進行過濾導致用戶輸入的惡意JS代碼輸入到頁面中產生漏洞的),導致:

  • 會話劫持(竊取Cookie)
  • 頁面篡改
  • 敏感數據竊取
  • 惡意重定向
2. 攻擊流程
graph LR
A[攻擊者構造惡意腳本] --> B[注入目標網站]
B --> C[用戶訪問被篡改頁面]
C --> D[瀏覽器執行惡意腳本]
D --> E[攻擊達成]

3. 三種主要類型

(1) 反射型XSS

  • 攻擊方式:惡意腳本通過URL參數傳遞
  • 觸發條件:服務器未過濾輸入,直接返回參數內容
  • 示例:
    http://example.com/search?keyword=<script>stealCookie()</script>
    

    服務器返回頁面包含:<p>您搜索了: <script>stealCookie()</script></p>

(2) 存儲型XSS(危害最大)

  • 攻擊方式:惡意腳本存儲到數據庫
  • 觸發條件:用戶訪問包含惡意內容的頁面(如評論區)
  • 危害性:長期存在,影響所有訪問者
  • 攻擊鏈: $$ \text{攻擊者提交} \rightarrow \text{服務器存儲} \rightarrow \text{用戶加載} \rightarrow \text{腳本執行} $$

(3) DOM型XSS

  • 特點:完全在客戶端發生,不經過服務器
  • 原理:前端JavaScript不安全地操作DOM
  • 示例漏洞代碼:
    document.getElementById("output").innerHTML = "歡迎, " + location.hash.substring(1);  // 從URL#后取值
    

    攻擊URL:http://example.com#<img src=x onerror=alert(1)>
4. 關鍵漏洞點
  • 輸入未過濾:用戶輸入直接拼接到HTML/JS中
  • 輸出未轉義:特殊字符如 < > " ' 未轉換為實體字符
  • 不安全API使用:如 innerHTMLeval()document.write()
5. 數學表達攻擊場景

設合法輸入為 $A$,惡意載荷為 $M$,漏洞函數為 $f$,則攻擊成功條件: $$ f(A + M) \neq f(A) + f(M) $$ 當過濾函數 $f$ 非冪等或不完備時,存在: $$ \exists M \text{ 使得 } f(M) = M \quad \text{(繞過過濾)} $$

6. 防御原則
  • 輸入過濾:刪除或編碼 < > & " ' 等危險字符
  • 輸出轉義:根據上下文使用不同編碼規則
    • HTML上下文:< → &lt;
    • JavaScript上下文:" → \u0022
  • 內容安全策略(CSP):通過HTTP頭限制腳本來源
    Content-Security-Policy: script-src 'self'
    

總結:XSS本質是信任鏈斷裂——瀏覽器信任服務器返回的內容,而服務器未充分驗證用戶輸入。防御關鍵在于嚴格實施數據與代碼分離原則

?編碼

地址欄urlcode

英文數字一般不會進行編碼,一般對特殊字符進行編碼

ASCII轉16進制就是urlcode編碼規范

JS unicode

\u開始的

先轉ASCLL,再轉16進制---》\u00

html實體編碼

有三種形式:

十進制編碼:直接轉ASCII,如果是16進制編碼,再轉一個16進制就行了

&#60;---->不要忘記分號

解析順序

html實體編碼---》urlcode----》js unicode

?XSS-Lab 靶場過關

level 1 無任何過濾

http://127.0.0.1/xss-labs-master/level1.php?name=t1
<?php 
ini_set("display_errors", 0);
$str = $_GET["name"];
echo "<h2 align=center>歡迎用戶".$str."</h2>";
?>

get傳參,這里可以看到這關并沒有做任何的過濾,導致我name=什么就會輸出什么,直接將name=的結果輸出到頁面上來,但是我們要了解到到底什么樣的標簽可以嵌套解析,不然我們沒辦法解析我的惡意代碼

payload:

http://127.0.0.1/xss-labs-master/level1.php?name=%3Cimg%20src=1%20onerror=alert(1)%3E
http://127.0.0.1/xss-labs-master/level1.php?name=%3Cscript%3Ealert(1)%3C/script%3E

說明<h>這個標簽是可以嵌套解析標簽和script代碼的,那具體我們有那些可以,那些不行呢?

level 2 input表單

<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "<h2 align=center>沒有找到和".htmlspecialchars($str)."相關的結果.</h2>".'<center>
<form action=level2.php method=GET>
<input name=keyword  value="'.$str.'">
<input type=submit name=submit value="搜索"/>
</form>
</center>';
?>

?.htmlspecialchars函數

詳解:https://www.php.net/manual/zh/function.htmlspecialchars.php

?可以看到這個函數當我們再像前面那關那樣輸入js代碼,發現它并不能解析,這是因為此過濾函數進行了html的實體編碼,將<>轉換成了如下實體編碼,這樣就會認為解析過后的<>是普通字符而無法解析

執行轉換
字符替換后
&?(& 符號)&amp;
"?(雙引號)&quot;,除非設置了?ENT_NOQUOTES
'?(單引號)設置了?ENT_QUOTES?后,?&#039;?(如果是?ENT_HTML401) ,或者?&apos;?(如果是?ENT_XML1、?ENT_XHTML?或?ENT_HTML5)。
<?(小于)&lt;
>?(大于)&gt;

繞過標簽和屬性value:

分析源碼可以看出它并沒有對input進行過濾,只對get傳參進行了過濾,那我們就需要繞過input

1 繞過value

“”閉合

aaaa" οnclick="alert(1)

2 閉合input標簽

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

XSS cookie

1 進入登錄頁面,查看登錄的cookie

2 刪除頁面的cookie

3 進入服務器的后臺復制cookie,修改后臺的index.php

4 成功進入

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/97907.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/97907.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/97907.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GitHub每日最火火火項目(9.3)

1. pedroslopez / whatsapp-web.js 項目名稱&#xff1a;whatsapp-web.js項目介紹&#xff1a;基于 JavaScript 開發&#xff0c;是一個用于 Node.js 的 WhatsApp 客戶端庫&#xff0c;通過 WhatsApp Web 瀏覽器應用進行連接&#xff08;A WhatsApp client library for NodeJS …

Ansible變量

Ansible變量定義變量規則&#xff1a;由字母/數字/下劃線組成&#xff0c;變量需要以字母開頭&#xff0c;ansible內置的關鍵字不能作為變量。ansible中&#xff0c;可以將變量簡化為三個范圍&#xff1a;Global范圍&#xff08;高&#xff09;&#xff1a;從命令行和ansible配…

Elasticsearch 核心特性與應用指南

最近在準備面試&#xff0c;正把平時積累的筆記、項目中遇到的問題與解決方案、對核心原理的理解&#xff0c;以及高頻業務場景的應對策略系統梳理一遍&#xff0c;既能加深記憶&#xff0c;也能讓知識體系更扎實&#xff0c;供大家參考&#xff0c;歡迎討論。一、核心優勢 Ela…

力扣115:不同的子序列

力扣115:不同的子序列題目思路代碼題目 給你兩個字符串 s 和 t &#xff0c;統計并返回在 s 的 子序列 中 t 出現的個數。 測試用例保證結果在 32 位有符號整數范圍內。 思路 首先我們來考慮特殊情況&#xff0c;當s串的長度小于t串時s串肯定就沒有t串了。其他情況我們就需…

2004-2023年各省生活垃圾無害化處理率數據(無缺失)

2004-2023年各省生活垃圾無害化處理率數據&#xff08;無缺失&#xff09; 1、時間&#xff1a;2004-2023年 2、來源&#xff1a;國家統計局、統計年鑒 3、指標&#xff1a;生活垃圾無害化處理率 4、范圍&#xff1a;30省 5、指標解釋&#xff1a;生活垃圾無害化處理率指報…

【Python練習題】Python小白必練100題答案-第21-40題

練習題直達鏈接Python小白必練100題答案-第1-20題點我直達Python小白必練100題答案-第21-40題點我直達Python小白必練100題答案-第41-60題點我直達Python小白必練100題答案-第61-80題點我直達Python小白必練100題答案-第81-97題點我直達目錄專欄導讀循環結構 字符串操作第三部…

添加?件--場景?

添加?件–場景? 學習到這?&#xff0c;我們已經清楚了如何向倉庫中添加?件&#xff0c;并且對于?作區、暫存區、版本庫也有了?定的認識。那么我們再展??種添加?件的場景&#xff0c;能加深對?作區、暫存區、版本庫的理解&#xff0c;?例如下&#xff1a; roothcss-e…

華為網路設備學習-31(BGP協議 六)

BGP路由屬性的幾種常見使用方法&#xff1a; 29章是 BGP路由匯總 與 as-path-filter&#xff08;正則表達式&#xff09; 30章是 Community 的使用方法 本章是 ip前綴列表ip-prefix 、 路由過濾 filter-policy 和路由策略 route-policy 一、在BGP中的 ip前綴列表&#xf…

Windows PostgreSQL JDBC驅動安裝包位置

要在Windows系統上獲取PostgreSQL JDBC驅動安裝包&#xff08;后綴為.jar的文件&#xff09;&#xff0c;可通過以下官方及常用渠道獲取&#xff0c;具體位置如下&#xff1a; ###&#x1f527; 1. 官方網站下載&#xff08;推薦&#xff09; 下載地址&#xff1a;https://jdb…

機器學習從入門到精通 - 聚類算法大比拼:K-Means、DBSCAN實戰與評估陷阱

機器學習從入門到精通 - 聚類算法大比拼&#xff1a;K-Means、DBSCAN實戰與評估陷阱 開場白&#xff1a;推開無監督學習的大門 朋友們&#xff0c;不知道你們有沒有對著堆積如山、沒有標簽的數據發過愁&#xff1f;想從里面找出點規律&#xff0c;分組什么的&#xff0c;結果發…

AI 重構內容創作:從文案生成到視頻剪輯,創作者該如何與 AI 協同共生?

一、引言&#xff1a;AI 掀起內容創作的 “重構浪潮”?行業現象引入&#xff1a;列舉 AI 在內容創作領域的爆發式應用案例&#xff08;如某平臺 AI 文案工具日生成量破百萬、AI 視頻剪輯軟件用戶增長超 300%&#xff09;?創作者需求變化&#xff1a;通過調研數據說明創作者對…

后端一次性返回十萬條數據時,前端需要采用多種性能優化策略來避免頁面卡頓

當后端一次性返回十萬條數據時&#xff0c;前端需要采用多種性能優化策略來避免頁面卡頓。以下是主要的優化方案&#xff1a; 分頁加載 - 將數據分批次加載顯示虛擬滾動 - 只渲染可視區域內的數據數據懶加載 - 按需加載數據Web Workers - 在后臺線程處理數據時間切片 - 分散渲染…

基于-輕量級文檔搜索系統的測試報告

文章目錄一、項目背景二、項目功能三、測試計劃&#xff08;一&#xff09;測試用例設計&#xff08;二&#xff09;測試用例實現1.功能測試2.界面測試3.兼容性測試4.易用性測試5.安全性測試一、項目背景 1.基于輕量級文檔檢索系統采用C技術棧來實現&#xff0c;同時使用了本地…

編輯器vim(Linux)

Linux下開發工具是獨立的寫代碼——編輯器 vim編譯代碼——gcc/g調試——gdb、cgdb構建工具——makefile、make、cmakevim只用來寫代碼注意&#xff1a;直接用vim打開一個不存在的文件并保存退出&#xff0c;就會自動生成該文件vim有多種模式命令模式&#xff08;Normal Mode&a…

GitLab,2025最新如何配置中的SSH key步驟

電腦右鍵先檢查&#xff0c;是否有公鑰 git cat ~/.ssh/id_rsa.pub下面是有&#xff0c;不用生成公鑰&#xff0c;沒有就要生成生成本地電腦公鑰, 建議用第二種 //第一種ssh-keygen -t rsa//第二種------- 1.打開git bash,輸入&#xff1a;ssh-keygen -t rsa -C “你的郵箱”ss…

華為HCIE證書多久續一次費?費用多少?

根據華為官方政策&#xff0c;華為認證HCIE的有效期為3年&#xff0c;有效期自證書正式發放之日起計算&#xff0c;考生可通過華為人才在線官網登錄個人賬號&#xff0c;在“我的證書”欄目中查詢具體有效期起止時間。一、HCIE證書到期后的續證方式 1.重考對應HCIE的認證考試&a…

提升文本到圖像強化學習穩定性:Pref - GRPO算法如何革新圖像生成?

提升文本到圖像強化學習穩定性&#xff1a;Pref - GRPO算法如何革新圖像生成&#xff1f; 在文本到圖像生成領域&#xff0c;強化學習正重塑著模型與人類偏好的對齊方式。本文聚焦于一種創新的基于成對偏好獎勵的GRPO方法&#xff08;Pref - GRPO&#xff09;&#xff0c;它通…

Linux UDisks守護進程曝本地提權漏洞CVE-2025-8067,PoC已發布

漏洞概述安全研究人員在Linux環境中廣泛使用的磁盤管理組件UDisks守護進程中&#xff0c;發現了一個嚴重漏洞&#xff08;編號CVE-2025-8067&#xff0c;CVSS評分8.5&#xff09;。該漏洞已報告給紅帽產品安全團隊&#xff0c;并在UDisks更新版本中得到修復。技術細節該漏洞存在…

uniapp 開發上架 iOS App全流程

操作文檔網址&#xff1a;https://ask.dcloud.net.cn/article/152 操作學習視頻地址&#xff1a;uniapp打包上線微信小程序、安卓、IOS流程_嗶哩嗶哩_bilibili 第一步&#xff1a;注冊蘋果 iOS 個人開發者賬號 費用說明 ?個人開發者賬號?&#xff1a;適用于獨立開發者或小…

Sqlsugar補充自定義模板

DBFirst默認創建所有實體CreateClassFile()的第二個參數為生成實體類命名空間//.net6以下 db.DbFirst.IsCreateAttribute().CreateClassFile("c:\\Demo\\1", "Models"); //.net6以上 string加? db.DbFirst.IsCreateAttribute().StringNullable().CreateCl…