The*_*der 14 linux security perl spam
有一些垃圾邮件问题,我的服务器上,并找出和消除一些Perl和PHP脚本,我到检查他们真正做之后,虽然我是一个高级PHP程序员我有Perl的一点经验,任何人都可以给我一个手写脚本在这里:
(这是一长串代码,脚本叫做list.pl)
脚本的开头是:
$??s:;s:s;;$?::s;(.*); ]="&\%[=.*.,-))'-,-#-*.).<.'.+-<-~-#,~-.-,.+,~-{-,.<'`.{'`'<-<--):)++,+#,-.{).+,,~+{+,,<)..})<.{.)-,.+.,.)-#):)++,+#,-.{).+,,~+{+,,<)..})<*{.}'`'<-<--):)++,+#,-.{).+:,+,+,',~+*+~+~+{+<+,)..})<'`'<.{'`'<'<-}.<)'+'.:*}.*.'-|-<.+):)~*{)~)|)++,+#,-.{).+:,+,+,',~+*+~+~+{+<+,)..})
Run Code Online (Sandbox Code Playgroud)
它继续使用珍贵的少数非标点字符,直到最后:
0-9\;\\_rs}&a-h;;s;(.*);$_;see;
Run Code Online (Sandbox Code Playgroud)
TLP*_*TLP 17
对于那些对细节感兴趣的人......第一部分,当去纠结时看起来像这样:
$? ? s/;s/s;;$?/ :
s/(.*)/...lots of punctuation.../;
Run Code Online (Sandbox Code Playgroud)
该$?行的开头是包含子错误的预定义变量,毫无疑问它仅用作混淆.它将是未定义的,因为此时可能没有子错误.
跟随它的问号是三元运算符的开始
CONDITION ? IF_TRUE : IF_FALSE
Run Code Online (Sandbox Code Playgroud)
这也简单地添加到混淆.返回true的表达式是替换正则表达式,其中/斜杠分隔符已替换为冒号s:pattern:replacement:.在上面,我已经放回斜线.另一个表达式,即将要执行的表达式也是替换正则表达式,尽管是一个非常长的表达式.分隔符是分号.
这种替换取代.*了$_- 默认输入和模式搜索空间 - 带有相当大量的标点符号,代表了大部分代码.因为.*匹配任何字符串,甚至是空字符串,它只会被插入$_,并且与所有意图和目的相同,只是简单地将字符串分配给$_,这就是我所做的:
$_ = q;]="&\%[=.*.,-))'-,-# .......;;
Run Code Online (Sandbox Code Playgroud)
以下行是音译和另一种替换.(我插入注释以指出分隔符)
y; -"[%-.:<-@]-`{-}#~\$\\;{\$()*.0-9\;\\_rs}&a-h;;
#^ ^ ^ ^
#1 2 3
Run Code Online (Sandbox Code Playgroud)
(1,2,3是分隔符,2到3之间的分号被转义)
它的基本要点是各种字符和范围-"(空间到双引号),以及看起来像字符类(带范围)的东西[%-.:<-@],但不是,被音译成更易读的字符,例如花括号,美元符号,括号,0-9等
s;(.*);$_;see;
Run Code Online (Sandbox Code Playgroud)
下一个替代是魔术发生的地方.它也是混淆分隔符的替代品,但有三个修饰符:see.s在这种情况下什么都不做,因为它只允许通配符.匹配换行符.ee但是,表示两次评估表达式.
为了看看我在评估什么,我进行了音译并打印了结果.我怀疑我的某个地方有一些字符被破坏,因为有一些细微的错误,但这里是简短的(清理过的)版本:
s;(.*);73756220656e6372797074696f6e5f6 .....;; # very long line of alphanumerics
s;(..);chr(hex($1));eg;
s;(.*);$_;see;
s;(.*);704b652318371910023c761a3618265 .....;; # another long line
s;(..);chr(hex($1));eg;
&e_echr(\$_);
s;(.*);$_;see;
Run Code Online (Sandbox Code Playgroud)
长正则表达式再一次是数据容器,并将数据插入$_以作为代码进行评估.
在s/(..)/chr(hex($1))/eg;开始看起来相当清晰.它基本上是从当前读取两个字符$_并将其从十六进制转换为相应的字符.
接下来的最后一行&e_echr(\$_);让我困扰了一段时间,但它是一个子程序,在这个评估代码的某处定义,因为hobbs如此恰当地能够解码.美元符号以反斜杠为前缀,这意味着它是对以下内容的引用$_:即子例程可以更改全局变量.
经过相当多的评估后,$_运行这个子程序,然后在$_最后一次评估包含的内容.大概这次执行代码.正如hobbs所说,需要一个密钥,它取自%ENV脚本运行的机器的环境.我们没有.
| 归档时间: |
|
| 查看次数: |
2568 次 |
| 最近记录: |