白帽故事 · 2024年1月10日 0

组合拳法:漏洞利用链的艺术

Table of Contents

概念

漏洞链的过程需要一组程序,允许黑客利用应用程序内的多个漏洞/缺陷的优势来实现最大化影响,一个简单的例子就是用XSS配合Opendirect重定向,然后用XSS链接实现账户劫持,然后再从SSRF到RCE。

今天我们来看看国外白帽子 Ahmad Halabi 利用漏洞链组合进行挖洞的案例。

案例1

从一个移动应用程序(apk文件)开始,第一步反编译apk文件,可以使用jadxapktool来帮助你将Dex和APK文件反编译为可读的Java和Smali代码。

在查看反编译后的源代码后,注意到配置文件使用了JSC扩展名加密。

JSC代表开发人员用来加密包含敏感信息(如:服务器IP、凭据、密钥等)的文件的JavaScript编译脚本。

接着解密JSC文件,JSC是使用了Cocos2d-x(一种开源的跨平台开发框架)开发,因此在反编译的应用程序文件中搜索Cocos2d-x文件。

然后对libcocos2d-x.so文件进行逆向,搜索main.js函数,直接拿出IDA,尝试找到Cocos2d-x用来加密文件的解密密钥XXTEA

然后就可以使用XXTEA密钥对JSC文件进行解密了。

在JSC文件被解密后,就能够轻松阅读JS源代码了。代码审计过程中,在一个解密的配置文件中发现了一个有趣的IP地址。

于是果断进行端口扫描,但目标做了一些保护措施,因为在扫描过程中收到了巨大的数据包延迟。

因此考虑使用了另一种方法来检测开放端口,尝试使用Shodan/Censys,发现了一个运行GitLab的开放端口8100

查看页面,存在一个Register按钮,尝试注册账户,顺利进入目标公司的GitLab。

注册登录后,发现没有公共项目可供普通用户权限的账户使用。然后在使用过程中发现一处API端点api/v4/users,在这里成功找到了管理员的用户名。

记下用户名,然后从当前用户注销,添加管理员用户名root,尝试使用密码字典进行密码爆破。

PS:密码字典并不是随机的,通过查看了社交媒体、开源(GitHub等)、网站和任何其他来源上的目标公司简介,这些信息收集最终获得了管理员账户可能使用密码的正确情报。

然后网站使用了WAF来防止暴力破解,最终通过利用X-Forwarded-For:127.0.0.$1$ 实现绕过WAF防护。

最终使用管理员账户登录GitLab,并顺利获取私有存储库访问权限。

通过源代码查看,找到访问目标公司基础设施的凭据。

云数据库

SQL数据库

Redis数据库

服务器用户名

服务器密码

密码进行了hash,但很容易破解。最终拿到访问所有后端管理系统的权限。

通过Redis升级到RCE,并访问到另一台服务器。然后从一台服务器渗透到另一台服务器,最终访问到所有服务器。

该项目漏洞挖掘共花费25小时(每天5小时)。

案例2

1、端口扫描IP地址[发现打开的SSH但不存在漏洞+爆破密码不起作用]

2、通过IP反向查找域名

3、执行子域枚举[找到一个解析子域名vip.Target.com]

4、端口扫描[发现Nginx、Xampp、Java正在运行]

5、检查常见漏洞和已知漏洞[没有易受CVE攻击的漏洞]

6、目录爆破[找到登录页]

7、尝试使用普通用户名和密码进行爆破[失败]

8、查看页面源代码+阅读JS文件[找到隐藏的注册页]

9、注册账户需要白名单电话号码范围

10、经过几次尝试,找到了电话号码范围模式

11、验证码会发送到电话号码上,注册时需要验证码[问题是无法访问到添加的电话号码,也无法添加不同模式]

12、通过抓取请求和响应包,发现验证码在响应包中泄露,注册成功

13、导航至登录页面[登录需要用户名和密码]

14、无法登录[响应消息为:用户名无效,因为在注册时使用了相同的用户名]

15、添加注册的电话号码,而不是用户名[登录成功]

16、服务器正在运行Xampp,搜索文件上传端点[所有图片上传均经过验证和保护]

17、在浏览了仪表板的各项功能后,发现其中一个端点缺少对Upload图标扩展名的验证

18、上传了php shell,并访问shell路径[shell没能执行,页面中也没有显示任何PHP信息]

19、检查请求并在请求 URL 中发现 (.do) [虽然应用程序运行的是 Xampp,但后端确使用了Java]

20、写个简单的jsp反弹shell,然后上传

21、成功获得shell,并以管理员身份访问到服务器

该项目漏洞挖掘共花费4小时。