这些用户代理试图使用什么漏洞?

信息安全 开发 网络服务器 网络 nginx
2021-08-31 13:23:22

我刚刚查看了我网站上的用户代理跟踪页面(存档在Yandex上),我注意到了这些用户代理。我相信他们是企图利用我的服务器(带有 PHP 的 Nginx)。它前面的 1 就是用户代理在 Nginx 日志中出现的次数。这些也是缩短的用户代理,而不是像Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36. 我不再有权访问日志,因为我认为这发生在 1 月或 2 月的某个时间(我最早的日志是在 3 月,而我在 1 月创建了该站点)。

1 Mozilla/5.9}print(238947899389478923-34567343546345);{
1 Mozilla/5.9{${print(238947899389478923-34567343546345)}}
1 Mozilla/5.9\x22{${print(238947899389478923-34567343546345)}}\x22
1 Mozilla/5.9\x22];print(238947899389478923-34567343546345);//
1 Mozilla/5.9\x22

尝试了哪些漏洞利用以及如何测试以确保这些漏洞利用不可用?

4个回答

它似乎试图利用某种形式的命令注入。正如 DarkMatter 在他的回答中提到的那样,这可能是寻找任何易受攻击的服务器的广泛尝试,而不是专门针对您。有效负载本身似乎只是在测试服务器是否容易受到命令注入的影响。它似乎没有任何额外的目的。

为了测试您是否会受到这些特定负载的影响,最简单的方法是将它们发送到您自己的服务器,并查看它们如何响应。请注意,我这么说只是因为有效载荷本身是良性的;我不建议对所有有效负载都这样做。

我敢打赌,您的服务器不会受到攻击,因为我本来希望看到后续请求来实际利用您的服务器。

这可能没什么。这似乎是扫描仪的广泛垃圾邮件,它在网络上查找任何评估并在不应该时返回该减法的网站。这是很常见的事情。

使用实际函数名称(例如print)表明他们正在寻找以eval某种方式使用的网站(请注意,这可能是 PHP eval(string $code)、 JavaScripteval(string)和其他脚本语言的等价物)。

我注意到可执行代码紧跟在第一个version参数 after 之后出现Mozilla/这意味着这次攻击的作者认为,野外有足够多的网站实际上是在使用eval一种(可怕的)方式来解析一个由两部分组成的 ( major.minor) 版本号。

所以我想象易受攻击的网站正在做这样的事情(伪代码):

var userAgent = request.headers["User-Agent"];

var indexOfVersion = userAgent.indexof( '/' );
var indexOfVersionEnd = userAgent.indexof( indexOfVersion , ' ' );

var versionText = userAgent.substring( indexOfVersion + 1, indexOfVersionEnd );
var versionNumber = eval( versionText ); // <------- this is the vulnerability!

看起来他们正试图将 PHP 代码注入日志文件。这个想法是,如果系统管理员使用 PHP 应用程序来解析日志,一些人可能会认为日志文件是受信任的(毕竟,用户通常不会直接更改日志文件),因此放弃任何清理过程。

如果您通过桌面或 CLI 文本编辑器查看日志文件,您将永远不会受到这种攻击。如果您使用 PHP 应用程序,请确保它将日志视为不受信任并像处理普通用户输入字段一样对其进行清理。