一个典型的蠕虫病毒有两个功能型部件:传播和破坏,流行的蠕虫病毒大都是利用操作系统或者应用程序的漏洞(以弱口令和溢出最为常见),但常常并不会对宿主机造成“致命”的破坏。这两个特点使蠕虫病毒比普通电脑病毒传播得更快,影响力更大。一般来说,单一的蠕虫病毒只针对某种特定的漏洞进行攻击,所以一旦这种漏洞得到大范围修补,病毒也就没有了生存空间。
b>OB}Is *k62Qz3 更新这种设计,我把传播部件拆分开来:把扫描、攻击和破坏脚本化,主程序则负责解析这些脚本。例如针对ftp弱口令进行扫描,我们可以定义如下脚本:
!6%?VJB|b LSou]{R 6/mz.,g2 code:
,<t.Iz% uid = iscript-0a21-2331-x #随机唯一编号
fq6Obh=A# using tcp;
KtL?,zi port 21;
E6TeZ%g send “user anonymous”;
5 ix*wu`, send crlf;
!q\=e@j-i send “pass
fake@nothing.com”
hbH~Ya=+S send crlf;
*v+l,z4n if (find “200”) result ok;
oxlor,lw/ next;
IDH~nMz 4@@Sh`E: r6Yd"~ n ,r w4Lo 解析了这段脚本后(我想这种脚本是很容易读懂的),我们再定义一系列的过程,把我们的蠕虫体upload上去,一次完整的传播动作就完成了。如果是溢出漏洞,为了简单起见我们可以采集远程溢出的数据包,然后修改ip地址等必要数据,再转发溢出数据包进行溢出(这种情况下要实现connect-back就不容易了,不过这些具体问题就待有心人去研究吧),例如:
6+IhI?lI= )bOfs*S z/1$G" code:
5lG\Z? using raw;
'Z4}O_5_ ip offset at 12;
G|rE\h 2w send “\x1a\xb2\xcc” ……
:@[\(: E{u6<