Як прадухіліць Файл Загрузіць Уразлівасці
- Ўплыў File Upload Уразлівасці
- Тыпы файлаў Upload ўразлівасці
- Лакальны файл загрузкі ўразлівасці
- Remote File Upload Vulnerability
- выснову
Загрузка файл Уразлівасць з'яўляецца трэцім найбольш распаўсюджаным тыпам ўразлівасці, якія мы знайшлі ў нашым аналізе уразлівасці 1599 WordPress уразлівасцяў на працягу 14 месяцаў.
Ўплыў File Upload Уразлівасці
У дэманстрацыі відэа ніжэй паказана, як ўразлівасць загрузкі файла выяўленая зламыснікам на ўразьлівым сайце. Атакуючы затым выкарыстоўвае Metasploit, каб атрымаць выдаленую абалонку на сайце. Мы паказваем, што магчымасці выдаленай абалонкі забяспечвае зламысніку. Відэа наглядна дэманструе, што загрузка файлаў ўразлівасць вельмі сур'ёзна і вельмі простая ў эксплуатацыі.
Тыпы файлаў Upload ўразлівасці
Ёсць два асноўных выгляду уразлівасці загрузкі файлаў. Мы будзем даваць гэтыя апісальныя імёны ў гэтым артыкуле, што вы не можаце пачуць у іншым месцы, але мы лічым гэта апісаць адрозненне паміж асноўнымі тыпамі уразлівасці загрузкі.
Ўразлівасць лакальнай загрузкі файла з'яўляецца уразлівасцю , калі праграма дазваляе карыстальніку загрузіць шкоднасны файл непасрэдна , які затым выконваецца.
Ўразлівасць выдаленай загрузкі файлаў з'яўляецца уразлівасцю , калі праграма выкарыстоўвае карыстацкі ўвод для здабывання аддаленага файла з сайта ў Інтэрнэце і захоўваць яго на месцы. Гэты файл затым выконваецца зламыснікам.
Давайце разгледзім кожны з гэтых уразлівасцяў у некаторых дэталях, як яны ствараюцца і як іх пазбегнуць.
Лакальны файл загрузкі ўразлівасці
Каб праверыць гэтую ўразлівасць, давайце паглядзім на ўразлівасць загрузкі ўбудовы файл «wpshop» паведаміў у пачатку 2015 года Вось код, які стварыў ўразлівасць:
$ Файла = $ _FILES [ 'wpshop_file']; $ Tmp_name = $ файл [ 'tmp_name']; $ Імя = $ файла [ "імя"]; @move_uploaded_file (. $ tmp_name, WPSHOP_UPLOAD_DIR $ назва);
Ты можаш знайсці гэты код на лініі 620 уключае / ajax.php ў версіі 1.3.9.5 ўбудовы ,
Прыведзены вышэй код робіць дзве крытычныя памылкі, якія ствараюць ўразлівасць загрузкі файлаў.
Памылка 1: Там няма аўтэнтыфікацыі або аўтарызацыі праверкі , каб пераканацца , што карыстальнік увайшоў у сістэму (аўтэнтыфікацыі) і мае доступ для выканання файла загрузкі (аўтарызацыі). Гэта дазваляе зламысніку загрузіць файл на вэб-сайт без неабходнасці ўваходу ў сістэму або мець правільныя дазволу.
Як распрацоўшчык, вы можаце пазбегнуць гэтай памылкі, праверыўшы мае дазвол для загрузкі файлаў перад апрацоўкай загрузкі файла карыстальніка:
калі // Праверка бягучага карыстальніка можна загрузіць файлы wp_die (__ ( «У вас няма дазволу на загрузку файлаў.»)) (current_user_can ( «upload_files!»)); // загрузіць файл працэсу
Памылка 2: Там няма санітарнага па імені файла ці змесціва. Гэта дазваляе зламысніку загрузіць файл з пашырэннем .php, якія затым могуць быць даступныя зламыснікам з Інтэрнэту і выконваюцца.
Распрацоўшчыкі могуць пазбегнуць гэтай памылкі з дапамогай дэзінфікуе імя файла, так што ён не ўтрымлівае пашырэнне, якое можа выканаць код з дапамогай вэб-сервера. WordPress мае некаторыя ўбудаваныя функцыі для праверкі і дэзінфікаваць файлы перад загрузкай.
wp_check_filetype () будзе правяраць пашырэнне файла дазволены загружаць, і, па змаўчанні, спіс WordPress у дапушчальнай загрузцы файлаў прадухіляе любы выкананы код ад загружаюцца.
$ FILEINFO = wp_check_filetype (базавую ($ _ FILES [ 'wpshop_file'] [ 'імя'])); калі (! пуста ($ FILEINFO [ 'вн'])) {// Гэты файл з'яўляецца сапраўдным} яшчэ {// Некарэктны файл}
Акрамя таго, можна дадаткова абмежаваць тое, што дазволена з указаннем тыпаў пантамімы дазволена. Гэты спіс дазваляе толькі малюнкі.
// Мы толькі што дазваляе малюнка $ allowedMimes = Array ( 'JPG | JPEG | JPE' => 'малюнак / JPEG', 'GIF' => 'малюнак / GIF', 'PNG' => 'малюнак / PNG') ; $ FILEINFO = wp_check_filetype (базавую ($ _ FILES [ 'wpshop_file'] [ 'імя']), $ allowedMimes);
Цяпер, калі мы пераканаліся, імя файла з'яўляецца бяспечным, мы будзем апрацоўваць файл загрузіць сябе. WordPress мае зручную убудаваную функцыю, каб зрабіць гэта: wp_handle_upload ().
$ FILEINFO = wp_check_filetype (базавую ($ _ FILES [ 'wpshop_file'] [ 'імя'])); калі (пуста ($ FILEINFO [ 'тыпу'])) {$ uploadInfo = wp_handle_upload ($ _ FILES [ 'wpshop_file'], масіў ( 'test_form' => ілжыва, 'мімы' => $ allowedMimes,)); }
wp_handle_upload () прымае спасылку на адзін элемент з $ _FILES супер-глабальных і вяртае масіў, які змяшчае URL, поўны шлях і тып пантамімы загрузкі.
Праверце ўтрыманне загрузкі для дадатковай бяспекі
Пры атрыманні загрузкі, вы можаце пазбегнуць атакуючым з загрузкай выкананага PHP або іншы код, вывучыўшы вашы дадання кантэнту. Напрыклад, калі вы прымаеце загрузку малюнкаў, выклічце PHP getimagesize () функцыя на загружаны файл, каб вызначыць, ці з'яўляецца сапраўдным малюнкам.
getimagesize () спрабуе прачытаць інфармацыю загалоўка малюнка і пацерпіць няўдачу на недапушчальны вобраз. Гэта яшчэ адзін спосаб праверкі зместу вы чакаеце ад карыстальніка.
калі wp_die (__ ( 'недапушчальны вобраз падаваўся.)) (@getimagesize ($ _ FILES [' wpshop_file '] [' tmp_name '])!);
Remote File Upload Vulnerability
Ўразлівасць аддаленай загрузкі файла, калі прыкладанне не прымае загрузку непасрэдна ад наведвальнікаў сайта. Замест гэтага, наведвальнік можа даць URL у Інтэрнэце, што прыкладанне будзе выкарыстоўваць для здабывання файла. Гэты файл будзе захаваны на дыск у агульнадаступным каталогу. Зламыснік можа затым доступ да гэтага файлу, выканаць яго і атрымаць доступ да сайта.
TimThumb ўразлівасць, якая ўплывае вельмі вялікая колькасць убудоў і тым была ўразлівасць выдаленага загрузкі файлаў. У выпадку TimThumb, бібліятэка малюнкаў прадастаўляецца распрацоўнікам спосаб паказаць спасылку на малюнак у радку запыту, так што TimThumb.php затым прынесці гэты малюнак з Інтэрнэту.
URL выявы можна маніпуляваць такім чынам, што зламыснік можа паказаць PHP файл, які быў размешчаны на Тыя, хто нападаў ўласным сайце. TimThumb затым атрымаць гэтую PHP файл і захаваць яго на сайце ахвяры ў дырэкторыі, даступнай з Інтэрнэту. Атакуючы затым проста атрымаць доступ да гэтага PHP файл у браўзэры і быць у стане выканаць.
Як пазбегнуць уразлівасці загружаць аддалены файл
Як пазбегнуць такога роду уразлівасці аналагічны пазбегнуць уразлівасці лакальнага загрузкі файлаў:
- дазволіць толькі пэўныя пашырэння файлаў.
- Толькі для аўтарызаваных і аўтарызаваныя карыстальнікі могуць выкарыстоўваць гэтую функцыю.
- Праверце любы файл здабываецца з Інтэрнэту для кантэнту. Пераканайцеся, што на самой справе малюнак або любы іншы тып файла, які вы чакаеце.
- Падаваць непраўдападобныя файлы з вашага прыкладання, а не непасрэдна праз вэб-сервер.
- Захоўванне файлы ў непублічнай даступнай дырэкторыі, калі вы можаце.
- Запісаць у файл пры захаванні яго ўключаць у сябе загаловак, які робіць яго ня выконвае.
выснову
Як вы можаце бачыць з відэа дэманстрацыі і вышэй ўтрымання, загрузкі файлаў уразлівасці сур'ёзныя. Яны таксама лёгка пазбегнуць калі распрацоўшчык можа распазнаць іх і існуе некалькі эфектыўных метадаў, даступных для прадухілення такога роду уразлівасці, якая закранае прыкладанне WordPress.