關於我學XSS躺過的那些坑


XSS字符編碼

在學習編碼繞過時由於數量多,類型相似,不太容易記得住,記得全,故做此記錄。

0x01 Html標簽屬性中執行

簡單了解:

Html標簽屬性中的XSS問題多屬於javascript偽協議
常見的屬性有:

  • src
  • lowsrc
  • dynsrc
  • url
  • href
  • action
  • onload
  • onunload
  • onmouseover
  • onerror
  • 各種on開頭的事件

PS:此處可不加括號,如onclick=javascript:alert(1),各類教程里常見的<img src=javascript:alert(1)></img>Chrome、Firfox已失效,IE測試成功。

在Html標簽中,許多標簽具有執行javascript的權利,當服務器存在過濾時,我們可以嘗試通過以下編碼方法繞過:

  • 8/10/16進制轉換([.][&#][&#x])
  • 利用javascript:String.fromCharCode(xx,xx,xx......) [xx為編碼的字符串的ASCII碼]
  • JScript Encode [IE] JS fuck等
  • data:text/html;bbase64,xxxxxxx [IE下無效,Chorme、Firefox下均屬於空白域,無法獲取信息,不過可用作CVE攻擊]

0x02 在<script></script>

直接在script標簽里執行的情況,我們通常分為以下幾種利用方式:

  • 直接導入遠程XSS平台腳本
  • 直接在<></>中寫上自定義攻擊腳本,如生成img標簽

關於<></>中可用:

1) 單個拆開編碼成ASCII

eval(String.fromCharCode())

2) 使用eval()執行16進制轉換后的代碼

eval(\u0064\u0078......)
eval(\x64\x78......)

0x03 在樣式表中的編碼

樣式表中可用expression和@import來執行js代碼,此方法可進行適當的編碼轉換。
PS:僅在IE8.0之前的版本。

1) expression

全角字符:
<div style=xss:expression(alert(1))>
十六進制
<div style=xss:\0065xpression(alert(1))>
/**/注釋 [Javascript中也行]
<div sty/**/le=x/**/ss:\0065xpre/**/ssio/**/n(al/**/ert(1))>

2) @import

\和結束符\0會被瀏覽器忽略
@im\po\rt jav\ascr\ipt:al\ert(1)
@im\00po\0rt jav\00asc\0000ript:a\00lert(1)

瀏覽器差異

簡單記錄常見的瀏覽器差異造成的XSS

0x01 引號的差異

只有IE支持反引號`` `

0x02 標簽的差異

  • data協議執行代碼是在Chrome下執行
  • Chrome下srcdoc利用:<iframe srcdoc="&lt;script&gt;alert(1)&lt;/script&gt;"></iframe>
  • IE下<img src=javascript:alert(1)>
  • 只要火狐支持E4X

0x03 過濾器差異

Chrome能攔截大多數反射型XSS,Firefox次之,IE最次

瀏覽器異常解析BUG產生XSS漏洞

關於調用document

在剛開始學習XSS的時候總是想千方百計的想用javascript調用dom對象,比如document.cookie,卻不知這個只能在javascript域[偽協議或標簽內]范圍內。

小知識點

一、src等屬性在引入時如果漏洞網站協議名於xss平台相同,即可省略去,如:<img src=//www.baidu.com />
二、svg標簽屬於xml而不屬於html
三、關於Cors跨域:使用Ajax跨域時默認是不允許帶上會話數據的,不過可以在XSS平台通過設置返回的請求頭Access-Control-Allow-Credentials: true,並且需要設置xhr的withCreadential屬性值為true,注意此時返回的Access-Control-Allow-Origin不能設置為通配符true。
四、優先級:function xxx(){}形式定義的函數 -> == -> &
五、使用img等合法標簽跨域可以帶上會話信息
六、除javascript外還有vbscript、actionscript等
七、P3P協議僅僅是IE瀏覽器支持,通常是Hacker域名通過iframe或script等載入存在XSS漏洞的網站

與CSRF的區別

XSS的惡意請求偽造與CSRF極為相似,兩者的差別為:

  • 后者發出的偽造請求可為其他站點發出的,而前者都是存在XSS漏洞的站點發出的
  • CSRF是XSS無法替代的
  • CSRF可以無Javascript參與,及在黑客的網站上使用img等標簽發送帶Cookie(自帶)的跨域請求。

關於XSS防御

0x01 輸出Html標簽屬性

如:<input class='xxx' value="{輸出}"> 這里的輸出如果過濾/轉義了",便不存在XSS漏洞了,因為這里的value屬性不能執行js代碼。

0x02 輸出在注釋

一定要過濾換行符!!

0x03 輸出在樣式表

過濾expression和@import還有外部圖片的引用

0x04 字符集

開頭設定好字符集為 UTF-8

0x05 Cookie盜取

設置好path、開啟http_only、防止調試信息泄露和Apache400漏洞、使用Session


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM