本文旨在分享技术思路,所有测试均在授权环境下进行。任何未经授权的渗透测试均属违法行为。
一位师傅给我发了个国外的站点,让我试试看能不能拿到系统权限。正好有空,就来挑战一下。
第一步:从登录框开始
目标是一个登录页面。

按照常规思路,先从登录框的常见漏洞入手测试。这里有一张思维导图,涵盖了登录框可能存在的多种安全问题,可以作为参考。

初步测试:
-
弱口令测试:输入 admin/123456,系统直接返回“密码错误”。

-
验证码绕过:发现图形验证码存在复用问题。第一次输入正确的验证码后,后续请求可以一直使用该验证码,无需更换。这为密码爆破创造了条件。

-
SQL注入探测:在用户名后添加单引号 admin' 进行测试。虽然没有报出数据库错误,但返回信息从“密码错误”变成了“账户不存在”。

这说明系统存在用户名枚举漏洞:输入一个不存在的用户名会提示“账户不存在”,而输入正确用户名但错误密码则会提示“密码错误”。利用这个差异可以进行用户名的探测。


第二步:信息收集与接口发现
在测试登录功能时,顺带收集一下接口信息。

直接访问站点根目录,发现了更多接口。这很可能是一处信息泄露。

通过观察这些接口的命名,可以尝试进行一些简单的变形测试。例如,将 /user/id 改为 /user/1,这可能会存在任意用户信息读取的漏洞。

此外,还发现了一些文件下载接口,这引起了我的注意。

为了全面探测,我使用了一个批量请求工具对已发现的接口进行 GET/POST 请求测试,但除了登录框,没有发现其他有意义的返回。


第三步:突破登录
既然接口没发现突破口,回头尝试爆破登录。虽然自动化工具没跑出来,但手动尝试了几个弱口令后,成功用 admin 和一个常见变体密码进入了后台。

这里需要注意,成功和失败返回的响应包长度有时是相同的,不能单纯依赖长度判断。


第四步:后台功能探索与Getshell尝试
进入后台后,首先看到的是一个云存储配置管理页面,这里可能存在云密钥泄露的风险。

在“xml替换规则”功能处尝试XSS,但输入HTML标签后系统并未解析,只是原样显示。


接着,在“应用管理”功能中找到了上传点,目标是直接获取Webshell。

这里支持三种类型的上传:网址打包APK、网址打包免签iOS、APK包上传。

尝试上传非APK文件到APK接口,被服务端拦截,提示“只能上传apk”。

但在“网址打包免签iOS”的选项里,发现了其他上传接口,如上传证书、文件、图片等。

选择上传图片的接口,通过Burp Suite抓包,将上传的文件名后缀改为 .jsp,成功上传。

第五步:利用任意文件读取定位私钥
上传Webshell后,面临一个问题:不知道文件的绝对访问路径。此时,之前发现的文件下载接口 /file/download?fileName= 派上了用场。
经过测试,该接口存在路径遍历漏洞,可以读取服务器上的任意文件。首先,成功读取了 /etc/passwd 文件,证实了漏洞的存在。

为了获取服务器权限,下一步是读取敏感文件,特别是SSH私钥。在 安全/渗透/逆向 领域,这是常见的深入利用手段。通常会尝试读取以下路径:
/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_ras.keystore
/root/.ssh/known_hosts
/etc/passwd
/etc/shadow
/etc/redis.conf
/etc/my.cnf
/etc/httpd/conf/httpd.conf
/etc/redhat-release
/root/.bash_history
/root/.mysql_history
/var/lib/mlocate/mlocate.db
/proc/self/fd/fd[0-9]*
/proc/mounts
/porc/config.gz
/porc/self/cmdline
/proc/sched_debug
/proc/pid/cmdline
/proc/net/fib_trie
/proc/self/environ
/proc/self/loginuid
/etc/ssh/sshd_config
/proc/self/cwd/
/proc/self/tomcat/
直接尝试读取 /root/.ssh/id_rsa 失败。

于是转换思路,先读取SSH服务配置文件 /etc/ssh/sshd_config,查看服务器使用了哪些主机密钥。

配置文件中显示启用了以下几种密钥类型:
HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
这表明服务器可能使用了ED25519或ECDSA算法。于是尝试读取对应用户私钥:
/root/.ssh/id_ed25519
/root/.ssh/id_rsa
/root/.ssh/id_ecdsa
成功读取到 id_ed25519 私钥!

第六步:连接服务器与权限确认
使用获取到的SSH私钥,通过Xshell等终端工具成功连接到目标服务器,执行 whoami 命令确认当前为 root 权限。

连接后,通过检查主机名、进程和cgroup信息,确认该服务器是物理机或虚拟机,而非Docker容器环境。


根据主机名 NTT-BB17-A20 分析,该服务器很可能属于日本电信电话公司(NTT)的企业内网或托管设备。

总结与思考
本次渗透测试的路径非常清晰:
- 信息收集:发现文件下载接口。
- 漏洞利用:利用文件下载接口的路径遍历漏洞,实现任意文件读取。
- 深入利用:通过读取SSH配置文件,推测并成功下载用户SSH私钥。
- 权限获取:使用私钥直接获取服务器root权限。
整个过程依赖于对常见漏洞的敏锐感知和链条拼接能力。任意文件读取漏洞的危害性往往被低估,它不仅是信息泄露,在特定条件下(如存在SSH密钥、配置文件泄露等)可以直接导致服务器失陷。在进行 安全测试 时,对每一个看似微小的漏洞点都应深入挖掘其潜在价值。
再次强调,本文所述漏洞已提交给相关方,所有技术研究仅用于合法授权的安全测试与学习。在 云栈社区 中,我们鼓励技术交流,但务必遵守法律与道德底线。