Psexec

psexec初心是为了方便服务器管理员管理大量的机器而开发的 cs在横向移动中也集中了这个工具 psexec的使用不需要对方主机开启3389端口,只需要对方开启admin$共享或c$(该共享默认开启,依赖445端口) 但是目标主机开启了防火墙(因为防火墙默认禁止445端口的连接),psexec也不能使用,会提示找不到网络路径 psexec.exe依赖于admin$共享,而impacket下的psexec.py则依赖于admin$或c$共享

基本原理

通过管道在远程目标机器上创建一个psexec服务,并在本地磁盘中生成一个名为”PSEXEVC”的二进制文件,然后,通过psexec服务运行命令,运行结束后删除服务

由于创建或者删除服务时候会产生大量的日志,所以会在攻击溯源时候通过日志反推攻击流程

使用前提

  • 对方主机开启了admin$共享,如果关闭了admin$共享,则会提示:找不到网络名
  • 如果是工作组环境,则必须使用administrator用户连接,使用普通用户连接,则会提示:”登录失败:未授予用户在此计算机上的请求登录类型[即使用户在管理员组内也会拒绝]
  • 如果是域环境,连接普通域主机可以用普通域用户,连接域控需要域管理员

参数

  • -u:指定用户名
  • -p:指定密码
  • -accepteula:第一次运行psexec会弹出确认框,使用该参数就不会弹出确认框了
  • -s:以system权限运行进程,获得一个system权限的交互式shell,如果不使用该参数,会获得一个adminitrator权限的shell

    wireshark

    过滤规则
    1. ip.src==源地址 or ip.dst==目标地址
  1. 先进行TCP三次握手
  2. 协商协议
  3. 进行NTML验证
  4. 尝试连接$IPC
  5. 尝试连接ADMIN$
  6. 尝试写入PSEXESVC.exe
  7. 文件写入后,执行API安装服务
  8. 服务启动后建立一个管道(4)

    ntlm认证,连接共享目录admin$,写入文件psexesvc到共享目录,利用ipc命令管道调用svcctl服务来间接调用psexesvc服务,创建四个命令管道 一个psexesvc管道用于服务本身,另外的管道stdin,stdout,stderr用于重定向进程

工作组

  1. psexec \\目标机器ip -u administrator -p administrator的密码 cmd

域控

定位域控
  1. nslookup

  1. net view /domain
  2. net view /domain:hack
  3. ping \dc

在建立ipc$的情况下

  1. net use \\192.168.3.1 /u:god\administrator Adin12345
  2. net use
  3. PsExec -acceptula \\192.168.3.1 -s cmd.exe

没有建立ipc$

  1. PsExec \\192.168.3.1 -u god\administrator -p Admin12345 cmd.exe

命令回显

  1. Psexec \\192.168.3.1 -u god\administrator -p Admin12345 cmd /c "ipconfig"

wmiexec

在使用wmiexec进行横向移动时候,windows操作系统默认不会将wmi的操作记录在日志中,同时攻击脚本无需写入到磁盘

wmiexec是对windows自带的wmic做了一些强化 wmiexec需要提供账号密码进行远程连接,但是如果没有破解出账号和明文密码,也可以配合哈希传递或者票据注入功能一起使用,先进行传递或注入,然后再使用wmiexec即可

自windows2008开始,windows操作系统都支持WMIC

使用WMIC连接远程主机,需要对方开放135和445端口 135:wmic默认管理端口,wimcexec使用445端口传回显

Impacket中的wmiexec.py

  1. python wmiexec.py 用户名:密码@目标IP
  2. 如果对wmiexec.py指定-hashes的话,则可进行哈希传递
  3. python wmiexec.py -hashes LM Hash:NT Hash 域名/用户名@目标IP // 哈希传递获得shell
  4. python wmiexec.py -hashes LM Hash:NT Hash 域名/用户名@目标IP "ipconfig" // 执行命令

wmiexec.vbs执行原理

  1. 调用wmi通过账号密码或者ntlm(wce注入)连接到远程计算机
  2. 建立一个到目标的IPC连接
  3. 建立一个共享文件夹,用于读取命令执行结果
  4. 用户输入命令时,wmi创建进程执行该命令,然后把结果输出到文件
  5. 通过fso组件访问远程共享文件夹中的结果文件,将结果输出
  6. 调用wmi执行命令删除结果文件
  7. wmiexec退出,删除文件共享

    在横向移动的过程中使用psexec和wmiexec被杀软拦截

wmiexec可以将命令执行结果输出到注册表通过wmic取回,调用Win32_ScheduledJob取代Win32_Process2等
psexec可以替换上传的服务exe程序进行防御规避