【博客】记录一次针对本站评论系统的恶意攻击
记录一次针对本站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有这个功能,但是当时在手机上并没有找到。
此次攻击,准确来说是攻击的尝试,规模较小,发送评论的时间间隔大,发送的内容差距大,慕雪认为这是一次人工操作,并非脚本自动化攻击。
最后,还是希望大家不要去做这种没有任何意义,只会给别人造成损失,甚至违规违法的操作。切记,网络不是法外之地!