0x00 文件上傳場景(本文檔只做技術交流,切勿進行違法犯罪操作,請做一個好人,不給別人添麻煩) 文件上傳的場景真的隨處可見,不加防范小心,容易造成漏洞,造成信息泄露,甚至更為嚴重的災難。 比如某博客網站評論編輯模塊,右上角就有支持上傳圖片的功能,提交帶有惡意字符串的圖片后,就直接可以顯示在評論中了,如圖: 再次聲明:大家在自己的搭建的環境里面測試,不要給別人造成麻煩哈。 文件上傳漏洞是進行滲透是比較常見好利用的漏洞,利用它能夠直接上傳webshell,進行連接,是比較常見的攻擊方式。針對文件上傳場景檢測和繞過進行了全面姿勢總結。 0x01 滲透姿勢全面分析針對一個文件上傳場景,首先判斷是客戶端JS校驗還是服務器校驗,判斷依據:上傳非法文件,返回結果是否很快? 1.客戶端JavaScript檢測如果上傳非法文件,返回結果很快,或者F12打開開發者模式,上傳非法文件,發現沒有網絡請求,但是被攔截了,很有可能就是客戶端進行了JS校驗檢測。這種前端采用JS限制上傳類型和大小的方式: [code] [/code]很是雞肋,繞過思路:1.直接本地禁用JS,不讓其做檢測 2.抓包,修改文件后綴名類型,繞過檢測限制 2.服務器后端檢測服務器后端檢測有較多方式,普遍分為文件類型檢測,文件頭類型,文件擴展名名單檢測,文件內容檢測,接下來進行簡要分析。 a.文件類型檢測此類檢測防護主要是從content-type進行檢測,檢驗請求中content-type是否符合可接受的上傳類型(如"image/gif","image/png","image/jpeg") [code] if (isset($_POST['submit'])) { if (file_exists(UPLOAD_PATH)) { if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) { $temp_file = $_FILES['upload_file']['tmp_name']; $img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name']; if (move_uploaded_file($temp_file, $img_path)) { $is_upload = true;[/code]繞過思路:抓包將content-type改為可接受圖片形式,即可繞過 b.文件頭類型檢測上個文件類型是檢測content-type,比較好偽造,這個則是使用getimagesize()函數來獲取文件的MIME類型,通過文件頭進行判斷文件類型 [code]if(file_exists($filename)){ $info = getimagesize($filename);[/code]文件頭就是文件特定的標志,如二進制PE文件的4D5A,bmp文件的424D,zip文件的504B0304,各種常見文件的文件頭類型大家可以查找了解一下,常見圖片文件頭如下: gif: GIF89a jpg,jpeg: FF D8 FF png: 89 50 4E 47 0D 0A 繞過思路:針對這種,上傳木馬惡意文件時,先使用編輯工具在數據最前面添加圖片的文件頭進行偽造,即可繞過 c.文件擴展名檢測這種類型有基于黑名單檢測和白名單檢測。通常基于黑名單是很不安全的,黑名單機制:只攔截名單中出現的擴展后綴名,其余默認放行。這就取決于名單中的擴展后綴名覆蓋能力范圍了,很難把所有的考慮全面,就很容易造成漏洞。 黑名單繞過思路:可以從服務器的解析特性進行分析,如特殊可解析后綴php3,php7,phtml,jspx等 如特殊的解析方式陌生后綴名,帶換行后綴名,雙后綴名等解析差異造成的漏洞。 還可以從混淆方面出發,后綴名大小寫,點繞過,空格繞過,以及上傳.htaccess配置控制文件權限和::$DATA數據流的使用 基于白名單相對于黑名單就安全很多了,要求只能是特定擴展名的文件才能夠上傳。 白名單繞過思路:MIME繞過,修改文件類型為白名單可接受的類型,以及%00,0x00截斷繞過,這種場景針對save_path可控。 00截斷原理其實很巧妙,利用場景是文件保存路徑可控,這樣一來我們上傳的文件符合白名單就行,真正動手的地方在文件保存路徑出,可以放上自己的webshell文件,然后在webshell文件后面添加%00,或0x00,再加一些字符,這樣一來,系統在解析碰到00就會截斷,后面字符就不起作用,只剩下前面的webshell文件名,就可以在url中進行訪問了。%00和0x00的使用區別在于提交get請求時,是%00,會進行url自動解碼動作,然后進入驗證函數。0x00則是post請求直接進入驗證函數。 d.文件內容檢測比較厲害的防護檢測,就是針對內容做檢測,這種防護能力比較強,但也不是不能繞過。自始至終,攻防都是在對抗中螺旋演進的。 這種檢測防護基本都是從webshell具有的代表性敏感字符?或者危險敏感函數。 繞過思路:從特殊敏感字符開始進行Fuzz測試,探測webshell中有多少必要的字符存在被替換,如果構成webshell執行的字符 被替換得較多,剩下未過濾的字符的難以支撐webshell執行,可以換個角度利用系統,調用腳本語言,如 |
免責聲明:本站部分文章和圖片均來自用戶投稿和網絡收集,旨在傳播知識,文章和圖片版權歸原作者及原出處所有,僅供學習與參考,請勿用于商業用途,如果損害了您的權利,請聯系我們及時修正或刪除。謝謝!
始終以前瞻性的眼光聚焦站長、創業、互聯網等領域,為您提供最新最全的互聯網資訊,幫助站長轉型升級,為互聯網創業者提供更加優質的創業信息和品牌營銷服務,與站長一起進步!讓互聯網創業者不再孤獨!
掃一掃,關注站長網微信