渗透测试核心思路,渗透测试的目标可以是单个主机,也可以是整个内网。在实战中,比如最近如火如荼的HW行动,更多的是对一个目标的内网进行渗透,争取获得所有有价值的资产。完整的内网渗透涉及的步骤如下图所示。我们总是先通过对外提供服务的,防守最薄弱的主机打进去,然后搭建隧道,通过该主机访问内部的其他主机。快速横向移动到到内网中的核心资产,获取核心敏感数据和权限,完成一次疼痛的打击。
IT问答库http://www.mobiletrain.org/qa/
Step 1 信息收集
完成边界突破的第一步是目标对象资产的信息收集。不同于内网渗透环节中信息收集(后渗透),此部分信息收集的主要针对对象为目标服务器系统、数据库系统、中间件系统、应用程序系统、以及边界信息等。必要时候还要针对系统管理员进行信息收集。这些其实是为了找到脆弱资产进行攻击,毕竟“柿子挑软的捏”。
1.1 域名及子域名
OneForAll
从域名找IP以及子域名爆破还没有经历过,之后经历了再更新。
https://github.com/shmilylty/OneForAll
1.2 主机、端口和协议
主机存活 -> 操作系统 , 端口开放 -> 通信协议
whois + ip 确定IP网段
Nmap
查看端口开放及其上通信协议:
namp -sS -sU target_ip -p 100-27018
-sS 为TCP SYN扫描具有更强隐蔽性,不建立连接;
-sU 激活UDP扫描,检测端口上开启的UDP服务;
-p 指定扫描的端口范围,但会更加耗时;
以上这两个命令在没有防火墙的时候比较管用。如果需要绕墙的话,需要选择其他策略如碎片扫描,间隔扫描等,之后遇到了再整理。但是思路就是观察对方的响应包然后及时更换策略或者组合策略。
sudo nmap -A --version-intensity 9 target_ip -p target_port
-A 同时打开操作系统探测和版本探测,其中操作系统探测需要sudo权限;
--version-intensity 确定版本扫描的强度;
target_port 是上述命令执行之后得到的开启的端口
masscan 高速 无状态扫描
通过masscan也可以快速扫描得到C段和旁站。其中旁站是指同一台服务器上的其他网站,C段是指同一内网网段中的其他服务器
FOFA Zoomeye 等网络资产空间测绘引擎
如果为了隐蔽,也可以直接使用被动信息搜集如fofa直接去搜IP。
1.3 端口服务及其上框架CMS或组件
Wapoalyzer
对于网站而言,可以使用chrome的插件Wappalyzer去分析包括前端框架,后端框架、服务器类型、插件、编程语言等等版本信息。
手工分析
但是肯定不能依赖于一个插件搞定一切,大多数情况下需要对网站进行手工识别,如HTTP的响应头,HTML的body、title、meta、class命名,网站的目录结构以及报错信息等。
Github
在得到具体框架之后可以尝试在github上搜一下,可能会有网站的源码,或者许多有用的信息。
云悉平台
此外,云悉资产探测平台很好用,但是需要邀请码。这部分主要的内容不过是确定框架和组件,还有版本信息。有了版本信息就可以去找一些没有修复的漏洞攻进去。
1.4 Waf识别
wafw00f
wafw00f是一个Web应用防火墙(WAF)指纹识别的工具。
下载地址:https://github.com/EnableSecurity/wafw00f
1.5 目录爆破
但凡涉及到爆破,一定是需要合适的字典的。如果可以确定网站的框架,那么可以通过寻找其网站框架或者系统的源码可以获得可能存在的路径,大大减少爆破次数。此外,通过Google Hacking也可能有意想不到的收获。最好是已知跟路径之后再去扫路径下可以访问到的文件,这样可以极大地提高爆破效率。
dirsearch
https://github.com/maurosoria/dirsearch
Google Hacking
Google Hacking的功能有非常多,借助于Google搜索引擎,它可以帮助我们做到如子域名获取、C段和旁站扫描、敏感路径扫描、敏感内容查询等等。
Step 2 漏洞扫描
关于漏洞扫描,我的理解是当清楚你资产上运行的服务、框架或者组件的名称和版本的时候,直接搜索引擎去找1day就就可以。现在网站基本都是二次开发,肯定已经被人研究过了。所以这应该是最先尝试的,而不是直接上工具。
接下来,可以使用Xray、MSF或者特定框架的漏洞扫描器通过POC去确认网站是否含有该漏洞。不要直接使用Xray去主动扫描网站,试图通过探测所有web接口去找漏洞,效率很低。
2.1 Xray
Xray是一款非常优秀的Web扫描器,它设计的初衷是很好的,而且支持自定义POC。但是如果目标使用了已经发布的系统或者框架,我们就没有必要自己去测试了,直接把别人的研究成果拿来用就好了。
2.2 弱密码爆破
如果找到任何登录界面,想到的第一件事就应该是弱密码登录。
但是,还要去确认网站有没有使用验证码。或者验证码的是不是可以绕过的,比如实战中遇到的一个网站的验证码就是通过用户的Cookie中的id生成的,也就是说当用户Cookie和验证码的绑定不变时,后台验证永远是正确的。
如果没有验证码或者验证码可以绕过,则可以使用Burp Suite中的Intruder模块进行爆破。此外,需要注意的是爆破的字典一定要去搜集下,自带字典实在是不得行。
Step 3 漏洞利用
3.1 蚁剑
蚁剑是中国优秀的Web Shell网站'管理'软件。
蚁剑的原理都是在获取网站文件修改或者命令执行的权限之后,在网站的后台的代码中插入这样一句木马。然后再去请求这样插入一句话木马的文件,在其中使用POST请求字段插入待执行的指令,然后再响应包中获取命令执行结果。其实,所谓的密码'jfe',就是请求的POST字段名,所以这句话的意思就是在数据包中POST字段名为'jfe'的字段值取出来然后执行。当然,其他的隐藏和绕过方法都是在这个原理之上的,比如替换其他函数,混淆编码,重新书写代码等。
默认情况下,蚁剑的流量是特别明显的,不过也可以使用插件或者代理对流量加密,无非就是在原有基础上增加加密解密的步骤。我自己觉得一个比较好的方式是把一句话木马或者木马代码段加载到一个偏僻的页面代码里,然后在正常请求基础上再添加POST字段带上要执行的指令。这样在他的Web目录里并不会有一个文件落地,而且请求的url也是正常的,不会引起网站管理员的注意。如下所示,蚁剑支持添加正常请求时数据报文的头部和请求体,以最大程度上伪装成正常流量。
蚁剑通过Web Shell的方式完成与目标机的隐蔽通信,所以比较稳定。而且蚁剑拥有图形化界面而且功能非常多,包括Web Shell、文件管理、数据操作(数据库查看)等等。
2.3 Metasploit (MSF)
MSF作为一个渗透测试框架可以完成漏洞扫描、漏洞利用、生成攻击载荷或木马或shellcode、监听等任务。
接下来以攻击一台XP作为示例,使用msf的基本的流程如下:
msf6 > search smb type:exploit platform:windows # 针对目标使用exp
msf6 > use 0 # 选择一个exp
msf6 > show options # 查看该exp的选项
msf6 > show payloads # 选择用于保持连接的payload
msf6 > set RHOST 10.10.10.10 # 设置一系列exp的选项
msf6 > exploit
最终成功拿到metepreter的shell。meterpreter拥有极多的功能,可以完成后续的信息搜集和提权等,是非常强大的后渗透工具。
我们拿下一个目标的方式的拿到该目标的shell,即控制通道,但是获取shell的方式有很多种而且拿到的也是不同的shell。我们可以对比一下蚁剑、冰蝎的webshell,msf的metepreter以及CS的beacon,思考他们是如何完成以下三点的:
这个部分可以参考长亭的这篇博客[如何改造MSF Meterpreter如CS Beacon一样稳定 - 知乎],因为我自己还没有时间去读他们实现的源码,可能之后会单独写一篇文章,谈一谈自己的理解。
Viper 是msf的图形化界面的版本,虽然还有许多需要完善的,但是图形化界面永远是更方便直观的。
项目地址:https://github.com/FunnyWolf/Viper
2.4 Cobalt Strike
Cobalt Strike在国内收到了更多的吹捧,但是本人在实际模拟渗透测试中还是使用MSF更多一些。我目前的理解是Cobalt Strike更专注于后渗透测试,拥有更加稳定的控制通道,而且支持多人同时作战。更专注于后渗透测试的意思是,CS主要负责生成各种形式的payload,也就是用于通信的后门,但是如何利用漏洞将payload在目标机上运行,使目标上线,就不是其主要关注点了。它主要负责目标上线之后的后续操作。
Cobalt Strike的控制通道叫做Beacon,在隐蔽信道上为我们提供服务,用于长期控制受感染主机。与MSF中的payload完成的是同一件事。Beacon支持通过HTTP(S)、DNS、SMB、TCP四种进行通信,适用于更多的实战场景,而且相比于MSF的meterpreter更加稳定。
Cobalt Strike的后渗透测试模块可以协助渗透测试人员进行信息收集、权限提升、端口扫描、端口转发、横向移动、持久化等操作。这些功能可以通过添加插件来完成。
值得一提的是,CS具有一键克隆钓鱼网站的功能,配合环境和话术,目标很容易上钩。