【博客】记录一次针对本站评论系统的恶意攻击
记录一次针对本站 waline 评论系统的恶意攻击。
前言
首先,本站在切换到 butterfly 主题之后,基本都是使用 artalk 评论系统进行评论,之前有一段时间使用了 butterfly 的多评论系统共存的功能,但是在我关闭该功能之前,waline 没有收到任何新的评论。
本站的 waline 评论系统是采用 vercel 部署的,在 hexo 配置中虽然取消使用了该评论系统,但并没有取消 vercel 的部署和域名的解析,即本站旧的 waline 的服务依旧可用。
根据配置文件的 git 提交记录,2023.12.10 的提交中,本站的 waline 评论系统被彻底隐藏,而且在 keep 主题留档站点中也没有开启评论系统。
1 | commit e7ca8edf4f2c0512bf654abed9b911e78871e32e |
也就是说,理论上在 2023.12.10 之后,waline 系统不应该被本站的普通读者发现和使用。
过程
但是,在 2024.09.03 上午,也就是撰写这篇文章的同一天,本站的 waline 博客收到了不明生物的小规模 “攻击”,主要情况如下:
该用户使用不存在的邮箱 test@example.com
在 waline 发送大量评论,触发邮件系统的大量邮件退信。因为 waline 需要用户注册才能以已登录用户的身份发送评论,此时会有用户注册的验证邮件,该验证邮件被退信,大约 24 条。
该用户发送了大量只包含 GIF 动图的评论,尚且不清楚这些只包含图片的评论中是否暗藏玄机。它还发送了包含 SQL 语句的评论,尝试对评论系统后端进行 SQL 注入攻击。
该用户尝试在 waline 的用户邮箱、用户名字、用户域名、甚至 url 处进行 SQL 注入攻击。
SQL 注入攻击
这里将评论中的这条 sql 语句剥离出来,问问 GPT 它的功能(我对 SQL 注入攻击不太懂)
1 | (select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/ |
以下是 GPT 的原话:
- 这段注入代码的主要部分是
(select(0)from(select(sleep(15)))v)
,这是一个子查询,使用 SLEEP (15) 函数来延迟 SQL 查询的执行 15 秒。SELECT SLEEP(15)
会让数据库在执行该查询时暂停 15 秒,然后返回结果(在这里返回 0)。 /* ... */
是 SQL 中的注释符号,用于忽略注释中的内容。在注入中,这可以用来闭合或注释掉原有的 SQL 代码,使得攻击者的代码得以执行。'+ ... +'+
和"+ ... +"
是用于拼接字符串的符号,分别针对单引号和双引号上下文。这些符号试图适应不同的 SQL 拼接方式,以确保注入代码能够在各种情况下都被正确执行。
最终的基本理念就是,通过 sleep(15)
尝试让数据库进行休眠,根据接口返回的延迟,判断 SQL 注入是否成功。
再看看 link 中的 SQL 语句
1 | 0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z |
GPT 原话:
now()
和sysdate()
是 SQL 中的时间函数,通常返回当前的时间戳。尽管它们在大多数数据库中返回相同的结果,攻击者利用它们来测试是否可以执行代码。if(now()=sysdate(),sleep(15),0)
是一个条件判断语句:如果now()
和sysdate()
相等(几乎总是相等的),那么就执行SLEEP(15)
。否则,返回 0。- 这个逻辑使用了 XOR 来试图绕过某些简单的 SQL 过滤机制。XOR 是一种位操作符,用于在两值之间执行异或操作。在这里,它被用于修改 SQL 查询的逻辑,试图绕过常规的过滤机制。
这个注入代码的意图是通过引入条件语句和时间延迟函数来探测 SQL 注入漏洞。如果注入成功,数据库将执行 SLEEP(15)
,导致查询延迟 15 秒,从而帮助攻击者判断注入是否成功。
后话
可惜了,waline 用的数据库是 leancloud,压根不存在 SQL 的操作,SQL 注入自然是失败啦!
发现这个问题的时候,我使用腾讯云微信小程序紧急关闭了指向 waline 的子域名的 DNS 解析,但在关闭解析后对方仍然在不断地发送评论(因为此时对方已经知道服务器的 IP 地址了,请求并不存在 DNS 解析步骤),于是直接通过手机操作 vercel,删除了 waline 的项目部署,恶意请求才得以消停。
感觉 vercel 应该出一个停止服务
的按钮,这样就不用删除整个项目了,以后想用也不需要重新配置。可能 vercel 有这个功能,但是当时在手机上并没有找到。
此次攻击,准确来说是攻击的尝试,规模较小,发送评论的时间间隔大,发送的内容差距大,慕雪认为这是一次人工操作,并非脚本自动化攻击。
最后,还是希望大家不要去做这种没有任何意义,只会给别人造成损失,甚至违规违法的操作。切记,网络不是法外之地!
- 最新
- 最热
- 最早
- 作者
点击重新获取 | 打开控制台