密码和口令是通往权限和控制效果的重要途径,通过获取目标的重要系统口令或口令设置规律,能够有效的实现横向移动和重要的权限提升,因此密码/口令在渗透测试过程中被作为重点关注对象,比如在我们获取某目标系统的Webshell时,往往会第一时间查看数据库配置文件获取数据库账号密码,进而可以有效的访问系统数据。那么除了通过配置文件的方式获取密码外,在渗透测试的过程中还有哪些途径可以获取此类密码呢。
常见的密码包括操作系统密码、数据库密码、个人常用账号密码、普通应用系统账号密码等等。那不同的系统或者应用系统也会通过不同的加密或编码手段对密码进行加密,最常见的加密方式有MD5、MD5+Salt等,而近年来还出现了一些诸如Bcrypt、PBKDF2等加密方式,需要自己通过彩虹表实现破解。而由于安全意识的加强诸如CMD5等破解依然存在无法解密的情形,因此我也将我在渗透测试的过程中应用过的一些直接获取明文密码的方式分享出来。
通过配置文件获取密码是最简单的一种方式,也是渗透测试掌握的最基础的一种方式,没有太多的技巧可言,但应该熟悉不同的应用系统、开发框架、开发语言常见的配置路径、文件名称,但是并不是一切配置文件都以明文存储密码,作者曾多次在java
spring开发框架下的web应用系统的配置文件中发现是存储着加密密码,但是不用担心,这种密码肯定是可逆解密的,但是需要你通过源码获取加密方式以及加密秘钥,然后解密后获取明文密码。一般常见的思路是从applicationContext等配置文件获取加密的类所处位置后阅读源码来逆向解密密码。
在个人PC渗透过程中,针对各类浏览器、远程管理软件(Xshell)、数据库管理软件(Navicat)的密码存储也应该被重点关注。
通过内存抓取是在Windows系统渗透过程中常见的技术,主要应用在获取Windows系统密码获取上,在操作过程上也没有太多技巧可言,目前主要集中的问题包括新系统上不再存储明文密码、如何免杀抓取工具等问题。诸如通过Procdump、SQLdumper等签名工具dump内存然后再本地提取等都是应该掌握的基本技巧。而针对卡巴斯基等防护软件的内存保护是比较难以解决的问题,但也相关的解决办法。
诱导管理员输入是应用在一些特定场景下有奇效的一种方式,类似于基础认证钓鱼的意思,笔者目前在实施上还没有失败的案例,可以说众多运维管理人员的安全意识还是非常欠缺的。诱导管理员输入需要一个诱导条件,比如管理员在执行重要的操作命令时,我们通过修改执行脚本或程序,显示需要输入密码从而获取密码。下面通过一个案例说明。笔者在某次渗透过程中获取了某系统的root权限shell,但是在横向移动的过程中迟迟没有成果,在通过bash_history发现管理员经常执行系统上的tomcat启动和停止脚本,于是打算在对该脚本进行修改,在管理员执行的过程中提示需要输入密码,从而诱导管理员输入root用户密码。
在修改完后,大胆的直接停止了该tomcat服务,没过多久管理员就上线检查并重新启动了服务,于是我也就获取了root用户密码,并通过该密码横向移动到多台其他机器。该技术需要一定的场景,比如在本次实施时已经获取了root权限有脚本的修改权限,在日常渗透过程中可以重点关注一些备份等脚本,以在特定场景下实施诱导。
劫持是一种比较常见的攻击方式,如DNS劫持等,如何将劫持应用在简单的渗透场景中,在我的之前一篇文章中我通过alias劫持git命令获取了其另一机器登录私钥的密码,详见
迂回渗透某APP站点.对于SSH服务的劫持可以直接获取SSH密码,目前公开的存在一个对老版本SSH服务的修改以用于劫持SSH的密码,但是需要卸载原有的SSH服务并重新安装,操作复杂风险高。在
迂回渗透某APP站点案例中,目标会在系统上通过git拉去代码服务器上的代码,通过ssh公私钥验证,私钥是通过密码加密的,在使用git命令时会提示输入私钥密码,类似于0x03,通过alias修改git命令为一脚本文件,并提示用户输入密码后记录密码。
这里要提到的撞库并不是通过单一的公开数据库来实施撞库,而是利用一定的手段获取目标用户或系统的独立的关联数据库权限,从而获取目标常使用的账户密码,主要应用在对个人账户密码的攻击上。
社工手段也是重要的技术手段,社工个人信息易,但是想通过社工获取密码难。目前大多侧重于通过一定的个人社交账户名称、生日、姓名等常见密码组成信息,结合密码生产工具,配合爆破实现攻击。这方面主要是个人经验的积累。