Cross-Site-Scripting


xss之過濾

幾種xss繞過的姿勢:

  • 前端限制繞過,直接抓包重放,或者修改html前端代碼。比如反射型XSS(get)中限制輸入20個字符。
  • 大小寫,比如<SCRIPT>aLeRT(111)</sCRIpt>。后台可能用正則表達式匹配,如果正則里面只匹配小寫,那就可能被繞過。
  • 雙寫(拼湊),<scri<script>pt>alert(111)</scri</script>pt>。后台可能把<script>標簽去掉換,但可能只去掉一次。
  • 注釋干擾,<scri<!--test-->pt>alert(111)</sc<!--test-->ript>。加上注釋后可能可以繞過后台過濾機制。
  • 編碼的方式:后台過濾了特殊字符,比如<script>標簽,但該標簽可以被各種編碼,后台不一定會過濾當瀏覽器對該編碼進行識別時,會翻譯成正常的標簽,從而執行。

 

 

當我們輸入<script>' ":,33

 

 

我們發現我們輸入的內容只有<script>標簽未顯示,說明<script>標簽被過濾了。

嘗試用大小寫混合的方式看看能否繞過

payload如下:

<SCRIpT>alert("liuxixi1")</sCRiPt>

成功出現彈窗!

 

payload2:

<img src=2 onerror=alert("劉茜茜")>

 

 !!解釋<img src=2 onerror=alert("劉茜茜")>:

完整的是:<script type="text/javascript">alert("劉茜茜")</script>
js,alert("劉茜茜")語句是彈出消息框,顯示劉茜茜
<img src=1 onerror=alert("劉茜茜")>
是當圖片沒有找到路徑(即src=“路徑:可以使相對路徑也可以使絕對路徑”找不到圖片)就會 彈出消息框,顯示劉茜茜 ,就是onerror=alert("劉茜茜")起的作用

 

 xss之htmlspecialchars

htmlspecialchars()函數定義及用法:

  在php中,htmlspecialchars()函數是使用來把一些預定義的字符轉換為HTML實體,返回轉換后的新字符串,原字符串不變。如果 string 包含無效的編碼,則返回一個空的字符串,除非設置了 ENT_IGNORE 或者 ENT_SUBSTITUTE 標志;

被轉換的預定義的字符有:

  &:轉換為&amp;

  ":轉換為&quot;

  ':轉換為成為 '

  <:轉換為&lt;

  >:轉換為&gt;

可用的引號類型:

  ENT_COMPAT:默認。僅編碼雙引號。

  ENT_QUOTES:編碼雙引號和單引號。

  ENT_NOQUOTES:不編碼任何引號。

當我們輸入<script>./()2' ":時,輸出結果是我們輸入的內容都被記錄了,說明有些內容是被編碼了。

 

 

 

 由前面被轉換的預定字符可以知道,此函數可以編碼&," ,<,>,但是單引號同樣可以使用。

構造payload如下:

'onclick='alert("liuxixi2")'

前后的單引號是閉合

 xss之href輸出

 

 

 輸入www.sohu.com,查看源代碼,發現輸入的內容顯示在a標簽的href屬性里面,可以使用javascript協議來執行js

 

 

 

 這個頁面會判斷我們輸入的內容,然后判斷我們輸入的網址,如果輸入的不是百度會對我們輸入的內容用 htmlspecialchars() 進行處理。這次htmlspecialchars函數使用了ENT_QUOTES類,也加上了對單引號的轉義,

如果要對 href 做處理,一般有兩個邏輯:

  • 輸入的時候只允許 http 或 https 開頭的協議,才允許輸出
  • 其次再進行htmlspecialchars處理

payload如下:

javascript:alert("liuxixi3")

成功彈窗:

 xss之js輸出

輸入1111,查看源碼

 

 發現我們輸入的內容在js當中,所以我們需要將前面的<script>標簽閉合掉就能顯示我們輸入的內容了。

payload如下:

</script><script>alert("liuxixi3")</script>

成功出現彈窗

 

 


免責聲明!

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



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