Показать сообщение отдельно

загрузка произвольных файлов через архив.
  #1  
Старый 22.12.2009, 11:18
(Dm)
Reservists Of Antichat - Level 6
Регистрация: 08.04.2008
Сообщений: 286
С нами: 9521666

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

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

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

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

Администратор может загружать и распаковывать архивы в разделе загрузки:
PHP код:
$zip=new PclZip($dir_loads.'/'.$file);
$zip->extract(PCLZIP_OPT_PATH$path_unzipPCLZIP_OPT_SET_CHMOD0777PCLZIP_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
__________________
Cервер cs 1.6
cs.antichat.net:27015

Последний раз редактировалось (Dm); 22.12.2009 в 22:19..
 
Ответить с цитированием