PDA

Просмотр полной версии : загрузка произвольных файлов через архив.


(Dm)
22.12.2009, 11:18
Снова небольшой очерк.
Пару раз сталкивался с веб приложениями в которых можно было загрузив архив, распаковать его. Но дело в том, что если нет проверки на '../'(опуститься на каталог выше), то файлы можно распаковать в произвольные каталоги на сервере.

например архив:
Archive: test.zip
Length Date Time Name
--------- ---------- ----- ----
15 2009-12-22 09:57 ../test.php
Распакуется на каталог выше.

Рассмотрим веб приложение DCMS
там используется PclZip класс для работы с zip архивами.

Администратор может загружать и распаковывать архивы в разделе загрузки:
$zip=new PclZip($dir_loads.'/'.$file);
$zip->extract(PCLZIP_OPT_PATH, $path_unzip, PCLZIP_OPT_SET_CHMOD, 0777, PCLZIP_OPT_BY_PREG, "#^[^\.]+#ui");
Как видно "#^[^\.]+#ui" вот эта регулярка защищает от '../' в начале имени файла =) Чтобы обойти фильтр в начале надо указать существующий каталог, что-то типа такого:
Archive: test.zip
Length Date Time Name
--------- ---------- ----- ----
15 2009-12-22 09:57 test/../../test.php
При распаковке этого архива, файл test.php, будет записан не в том месте где предполагалось, а на каталог выше.

Вот ещё аналогичный баг http://vuln.sg/net2ftp096-en.html

[Raz0r]
22.12.2009, 19:11
http://www.sektioneins.de/advisories/SE-2008-06.txt

(Dm)
22.12.2009, 22:26
'../' - это каталог выше! (:
оке исправил =)

PS бесит что всякая школота орет что баян, мега хакиры xD

По поводу баянов и прочей ху*ни.
да это баян я в курсе, еслиб он им не был, его в паблике не постил бы.