前言最近一直在看國外的賞金平臺,繞waf是真的難受, 記錄一下繞過的場景。

初步測試一開始嘗試XSS,發現用戶的輸入在title中展示,那么一般來說就是看能否閉合,我們從下面圖中可以看到,輸入尖括號后被轉成了實體。

繞過html實體編碼解釋一下什么是html實體編碼

HTML實體編碼,也即HTML中的轉義字符。

在 HTML 中,某些字符是預留的,例如在 HTML 中不能使用小于號<和大于號>,這是因為瀏覽器會誤認為它們是標簽。如果希望正確地顯示預留字符,我們必須在HTML源代碼中使用字符實體(character entities)。HTML 中的常用字符實體是不間斷空格。(注意:實體名稱對大小寫敏感!) 字符實體類似這樣:&entity_name; 或者 &#entity_number;如需顯示小于號,我們必須這樣寫:< 或 < 常見的實體編碼:

關于更多的實體可在下面網站查看尋找:

基本拉丁字母, 128 符號 (???) SYMBL

繼續嘗試是發現我們講html10進制實體編號輸入轉義會閉合title標簽

原本以為事情逐漸簡單了起來,結果更大的一個坑在等著我。

WAF層面原本想著<img/src=1 onerror=alert(1) />直接秒殺 結果來了個waf

下一步按照往常一樣 fuzz事件,結果全是403,這時候那沒辦法了那就不能用img標簽了

改換其他標簽,fuzz以下 發現可用的還不少。

然后使用a標簽進行繞過

常用的payload,基于下面payload改就行了

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

原本是一番風順的 到后面發先還有過濾,真吐了,看圖就好

繞過javascript,到這里了可能一部分人覺得已經結束了,但實際上沒那么簡單

前面其實花的時間并不多主要繞alert的時候。此處我嘗試的多種方式包括html實體繞過,基本都不行,

然后就在此處卡了很久,我也想過不使用alert使用prompt這些函數但就是不行,后面發現后面就是不能跟括號和反引號

這時候就在想,還有不能用括號進行彈窗的函數?給我整懵逼了,找了一大圈一個都沒找到都需要用括號,alert后不需要括號和反引號的也過不了。

最后在推特上看到了這個最終完成繞過

aurebesh.js

本地測試payload

<a/href="javascript;{var{3:s,2:h,5:a,0:v,4:n,1:e}='earltv'}[self][0][v+a+e+s](e+s+v+h+n)(/infected/.source)" />click
<a href=ja&NewLine;vascript:k='',a=!k+k,f=!a+k,g=k+{},kk=a[k++],ka=a[kf=k],kg=++kf+k,ak=g[kf+kg],a[ak+=g[k]+(a.f+g)[k]+f[kg]+kk+ka+a[kf]+ak+kk+g[k]+ka][ak](f[k]+f[kf]+a[kg]+ka+kk+"(k)")()> 1111";//</title>

最終效果