Mozilla 缓存文件是否应该包含 PHP eval 语句?

Mozilla 缓存文件是否应该包含 PHP eval 语句?

我担心我的网络受到破坏,并开始在我的系统中查找常见的 PHP 和 Perl 函数。

我在访问我的 LAN 和互联网时运行的home/user/.cache/mozilla/firefox/xxxxxx.default-release/cache2/entriesWireshark 文件中都发现了 eval 语句。pcapng

cache 和 pcapng 文件包含 eval 语句是否正常?

编辑:这是 grep 输出

$sudo grep -Rn "eval *(" /home

grep: warning: /home/admin-user/.local/share/webkitgtk/databases/indexeddb/v0: recursive directory loop
grep: /home/admin-user/.mozilla/firefox/r5ltgfpz.default-release/lock: No such file or directory
Binary file /home/depreciated-user/.cache/mozilla/firefox/3agw7l97.default-release/cache2/entries/587E705F8250A3BAD1725FFDC0308BE13FC9C249 matches
Binary file /home/depreciated-user/.cache/mozilla/firefox/3agw7l97.default-release/cache2/entries/56C137F3ED4BD95ED5365B85D979D27E45A3C06B matches
/home/depreciated-user/.cache/mozilla/firefox/3agw7l97.default-release/cache2/entries/0C9E9204B87889165E9EF9B84C7C50ADCB85DEF4:5103:function Kjj(a,b){a.b=eval(b);a.a=a.b.length;a.e.e=Ckh(eYi,VHj,1,0,3,1);Ajj(a,Pjj(a));zjj(a,Pjj(a));if(a.k!=7){throw new qhj('Expecting version 7 from server, got '+a.k+'.')}if(((a.j|3)^3)!=0){throw new qhj('Got an unknown flag from server: '+a.j)}a.d=a.b[--a.a]}

Binary file /home/depreciated-user/.cache/mozilla/firefox/3agw7l97.default-release/cache2/entries/C0C1113F6EE7EC8F9FF4A8CEB4705760115AB1D8 matches
Binary file /home/depreciated-user/.cache/mozilla/firefox/3agw7l97.default-release/cache2/entries/FD1D3EF0DAB5FB5F5AEB46B86EEE1CA545CA5AE7 matches
Binary file /home/depreciated-user/.cache/mozilla/firefox/3agw7l97.default-release/cache2/entries/CDB782750F3F83552C72C19162902F70F96C1630 matches
Binary file /home/depreciated-user/.cache/mozilla/firefox/3agw7l97.default-release/cache2/entries/365B418963D1670AC92B9E2EA38B97E1B6AE87BB matches
Binary file /home/depreciated-user/.cache/mozilla/firefox/3agw7l97.default-release/cache2/entries/8E7F89CB9F59D6708DE57A98C6797AACF9514AA3 matches
Binary file /home/depreciated-user/.cache/mozilla/firefox/3agw7l97.default-release/cache2/entries/947BAE73C678232D86FC86AD72CF19B5FD27DFBC matches
Binary file /home/depreciated-user/.cache/mozilla/firefox/3agw7l97.default-release/cache2/entries/FC62728FEED8B45EE4FC3565B5F4CD117DBEF695 matches
Binary file /home/depreciated-user/.cache/mozilla/firefox/3agw7l97.default-release/cache2/entries/2483BD620420574E867403E19203A4FDD311A014 matches
Binary file /home/depreciated-user/.cache/mozilla/firefox/3agw7l97.default-release/cache2/entries/DB29AC2E40BE65FF0ECDB50A304727F1C40F037D matches
Binary file /home/depreciated-user/.cache/mozilla/firefox/3agw7l97.default-release/cache2/entries/75DFE1E5FD6A4F82B4C84951482B6BB0DDFAE633 matches
Binary file /home/depreciated-user/.cache/mozilla/firefox/3agw7l97.default-release/cache2/entries/46759B453E394486BB835EF50C93ECE894CD8839 matches
Binary file /home/depreciated-user/.cache/mozilla/firefox/3agw7l97.default-release/cache2/entries/379C840BF0F9586EB8A994393667A9E3DD27E7EA matches
Binary file /home/depreciated-user/.cache/mozilla/firefox/3agw7l97.default-release/cache2/entries/7B15FC961E85FA18FC7DB39B8356FD3D6847EBE6 matches
Binary file /home/depreciated-user/.cache/mozilla/firefox/3agw7l97.default-release/cache2/entries/A946D1D076B90EBB0D84636A225E961B2CEC9175 matches
Binary file /home/depreciated-user/.cache/mozilla/firefox/3agw7l97.default-release/cache2/entries/63F7CA4B34EE77F607DF43332730EC89926E0E60 matches

grep: /home/depreciated-user/.mozilla/firefox/3agw7l97.default-release/lock: No such file or directory

我不是程序员,但在我看来,这确实像是混淆的代码。仅供参考:该系统刚刚安装,安装后访问的唯一网站是银行和技术论坛。

答案1

新答案

您在评论中说,您实际上并不知道这是否是 PHP eval()。事实上,PHP 并不是唯一具有 eval() 的语言 - JavaScript 也具有 eval() 函数。

虽然浏览器缓存中存在 PHP 代码有点不寻常,但浏览器缓存中存在 JavaScript 代码则完全正常,是的,它甚至包括调用 eval() 的代码。

(例如,网站可以使用 JavaScript 通过接收 JSON 中的更新来动态刷新某些数据(例如“已安装的软件包”表)。虽然现代 JavaScript 具有专用的 JSON 解析函数,但很长一段时间以来它并没有 - 相反,要解析 JSON 字符串,您需要对其进行 eval()。)

这并不意味着代码是由计算机上的某个进程生成的。它已收到但所有网站都是这样运作的,这也是浏览器缓存的目的。

我不是一名程序员,但在我看来,这确实像是混淆的代码

如果一个网站使用混淆代码,那真的他们的商业。

但如今,许多网站使用名为压缩器,其目的只是尽可能地压缩 JavaScript 代码(例如,将所有变量缩短为 1 或 2 个字母),以便访问者可以更快地下载,同时实现混淆。您几乎可以在访问的每个大型网站上看到这一点。

(一些混淆器和压缩器确实使用 eval() 来重建原始代码的部分。)

原始答案

如果您打开的网页确实包含未处理的 PHP 语句,那么它当然会出现在网络上和您看到的页面中,因此也会出现在缓存中。

例如,如果我在答案表中输入以下内容:

<?php eval("echo 'Hello!';") ?>

现在,superuser.com 的缓存中有一个 PHP eval 语句。

但是,您的浏览器不会处理 PHP 语句;它要么将它们视为常规文本,要么视为奇怪的非标准 XML 处理指令。如果它们需要被解释,那么这应该发生在服务器上——您不应该收到它们。

真正的问题是网站您访问的页面中应该有该语句。它很可能是被恶意添加的,可能被添加到完全错误的文件中,或者可能只是该页面中的普通文本。

例如,如果攻击者将 PHP 脚本上传到网站,不使用 PHP,那么它将不会被解释——您将获得文本形式的源代码。(一些攻击涉及将 PHP 代码放入 GIF 或 JPEG 注释字段中,将其作为 .gif 上传并诱骗服务器将其解释为 PHP。)

但再举一个例子,如果网站多年未维护,并使用传统的<?短开放标签,现代 PHP 将不再查看这些标签,您将在浏览器中看到原始的 PHP 语句。这不是恶意的,只是网站与网络服务器不兼容的标志。

回答评论

甚至只是启动我的专用机器来运行 OPNsense,所有五个都试图将数据发送到一系列 IP 地址,其中包括我从未访问过的网站(我对大多数违规者进行了 whois 和反向 IP 查询)、国防部、陆军、NASA、GROOT、BROOT、RIPE 协调、APNIC、Amazon dogfish 路由等等。这些 IP 永远不会出现在工作站 fw 日志中,只会出现在 OPN 上。

当把所有这些放在一起时,听起来就完全正常了。

您的 OPNsense 系统正在运行 Unbound 作为 DNS 解析器。它不仅将请求转发到另一台服务器,还充当满的解析器(就像 ISP 运行的解析器)本身会从根目录追踪到 TLD 和实际域的 DNS 委派。

首先,这意味着每个 DNS 请求(由您的工作站或 OPNsense 内部进程发出)都将导致多个 DNS 查询,因为解析器并不知道在哪里提出最终问题,它必须通过遵循委派来找出答案。

这个过程总是始于DNS 根,并且您列表中的许多组织只是托管根区域的名称服务器实例——DNS 解析器在启动时探测它们是正常的。是的,国防部确实托管了一个,美国陆军也是如此,RIPE 和 NASA 也是如此。(例如,“GROOT”是“G”名称服务器的专用地址范围。)您可以在以下位置查看完整列表http://root-servers.org

同样的情况也适用于 TLD 的名称服务器,然后适用于实际解析的域的名称服务器。通常,甚至域的名称服务器似乎也与域无关。例如,亚马逊(以 AWS 云计算而闻名)提供了许多网站使用的“Route53”DNS 托管服务。

因此,每当 OPNsense 启动并联系opnsense.org以检查可用更新时,DNS 解析器都必须联系该域的权威 DNS 服务器(例如ns3.openprovider.eu)——这些服务器确实托管在亚马逊上。(我不确定 openprovider 使用的是 Route53 还是 Cloudfront 或 EC2,但最终它们都是相同的 AWS。)

仅查看 IP 地址是远远不够的:您必须查看发送到这些地址的实际流量(或接收的流量)。作为最低限度,还要查看协议和端口 – 我相当确定这些是发送到目标端口 53 的 UDP 数据包,即 DNS 查询。

相关内容