Injectics漏洞挖掘实战:从SQL注入到SSTI攻击完整解析

66 阅读3分钟

Injectics writeup — TryHackMe

0xH1SFollow
4分钟阅读 · 2025年9月6日

在本篇技术报告中,我将详细解析TryHackMe平台上Injectics靶机的解决过程。该挑战展示了SQL查询和模板引擎(Twig)中不安全输入处理的危害。

侦察阶段

我首先使用Nmap进行全端口扫描,使用-p-参数扫描所有65,535个端口,-sS参数执行隐蔽的SYN扫描,-T4参数提高扫描速度。

(nmap)

扫描结果显示20和80端口处于开放状态。

枚举阶段

接下来,我使用Gobuster枚举Web服务器上的隐藏文件和目录,在扫描中使用-x参数并指定js、json、php扩展名来显示相应文件。

(gobuster)

这发现了三个有趣的文件:

  • login.php → 登录功能页面
  • composer.json → 显示网站使用Twig 2.14版本,该版本已知存在SSTI(服务器端模板注入)漏洞
  • phpmyadmin → 表明服务器后端使用MySQL

(composer.json)

访问80端口的Web应用,我发现一个显示各国运动员奖牌数的页面。检查源代码后发现指向名为mail.log文件的注释。

(mail.log)

打开该文件后,我了解到如果users表被删除或损坏,系统会自动重新生成两个默认凭证,这些凭证也会记录在此文件中。这为我们提供了明确的攻击路径:删除表以强制凭证重新生成。

(log)

漏洞利用阶段

随后我测试了login.php功能的SQL注入漏洞。

在用户名字段提交1触发了关于无效字符的错误。

(invalid)

深入挖掘后,我发现了一个隐藏脚本。

该脚本列出了被阻止的关键字,如OR、AND等。

(invalid)

为了绕过此过滤器,我通过BurpSuite发送了编码后的payload:

1%27%20||%201=1%20--+

相当于: 1' OR 1=1 --

(payload)

这成功绕过了身份验证,我以dev用户身份获得了访问权限。

(dashboard)

接下来,我通过在所有输入框中输入21*21来探索奖牌编辑功能。

(21*21)

应用程序返回了441,确认输入正在由Twig模板引擎进行评估。

(441)

由于存在SSTI漏洞,我尝试利用它。我的目标是删除users表,强制应用程序使用默认凭证重新创建它。我使用了:

21; drop table users --

(drop table)

这触发了系统重新创建表的重新加载过程。

(drop)

等待约2分钟后,我使用在mails.log中找到的凭证登录,成功以admin身份验证并获取了第一个flag。

(admin)

权限提升

以admin身份登录后,出现了一个新的Profile选项卡。我开始测试所有输入框。

(twig)

这显示FirstName字段存在SSTI漏洞,并且这次不仅接受数字还接受字符串。

(49)

此时,我将攻击升级为远程代码执行(RCE)。使用以下Twig payload:

{{['ls ./flags',""]|sort('passthru')}}

(ls)

为了获取最终flag,我执行了:

{{['cat ./flags/5d8af1dc14503c7e4bdc8e51a3469f48.txt',""]|sort('passthru')}}

(update)

这成功显示了最后一个flag,完成了该靶机。

(final flag)

所有问题的答案如下:

  1. 登录admin面板后的flag值是什么? THM{INJECTICS_ADMIN_PANEL_007}

  2. flags文件夹中隐藏文本文件的内容是什么? THM{5735172b6c147f4dd649872f73e0fdea}

以上就是全部内容!感谢阅读,下次再见!希望这份技术报告对您有所帮助。