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