我决定在我看到攻击的几个基于PHP的网站上安装ZB Block。所有网站都在Ubuntu 14.04 LTS / Apache 2.4 / PHP 5.5.9上运行
需要在每个.php文件的开头插入ZB Block脚本调用。为了在多个网站上的所有.php文件中自动替换字符串,我做了一个sed语句来在第一次出现时执行替换。
sed '#s:<?php:<?php require('/var/www/html-mydomain.tld/zbblock/zbblock.php'); ?><?php#’ First-Occurence-Replacement-Sample.php > First-Occurence-Replacement-Sample.tmp && mv First-Occurence-Replacement-Sample.tmp First-Occurence-Replacement-Sample-NEW.php
运行sed语句给出了以下结果:
1文件名为First-Occurence-Replacement-Sample-NEW.php,GOOD
2未进行所需的字符串替换。 BAD
# ls -l
-rw-r--r-- 1 root root 39 Feb 17 15:40 First-Occurence-Replacement-Sample-NEW.php
-rw-r--r-- 1 root root 39 Feb 17 15:13 First-Occurence-Replacement-Sample.php
# nano First-Occurence-Replacement-Sample-NEW.php
Line 1 <?php <<< string wasn’t replaced as desired.
Line 2 /***************************************************************************
Line 3 <?php <<< This second occurrence should never be replaced
Line 4 ?> ?>
所需的sed语句行为
字符串替换前的示例文件
Line 1 <?php
Line 2 /***************************************************************************
Line 3 <?php
Line 4 ?>
替换字符串后的示例文件
Line 1 <?php require('/var/www/html-mydomain.tld/zbblock/zbblock.php'); ?><?php
Line 2 /***************************************************************************
Line 3 <?php <<< This second occurrence should never be replaced
Line 4 ?> ?>
如何更改sed语句以实现所需的替换?
我可以获得帮助让这个sed语句正常工作后我想把它放在一个脚本中,在整个.php文件的目录上运行替换,如下所示:
创建脚本文件: #nano zbblock-string-insertion.bash
#! /bin/bash
for f in *.php
do
echo "Converting $f"
sed '#s:<?php:<?php require('/var/www/html-mydomain.tld/zbblock/zbblock.php'); ?><?php#’ $f > $f.tmp && mv $f.tmp $f
done
保存文件zbblock-string-insertion.bash,使其可执行,然后运行它!
Kenavoz, 它有效,谢谢!你的天才!不要让你的姻亲告诉你任何不同。
要递归目录,请将Kenavox提供的命令行修改为:
find -name '*.php' -type f -exec sed -I.........
现在。该命令执行递归替换。
答案 0 :(得分:0)
希望这可以提供帮助:
find . -name *.php -type f -exec sed -i "1 s~<?php~<?php require('/var/www/html-mydomain.tld/zbblock/zbblock.php'); ?>&~" {} \;
它找到当前目录中或之下的所有php文件,并将sed命令应用于每个。
sed命令将php require命令添加到文件第一行中的第一个匹配项。