找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4372

积分

0

好友

589

主题
发表于 2 小时前 | 查看: 3| 回复: 0

本文旨在分享技术思路,所有测试均在授权环境下进行。任何未经授权的渗透测试均属违法行为。

一位师傅给我发了个国外的站点,让我试试看能不能拿到系统权限。正好有空,就来挑战一下。

第一步:从登录框开始

目标是一个登录页面。

后台管理登录页面截图

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

登录框安全测试思维导图

初步测试:

  1. 弱口令测试:输入 admin/123456,系统直接返回“密码错误”。
    密码错误提示

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

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

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

第二步:信息收集与接口发现

在测试登录功能时,顺带收集一下接口信息。

登录接口发现

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

访问根目录发现大量接口

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

接口变形测试

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

发现文件下载接口

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

批量请求工具测试结果

批量请求结果仅显示登录框

第三步:突破登录

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

登录爆破尝试

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

成功与失败响应长度对比

登录失败响应示例

第四步:后台功能探索与Getshell尝试

进入后台后,首先看到的是一个云存储配置管理页面,这里可能存在云密钥泄露的风险。

后台云存储配置管理界面

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

XML规则新增页面尝试XSS

XSS未解析

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

后台应用管理界面

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

应用上传类型选择

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

APK接口白名单限制

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

免签iOS上传接口发现

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

上传JSP Webshell成功

第五步:利用任意文件读取定位私钥

上传Webshell后,面临一个问题:不知道文件的绝对访问路径。此时,之前发现的文件下载接口 /file/download?fileName= 派上了用场。

经过测试,该接口存在路径遍历漏洞,可以读取服务器上的任意文件。首先,成功读取了 /etc/passwd 文件,证实了漏洞的存在。

成功读取/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 失败。

读取默认RSA私钥失败

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

读取SSH服务端配置文件

配置文件中显示启用了以下几种密钥类型:

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 私钥!

成功读取ED25519 SSH私钥

第六步:连接服务器与权限确认

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

SSH连接成功并确认root权限

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

检查系统进程

检查cgroup和.dockerenv文件

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

根据主机名分析服务器归属

总结与思考

本次渗透测试的路径非常清晰:

  1. 信息收集:发现文件下载接口。
  2. 漏洞利用:利用文件下载接口的路径遍历漏洞,实现任意文件读取。
  3. 深入利用:通过读取SSH配置文件,推测并成功下载用户SSH私钥。
  4. 权限获取:使用私钥直接获取服务器root权限。

整个过程依赖于对常见漏洞的敏锐感知和链条拼接能力。任意文件读取漏洞的危害性往往被低估,它不仅是信息泄露,在特定条件下(如存在SSH密钥、配置文件泄露等)可以直接导致服务器失陷。在进行 安全测试 时,对每一个看似微小的漏洞点都应深入挖掘其潜在价值。

再次强调,本文所述漏洞已提交给相关方,所有技术研究仅用于合法授权的安全测试与学习。在 云栈社区 中,我们鼓励技术交流,但务必遵守法律与道德底线。




上一篇:Altera FPGA与Arm AGI CPU深度集成,共同瞄准AI数据中心市场
下一篇:硬件电路设计高效指南:9大核心模块解析与实践要点
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-27 03:15 , Processed in 0.683958 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表