匹配随机文件名字符串的正则表达式

匹配随机文件名字符串的正则表达式

我的共享主机上有一个用户,他的 Wordpress 安装成为了漏洞的受害者,该漏洞允许以 apache 用户创建任意文件。生成的文件显然是使用随机生成器生成的,但属于某种模式。我也在考虑只匹配该组,但这种性质的发现击中了太多合法文件。如何匹配所有这些示例恶意文件?

8twcoasx.php
hjoeksdp.php
nzpsmujc.php
oiczdqkp.php
wpebruwi.php
wuclgsvz.php
tie9txh5.php
vza6pn12.php
nwfthzli.php
1wovcnq6.php
1fwevaol.php
zscy86d8.php
ikz45skj.php
n70x0aul.php
nwk34bs0.php
ugdnncmz.php
wdcq2zzi.php
8f4w3dmt1z.php
uqv4e2cm2a.php
55zf4u1dp7.php
szfc8v129e.php
oihfoe09fposf.php (occured more often)
Jwlsjd_baaqifg.php (occured more often)

显然,我将与用户合作更新他们的 Wordpress 安装和插件,但我希望有一个正则表达式,我可以将其放入查找中并快速验证问题是否仍然存在,等等。

我可以看到的模式:

  1. 始终为 8、10 或 13 个字符。
  2. 始终为 *.php

答案1

您必须首先确定“模式”恰好是(创建正则表达式)。我看不到任何很清楚的东西。它始终以 结尾.php,前面有 8、10 或 13 个字符,这些字符是大写或小写字母、数字或_。除此之外,还不清楚,例如并不总是有一个数字。如果您要匹配这个一般“模式”,例如^[a-zA-Z0-9_]{8}\.php$也使用 和 来匹配 10 或 13 个字符,那么您可能会得到许多误报。

相反,新文件是否使用当前修改日期创建?如果是这样,您可以搜索在新配置之后修改的较新的可疑文件。

find /path/to/directory -newer /path/to/new_config -regextype egrep -regex '.*/([a-zA-Z0-9_]{8}|[a-zA-Z0-9_]{10}|([a-zA-Z0-9_]{13})\.php'

需要注意的是,可以使用 来更改修改日期touch。如果您的恶意软件这样做,则可能会根据访问时间-anewer、状态更改时间-cnewer或进行过滤-newerXY

如果所有文件都属于特定用户,您还可以使用该信息进行过滤。即添加选项-user apache

答案2

这是 PHP 恶意软件,我以前见过这个。您应该通过以下方式观看视频本·德克莱 (Ben Dechrai) 致电“编写病毒是为了乐趣,而不是为了利润”如果您对这种特定的攻击感兴趣。

我贡献的关键在于这一点。它不是寻找文件名的 md5(这是一种完全有效的方法),而是使用类似这样的内容生成(虽然不准确,因为这个总是 $length = 10)

function generateRandomString($length = 10) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyz';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0;$i < $length;$i++) {
        $randomString.= $characters[rand(0, $charactersLength - 1) ];
    }
    return $randomString . ".php";
}

您应该使用以下命令查找早于特定日期的所有文件

`base64_decode

或者 eval(base64_decode(

这并不能确定哪些字符匹配,哪些不匹配,但根据我的经验,它可能更接近正确。

我会。

  1. 把服务器拿下来。
  2. 备份。
  3. 在新目录中安装并行版本的 Wordpress(全新)
  4. 检查是否有误报eval(base64_decode(
  5. 隔离与该字符串匹配的所有文件。
  6. 查看是否还有其他文件与上面的正则表达式匹配。
  7. 备份隔离的文件。
  8. 清理与上述字符串匹配的隔离文件。
  9. 寻找可防止此漏洞的 Wordpress 补丁,或升级到新版本的 Wordpress。

答案3

i have used below command to achieve

find . -type f -user "user" username | sed -n '/[a-zA-Z0-9_]\{8,\}.php$/p'

It will display all the files whose len is greater than 8

相关内容