Dos Batch Script - Рекурсивно заменяет экземпляр файла на мастер-файл (предотвращение эксплойтов Timthumb) - PullRequest
2 голосов
/ 24 августа 2011

Я нашел несколько действительно хороших примеров, но не совсем то, что мне нужно.Моя цель - создать пакетный сценарий, который я могу запускать ночью, чтобы заменить все экземпляры файла (в моем случае timthumb.php) новой копией файла, расположенного в корне диска.

Вотчто у меня есть до сих пор ...

for /f %%a IN ('dir /b C:\thumb_test') do copy /y C:\thumb_test\timthumb.php %%a

Это настолько близко, насколько я понял, он заменит экземпляры timthumb.php в таких папках, как C: \ thumb_test \ test1 \ timthumb.php,но не буду углубляться в каталоги.Например, C: \ thumb_test \ test2 \ level2 \ timthumb.php не был заменен.Кроме того, после замены файлов похоже, что он пытается прочитать фактический файл ththumb.php и выводит кучу ошибок, например ...

C:\thumb_test>by Tim McDaniels and Darren Hoyt
'by' is not recognized as an internal or external command,
operable program or batch file.

Я нашел / R для рекурсивного, но когда я пытаюсьСледующее это тоже не работает.

for /f %%a IN ('dir /b C:\thumb_test') do copy /y C:\thumb_test\timthumb.php %%a

Это дает мне результат: C: \ thumb_test> test.bat% a был неожиданным в это время.

C:\thumb_test>for /r /f %a IN ('dir /b C:\thumb_test') do copy /y C:\thumb_test\
timthumb.php %a

Моя DOSзнания ограничены, поэтому я надеюсь, что у одного из экспертов есть идея.

Спасибо -Sam

PS для всех, кто использует timthumb, вы должны взглянуть на http://markmaunder.com/2011/08/01/zero-day-vulnerability-in-many-wordpress-themes/ и убедитесь, что ваш сайт защищен.

1 Ответ

3 голосов
/ 24 августа 2011
for /R c:\thumb_test %%a in (timthumb.php) do if exist "%%a" copy /y c:\thumb_test\timthumb.php "%%a"

или, используя более надежную робокопию вместо копии:

for /R c:\thumb_test %%a in (.) do robocopy /xl c:\thumb_test "%%a" timthumb.php
...