1. <small id="rw2jk"></small>
      網絡安全 頻道

      新手上路 | 上傳Word文件形成存儲型XSS路徑

        在滲透測試過程中,每當看到目標測試網站存在上傳功能時,總會激起我的好奇心。如果能夠走運的話,若目標網站服務器是PHP或ASP架構,而且上傳功能沒作后綴過濾,這樣就能導致可以直接上傳反彈腳本形成控制。如果這招行不通,我會嘗試上傳一個HTML頁面去觸發我自己設置的客戶端javascript腳本形成XSS攻擊。本文我就分享一個上傳docx文件形成存儲型XSS漏洞的實例。

      timg.jpg

        測試上傳功能

        剛好在某次Web測試工作中,我發現目標網站上傳功能中,用一個未授權用戶即可上傳自己的文件,該上傳功能中允許用戶上傳.docx文件:

      01.jpg

        當把這種.docx文件上傳之后,它還能被下載。通過比較發現,上傳成功的文件uploaded.docx和服務器上其對應的可下載文件downloaded.docx之間存在著一些不同,也就是說,文件上傳成功之后,在提供下載之前,服務器會對這個上傳文件進行一些處理操作,之后,再提供下載。

      02.jpg

        用來上傳的文件必須是一個有效的.docx文件,那基于瀏覽器的解析顯示來說,它可能會把它轉換為html格式來顯示,那我能不能把它后綴作個更改呢?所以我先來試試在POST請求中把.docx后綴更改為.html看看:

      03.jpg

        當這個.html文件上傳之后,向服務器請求這個文件后,服務器會把其Content-Type頭默認為text/html,這樣的話,瀏覽器會把這個文件解析為HTML執行:

      04.jpg

        插入XSS Payload

        這樣,我就想到了把XSS Payload捆綁到一個像下圖這樣的.docx壓縮文件中去。由于這是.docx經直接把后綴更改為.zip的壓縮格式文件包樣例,我需要確定在上傳或Web解析過程中某些不會被轉儲更改的區域,最后,我發現了這種docx變zip壓縮格式包中的某些文件路徑會保持原樣,像下圖這樣,我把其中的Settings.xml文件名加上了一長串字母好待區分。

      05.jpg

        之后,再把這個zip格式后綴還原為docx格式,用UItraEdit查看hex代碼,再在保持原樣的區域中覆蓋掉一些字節,插入我自己設置的JavaScript XSS代碼:

      06.jpg

        上傳時,服務器能正常接收這個經過構造的.docx文件,在HTTP POST過程中,我把它的后綴更改為.html后綴進行了最終上傳:

      07.jpg

        向服務器請求這個文件時,它能被服務器解析為HTML文件,其中包含了完整的之前插入的XSS Payload代碼:

      08.jpg

        當然瀏覽器解析之后,也能成功執行其中插入的XSS Payload:09.jpg

        為了對這種XSS攻擊進行混淆隱蔽,攻擊者可以在其中加入一個包含URI統一資源標識符的隱藏iframe框架,能對受害者產生迷惑效果,像下圖這樣:

      10.jpg

        防護措施

        這樣的效果對于開發者來說應該采取以下手段來進行限制。

        文件上傳之前,在服務器端驗證上傳文件格式是否為.doc或.docx有效格式;

        嚴格限制Content-Type頭,對Content-Type頭或特定后綴格式更改過的上傳文件須保持與上傳文件相同的Content-Type頭信息;

        控制文件下載時的其它操作情況,添加響應標頭:“Content-Disposition: attachment”,以防止在瀏覽器中內嵌顯示文件;

        過濾掉所有包含HTML標簽的上傳,因為docx可經壓縮篡改其中包含的HTML文件。

      0
      相關文章
        影视站