【发布时间】:2015-08-17 01:50:14
【问题描述】:
我会尽量解释为什么我需要帮助。我的一个文件目录通过 XSS 被黑客入侵,并在所有 php 文件的开头放置了一个长字符串。我尝试使用 sed 将字符串替换为空,但它不起作用,因为要匹配的模式包含许多需要转义的字符。
我发现我可以使用fgrep 匹配保存在模式文件中的固定字符串,但我想替换每个文件中匹配的字符串(NOT THE LINE),但是grep 的-v 会反转行上的结果,而不是匹配字符串的结尾。
这是我在包含被黑的示例文件上使用的命令
fgrep -v -f ~/hacked-string.txt example.php
我需要输出包含位于行尾的<?php(有时是<style> 标记),但-v 选项会在该行的末尾反转,因此输出不会在开头包含<?php。
注意
我尝试使用 -o 或 --only-matching 来代替,它们什么都不输出:
fgrep -f ~/hacked-string.txt example.php --only-matching -v
grep 中是否有另一个选项可以用来反转匹配模式的末尾,而不是匹配模式的行?或者,是否有更简单的选项来替换所有 .php 文件中的被黑字符串?
这是hacked-string.txt 中内容的一个小sn-p(为便于阅读添加了换行符):
]55Ld]55#*<%x5c%x7825bG9}:}.}-}!#*<%x55c%x7825)
dfyfR%x5c%x7827tfs%x5c%x7c%x785c%x5c%x7825j:^<!
%x5c%x7825w%x5c%x7860%x5c%x785c^>Ew:25tww**WYsb
oepn)%x5c%x7825bss-%x5c%x7825r%x5c%x7878B%x5c%x
7825h>#]y3860msvd},;uqpuft%x5c%x7860msvd}+;!>!}
%x5c%x7827;!%x5c%x7825V%x5c%x7827{ftmfV%x5e56+9
9386c6f+9f5d816:+946:ce44#)zbssb!>!ssbnpe_GMFT%
x5c5c%x782f#00#W~!%x5c%x7825t2w)##Qtjw)#]82#-#!
#-%x5c%x7825tmw)%x5c%x78w6*%x5c%x787f_*#fubfsdX
k5%x5c%xf2!>!bssbz)%x5c%x7824]25%x5c%x7824-8257
-K)fujs%x5c%x7878X6<#o]o]Y%x5c%x78257;utpI#7>-1
-bubE{h%x5c%x7825)sutcvt)!gj!|!*bubEpqsut>j%x5c
%x7825!*72!%x5c%x7827!hmg%x5c%x78225>2q%x5c%x7
提前致谢!
【问题讨论】:
-
垃圾字符串中是否有换行符?
-
如果到处都是相同的字符串,则按长度或两端的几个字符或两者的组合进行匹配。
sed 's/^#@%\(.\{666\}\):|;或类似的东西。 -
从被黑中恢复的唯一明智的方法是从已知良好的备份或版本控制中恢复。
标签: regex string bash sed grep