Fork me on GitHub

如何破解并访问Hexo Blog已加密的文章

How to crack hexo simple encrypted blog?

今天结束本月的最后一次加班,迎来本月的第4个休息日(orz…),本想早点休息的,不过想想还是得把今天的事件写篇blog引以为戒。
鉴于本人日常吐槽风的写作习惯,想看干货建议:先看目录,从后往前,逆向阅读

事发

下午一起加班的小伙伴在折腾blog,然后问我的blog文章是怎么加密的,然后,就是惨案的开始(orz…)

我直接发了一个截图,并友情提示,这段代码大概不安全。然后成功激发小伙伴的兴趣,开始尝试越过密码。大概1-2分钟后,blog加密文章形同虚设。

分析

我的blog现在是用额hexo的the next主题加各种自定义特效,因为搭建时间其实很早,所以当时使用了一种简单的js逻辑来加密blog。下面我们来看下这段有安全问题的代码:
代码位置: yourblog/themes/next/layout/custom/head.swig

1
2
3
4
5
6
7
8
9
10
<script>
(function(){
if('{{ page.password }}'){
if (prompt('请输入密码') !== '{{ page.password }}'){
alert('密码错误');
history.back();
}
}
})();
</script>

乍看是否觉得除了逻辑简单没什么问题,然而眼尖的小伙伴分析出了第一个隐患:history.back(); ,而我已知静态页面的安全隐患。接下来我们逐个分析。

history.back()

back() 方法可加载历史列表中的前一个 URL(如果存在)。如果你的前一个URL就是这个文章的URL,那么恭喜,第一种破解方法get。(不理解,看下一条)

静态页面

hexo g 会根据blog相关文件在public目录下生成blog的所有静态文件。既然是已经生成好的静态页面,实际上html中包含了那段js代码的。因为需要获得html了之后才会触发那个页面访问加密的js,而理论上当我们获取到html页面之后,就可以停止当前页的js操作了。
That is to say, 你的blog word就是直接写在页面中的,虽然直接url去访问会弹alert,但是用curl直接获取这个页面的html,可以直接搜索到文章的访问密码, 分分钟攻破此种博文加密方式。上面利用history.back()的访问破解方式,归根结底也是这个问题引起的。

另外补充一点:因为用hexo的blog的人大多喜欢直接部署到github上利用github.io来展示,这样就要求使用Github的公开仓库,所以代码基本没有保密性可言。坊间流传直接看md文件我持疑,因为hexo d只会把public目录里生成的静态文件上传到github的仓库,除非是直接上传了blog项目的所有代码到github的仓库中。

修复

其实修复问题很好解决,既然简单的js加密不够安全,那我们就换一个安全的加密方式。
不知道怎么写?不慌,早已有大佬开发了插件hexo-blog-encrypt

安装hexo-blog-encrypt(安装方式2选1)

1.npm维护安装包

1
npm install --save hexo-blog-encrypt (需要安装 npm)

2.yarn维护

1
yarn add hexo-blog-encrypt (需要安装 Yarn)

站点设置修改

在 站点配置文件 _config.yml 中启用该插件

1
2
3
4
5
# encrypt plugin
encrypt:
enable: true
default_abstract: 这是一篇加密文章,内容可能是个人日常吐槽或者特殊技术分享。如果你确实想看,请与我联系。非亲友团勿扰。
default_message: 输入密码,查看文章。

使用hexo-blog-encrypt加密blog

在你的博文头部添加上相应字段,如 password, abstract, message。因为 abstract, message 在站点配置中设置了默认值,如果这里不想自定义 abstract, message,不用专门设置。
password: 代表blog的访问密码
abstract: 这篇博文的摘要,会显示在博客的列表页
message: 当查看加密博文时,密码输入框上面的提示性文字。建议使用中文,英文提示默认字体不好看,可以看我下面的截图。

visit_password

1
2
3
4
5
6
7
8
9
---
title: 测试新文章加密
date: 2019-08-31 13:52:21
category: hexo
keywords: 博客文章密码
password: yourpassword
abstract: hexo密码测试
message: 输入密码,查看文章
---

反省总结

这个事件,其实属于网络安全中最常见的问题“人的安全意识”,比如这个blog加密方案有访问漏洞,我是知道的,但是拖延症导致我没有足够重视这个问题(因为自己总是想着加密过的东西其实被看到也无妨,毕竟正要保密也不会发出来了balabala),结果一直没去修复(即使实际修复这个问题只需要10分钟),直到被小伙伴测试到bug才动手修复。

延伸到实际生产环境的安全问题,0 day漏洞被利用姑且还能辩解说是吃了信息不对等的亏。但也不乏一些有年头的机构的网站依然存在N day漏洞可利用,即使修复方案网上10s可能就能找到(例如:简单的打个补丁或者改几个配置项),这就真的是维护人员安全意识的问题了。所以在网络安全中,人的安全意识尤为重要,对于安全从业者更是如此,绝对不能有一丝松懈。

-------------  Fin    Thanks for reading!  -------------

本文标题:如何破解并访问Hexo Blog已加密的文章

文章作者:TesterCC

发布时间:2019年08月31日 - 23:08

最后更新:2020年05月11日 - 21:05

原始链接:http://blog.fullstackpentest.com/how-to-crack-hexo-simple-encrypted-blog.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。