*本文將主要說明:Web漏洞中的文件長傳繞過姿勢大全
在鵝廠復試中,面試官問到了web漏洞中的文件上傳繞過
要求:總結文件上傳的各種姿勢,以及方法。
本人菜雞一枚,支吾半天竟沒回答完整,目測緊張過度了。嗚嗚~
之后百度一搜,所謂一圖解憂愁啊!
上圖:
總結起來,文件上傳漏洞分兩種:
客戶端
原理:通過javascript來校驗上傳文件的后綴是否合法,可以采用白名單,也可以采用黑名單的方式。
判斷方式:在瀏覽加載文件,但還未點擊上傳按鈕時便彈出對話框,內容如:只允許上傳.jpg/.jpeg/.png后綴名的文件,而此時並沒有發送數據包。
客戶端的校驗繞過:直接修改js代碼或者使用抓包的方法修改請求內容繞過,可以先上傳一個gif木馬,通過抓包修改為jsp/php/asp,只用這種方法來檢測是肯定可以繞過的。
服務端
原理:校驗請求頭 content-type字段,例如用PHP檢測。
通過自己寫正則匹配來判斷文件幻數(文件頭)內容是否符合要求,一般來說屬於白名單的檢測,常見的文件頭(文件頭標志位)如下:
文件加載檢測:一般是調用API或函數去進行文件加載測試,例如圖像渲染測試,當測試結果正常的時候才允許上傳
1、一次渲染(代碼注入)
2、二次渲染
后綴名黑名單校驗
后綴名白名單校驗
自定義:WAF校驗,即使用不同的WAF產品來進行過濾,通常是獨立與服務程序的一段中間程序或者硬件
服務端的驗校繞過:校驗請求頭content-type字段繞過,通過抓包來修改Http頭的content-type即可繞過。
- 文件幻數(文件頭)檢測繞過:在木馬內容的前面插入對應的文件頭內容,例如:GIF89a ,更保險的方法是在可上傳的文件中插入木馬代碼,然后修改后綴
- 文件加載檢測:通過例如加載文件進行圖像渲染的方式來測試,這個時候就一般需要在正常的文件中插入木馬代碼了,例如圖像,那么插入的代碼一般會放在圖像的注釋區,因此不會影響圖像正常渲染繞過這種檢測,此時可以使用工具(稱為插馬器)來進行插入,例如edjpgcom,或者直接用copy命令來合成也可以。當然這種檢測不一定能夠完全繞過
- 后綴名檢測后綴黑名單檢測:找查blacklist(黑名單列表)的漏網之魚,例如
- 大小寫:如果檢測的時候不忽略大小寫,那么可以改變后綴名的大小寫繞過
- 擴展名:列表中如果忽略了某些后綴
- 能被解析的文件擴展名列表:
- jsp jspx jspf
- asp asa cer aspx
- php php php3 php4 pht
- exe exee
- 后綴白名單檢測:白名單檢測還是會比黑名單強一點,常見的繞過方法有%00截斷,還有服務器的解析漏洞
- %00截斷漏洞:如果存在這類漏洞,那么后綴名的檢測都可以繞過,此時我們可以如下命名一個上傳文件
解析漏洞:這類漏洞是本身服務器的中間件產生的,例如apache,nginx都被爆出過存在解析漏洞,存在解析漏洞的話,上傳的安全性幾乎就完全失去了
例如:
IS5.x-6.x解析漏洞
apache解析漏洞
nginx解析漏洞
IIS7.5解析漏洞
等等,后期再說吧
還有就是防火牆(WAF)的眾多繞過姿勢,后期再說。
文件上傳漏洞可以自己搭建靶機去實戰一下:
https://github.com/c0ny1/upload-labs