我担心我的网络遭到破坏,并开始在我的系统中寻找常见的 PHP 和 Perl 函数。
我在访问 LAN 和 Internet 时运行home/user/.cache/mozilla/firefox/xxxxxx.default-release/cache2/entries
的 Wireshark 文件和文件中都找到了 eval 语句。pcapng
缓存和 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
我不是程序员,但对我来说它确实看起来像是混淆代码。仅供参考:这个系统刚刚安装,安装后访问的唯一网站是银行和技术论坛。
新答案
您在评论中说您实际上首先不知道这是否是 PHP eval()。问题是,PHP 不是唯一具有 eval() 的语言 - JavaScript 也有 eval() 函数。
现在,虽然在浏览器缓存中有 PHP 代码有点不寻常,但在浏览器缓存中有 JavaScript 代码是完全正常的,是的,甚至包括调用 eval() 的代码。
(例如,一个网站可以使用 JavaScript 通过接收 JSON 格式的更新来动态刷新一些数据(例如“已安装的包”表)。虽然现代 JavaScript 有一个专门的 JSON 解析功能,但很长一段时间它都没有——相反,要解析 JSON 字符串,您将 eval() 它。)
这并不意味着代码是由您计算机上的进程生成的。它是由浏览器接收的,但这就是所有网站的工作方式,这几乎是浏览器缓存的目的。
如果一个网站使用混淆代码,那真的是他们的事。
但是现在,许多网站使用称为压缩器的混淆器,其目标只是尽可能地压缩 JavaScript 代码(例如,将所有变量缩短为 1 个或 2 个字母),以便访问者可以更快地下载它,混淆为次要效果。您将在您访问的几乎每个较大的网站上看到这一点。
(一些混淆器和压缩器确实使用 eval() 来重构部分原始代码。)
原始答案
如果您打开的网页实际上包含未处理的 PHP 语句,那么是的,它当然会显示在网络上和您看到的页面中,因此也会显示在缓存中。
例如,如果我在答案表单中输入:
现在你的 superuser.com 缓存中有一个 PHP eval 语句。
但是,您的浏览器不处理 PHP 语句;它要么将它们视为常规文本,要么将它们视为奇怪的非标准 XML 处理指令。如果它们应该被解释,那将发生在服务器上——你不应该接收它们。
真正的问题是该网站是否应该在您访问的页面中包含该声明。它很可能是恶意添加的内容,可能已添加到完全错误的文件中,或者可能只是该页面中的普通文本。
例如,如果攻击者将 PHP 脚本上传到不使用 PHP 的站点,那么它将不会被解释——您将获得源代码作为文本。(一些攻击包括将 PHP 代码放在例如 GIF 或 JPEG 注释字段中,将其上传为 .gif 并欺骗服务器将其解释为 PHP。)
但作为另一个例子,如果该网站多年来一直无人维护并使用遗留的
<?
短开放标签,那么现代 PHP 将不再查看这些标签,而您将在浏览器中看到原始 PHP 语句。这不是任何恶意,只是表明该站点与网络服务器不兼容。回复评论
所有这些放在一起听起来完全正常。
您的 OPNsense 系统正在运行 Unbound 作为 DNS 解析器。它不只是将请求转发到另一台服务器——它就像一个完整的解析器(就像 ISP 运行的解析器一样),它自己将 DNS 委托从根向下追到 TLD 和实际域。
首先,这意味着每个 DNS 请求(由您的工作站或 OPNsense 内部进程发出)将导致多个 DNS 查询,因为解析器不会立即知道在哪里提出最后一个问题,它必须通过以下代表团。
这个过程总是从DNS 根开始,您列表中的许多组织只是为根区域托管名称服务器的实例——DNS 解析器在启动时探测它们是正常的。是的,国防部确实拥有一台,美国陆军也是如此,RIPE 和美国宇航局也是如此。(例如,“GROOT”是“G”名称服务器的专用地址范围。)您可以在http://root-servers.org查看完整列表。
这同样适用于 TLD 的名称服务器,然后是正在解析的实际域。通常,即使是域的名称服务器似乎也与域无关。例如,亚马逊(以 AWS 云计算而闻名)提供了许多网站使用的“Route53”DNS 托管服务。
因此,每当 OPNsense 启动并联系
opnsense.org
以检查可用更新时,DNS 解析器必须联系该域的权威 DNS 服务器(例如ns3.openprovider.eu
)——这些服务器确实托管在 Amazon 上。(我不确定 openprovider 使用的是 Route53 还是 Cloudfront 还是 EC2,但最终都是一样的 AWS。)仅查看 IP 地址是远远不够的:您必须查看发送到这些地址(或接收)的实际流量。作为最低限度,还要看看协议和端口——我很确定这些是到 dstport 53 的 UDP 数据包,即 DNS 查询。