XSS(一)

xss

非持久型xss攻擊:非持久型xss攻擊是一次性的,僅對當次的頁面訪問產生影響。非持久型xss攻擊要求用戶訪問一個被攻擊者篡改後的連接,用戶訪問該連接時,被植入的攻擊腳本被用戶遊覽器執行,從而達到攻擊目的。javascript

持久型xss攻擊:持久型xss,會把攻擊者的數據存儲在服務器端,攻擊行爲將伴隨着攻擊數據一直存在。html

反射型存儲型DOM型java

經常使用測試代碼:跨域

onmouseover="alert(xss);"

<script>alert(xss);</script>

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

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

主要原理:閉合標籤,構造惡意代碼瀏覽器

輸入用戶可構造,好比搜索框,評論留言區,註冊名字,聯繫方式等,同時頁面裏常常會有hidden屬性的input,這時直接burp抓包改就能夠了,隱藏屬性很差點擊,可用如下代碼 不一樣瀏覽器實現的快捷鍵方式不一樣,而且可能和其它快捷方式衝突服務器

accesskey="X" onclick="alert(xss)"dom

DOM XSS是在瀏覽器的解析中改變頁面DOM樹,且惡意代碼並不在返回頁面源碼中回顯xss

頁面跳轉經過JS跳轉,使用location.href、location.replace()、location.assign(),能夠經過javascript僞協議執行JS腳本函數

DOM XSS輸入點

Location 當前網頁的URL地址
window.name 當前網頁 tab 的名字,它被不一樣的網站賦值,也就是說這個網頁爲window.name 賦值後再跳轉到其它網站,window.name 的值依然不變
document.title 是當前網頁的標題,能夠在搜索框輸入控制它的內容
document.referer 表示來路,表示從哪一個網頁URL訪問過來的
postMessage 是HTML5 的一種跨域機制,但不少時候開發者沒有正確的作來源檢測,會致使 DOM XSS 的發生
location 它觸發 JS 一般是以跳轉到 JS URI 的方式執行
eval 是JS 內置的動態JS執行器
innerHTML 能爲一個網頁元素賦值
document.write 能夠輸出一個頁面流
Function 能經過函數生成一個函數,能夠傳入動態JS代碼
setTimeout 會延時執行JS代碼
setInterval 表示循環執行 JS 代碼
xss編碼繞過

有時網站對輸入字符進行了過濾,此時能夠經過編碼來進行繞過
原理:URL 請求時會對百分號等 URL 的編碼方式進行轉碼;瀏覽器接收到頁面數據後,會對 HTML 實體編碼進行轉碼;執行 JS 時會對 JSUnicode 等 JS 支持的方式進行轉碼。post

url編碼 %+16進制數字 https://www.w3school.com.cn/tags/html_ref_urlencode.html

url base64編碼 data:text/html;base64,PHNjcmlwdD5hbGVydCgveHNzLyk7PC9zY3JpcHQ+

html編碼  '&' + '約定名稱' + ';' 的形式,其實還有 '&#' + '十進制數字' + ';' 和 '&#x' + '十六進制數字' + ';'   十進制和十六進制後面的;能夠省略

JS Unicode 編碼
規則是 '\u' + '四位十六進制數字'
jsfuck https://www.bugku.com/tools/jsfuck/
在script標籤鍾插入一個空格或者是tab
<script >alert(1)</script>
<script    >alert(1)</script>

也能夠對tab,換行,回車進行編碼來繞過
<script&#9>alert(1)</script>
<script&#10>alert(1)</script>
<script&#13>alert(1)</script>

對標籤進行大小寫
<ScRipT>alert(1)</sCriPt>

插入null字節,在xss payload的任何地方插入null字節,有時候能夠繞過filter
<%00script>alert(1)</script>
<script>al%00ert(1)</script>

對於ie版本小於10的 html屬性支持反引號` 可用其來閉合雙引號,從而繞過htmlspecialchars()

參考來源:https://www.jianshu.com/p/13f0b9a15e46

相關文章
相關標籤/搜索