伸向Markdown的黑手,知名博客平台曝出LFI漏洞

如果你至今依然在坚持写博客,在知乎或其他自媒体平台上发表文章,那你应该对Markdown很熟悉了。这是一种轻量级标记语言,借此可以用纯文本格式编写文档,并用简单的标记设置文档格式,随后即可轻松转换为具备精美排版的内容。简单来说,Markdown像纯文本格式那样简洁明了,又能提供基础的格式控制能力,但又不像Word之类的软件那么“笨重”,这种“轻写作”方式已经被很多博客和自媒体平台所采用。

然而今年初,Akamai和CredShields的研究人员通过合作,在主要面向软件开发者的博客平台Hashnode上发现一个本地文件包含(LFI)漏洞。该漏洞存在于一个批量Markdown导入功能中,借此攻击者将能从Hashnode的服务器上下载本地文件,例如绕过CDN代理直接获取SSH密钥、IP地址和其他信息。

本文我们就一起看看这个漏洞到底是怎么回事。

背景

Hashnode是一个面向开发者的平台,一个旨在教学知识的地方。但任何安全从业者都知道,任何好的事务都可能被恶意利用。在使用Hashnode平台的过程中,我们发现他们的批量Markdown导入功能存在重大漏洞,因此就深入研究了一下。最终我们吃惊地发现,借助这个漏洞,我们不仅可以拿到服务器的SSH私钥,甚至可以通过LFI绕过他们的CDN服务拿到服务器的真实IP地址。有了IP地址,后面还会发生什么简直都不用多想。

好在本次的研究中,我们发现Hashnode对自己的SSH设置了白名单,因此就算拿到密钥也无法执行任何操作,并且当我们将发现的情况上报给他们后,他们立即做出了响应。然而随着过去半年来LFI攻击飞速增加,我们觉得有必要将本次发现分享出来,以便更多安全专家能够更重视这方面的问题。

那么我们到底是如何通过批量导入功能拿到服务器的IP地址的?

一些都源自LFI

拿到一个新玩具后,最大的乐趣就是玩,对吧!因此我们开始围绕Hashnode的批量Markdown导入功能进行了各种实验。当时我们是打算将大量博客文章迁移到新平台,此时批量导入应该是最方便的方式了。Hashnode的批量Markdown导入功能需要我们提供Markdown文件,然而谁能想到,这会促使我们发现过去半年里一个最大的网络攻击载体!

那么这到底是如何做到的?我们发现,如果提供的Markdown文件中引用了图像文件,那么Markdown解析程序就会在内部寻找该文件并抛出一个错误(因为找不到该文件)。因此如果提供如下的Markdown内容:

解析程序将抛出下列错误信息:

Markdown解析程序会在存储Markdown的位置下寻找“blog.jpg”文件,并在不可避免的失败后抛出错误信息。那这是否意味着如果能找到所引用的内部文件,就可以成功获取?那自然了!

利用LFI

经典的passwd载荷足以欺骗Markdown解析程序寻找指定的本地文件,并将其上传至Hashnode的CDN,这一切都如期发生了。我们的恶意Markdown内容是这样的:

这个文件被顺利解析出来了,没有遇到任何问题。作为回应,我们得到了一个URL,借此可以获取上传的文件(因为服务器假设这是一个合法的图像文件):

接下来我们只需要访问该URL并下载这个文件(本例中为/etc/passwd文件)就可以直接查看其内容。

那么接下来,我们当然要尝试着获取一些敏感文件,包括用户的SSH私钥。幸运的是,该私钥位于默认位置,例如/home/user/.ssh/id_rsa。我们尝试着登录服务器来验证是否可行(只有当对应的公钥位于服务器上的“authorized_keys”文件中,才有可能这样登录,而符合这种要求的概率非常小)。不过在登录时我们遇到了一个障碍,Hashnode使用了CDN服务,这意味着我们无法连接到服务器上任何打开的端口,因为源IP被隐藏在CDN代理之后。但我们并未放弃。

查找服务器的IP地址

这个任务并不难,但我们事先并不了解这一点。我们有同事建议看看/proc/net/tcp文件,该文件可能会揭示出有关服务器IP地址的一些信息。这下子,我们可算是挖到宝了。

神秘的/proc/net/tcp

那么这到底是个什么文件?/proc/net/tcp包含了与所有网络连接以及对应的接口有关的十六进制信息。这个文件的内容一般看起来类似这样:

其中每一项的含义较为晦涩。好在有kernel.org文档,借此我们顺利拿到了自己需要的信息。这些信息的含义如下:

我们重点关注了本地地址,也就是分配给服务器的IP地址。每个本地地址条目都是十进制IP地址值的十六进制表达形式,只不过顺序是反的。因此如果条目为AABBCCDD而对应的IP为a.b.c.d,那么AA=d,BB=c,以此类推。

我们从/proc/net/tcp文件中拿到了三个IP地址。一个是127.0.0.1,这没什么奇怪的。另一个是10.x.x.x,一个内部IP地址。还有一个可转换为192.x.x.x,这个地址引起了我们的关注,它属于一家云服务提供商。我们尝试着通过netcat建立SSH连接,成功了:

在成功建立SSH连接后,我们没有继续执行其他操作,而是将我们的发现报告给Hashnode团队。

谈谈LFI吧

作为Akamai安全运营响应中心成员,我每天都会看到数以百万计的LFI攻击,而SQL注入则不那么普遍,并且方法也更为集中。大家都认为SQL输入很普遍,那么为何LFI这个攻击载体现在发展这么快?答案很简单:LFI的实施更简单。Hashnode已经采取了各种正确的应对措施,并且更棒的是,他们可以阻止我们进一步的探索。毕竟我们也是偶然发现这个问题并且出于研究的目的进行了尝试。

如果攻击者怀揣恶意攻击一个目标,那么LFI可能是一种可以帮助攻击者获取敏感信息(例如源IP地址)的简单方式。成功的SQL注入攻击可能需要复杂的载荷,但如果使用LFI的方法,只需要一个几个字符大小的载荷就足以造成非常严重的破坏。

作为安全专家,我们比任何人都清楚,即便看起来最良性的“功能”也可以用来作恶。保持警惕(无论是在代码发布前还是发布后)是赢得战斗的秘诀。这次经历中最让我们感到震惊的地方在于,LFI攻击的数量如此众多!

总结

在信息安全界,保护敏感信息是一个老生常谈的问题。作为研究人员,我们非常清楚信息是如何被滥用的。有鉴于LFI攻击如此庞大的规模,这方面需要引起开发者和安全专家的广泛注意。

各种报错信息看似繁杂,但其中往往蕴含着很多有价值的内容,有心的攻击者完全可以借助这些内容发起不同类型的攻击。因此到底要在对外展示的错误信息中包含什么内容,开发者必须慎重考虑。

本文介绍的,通过Markdown导入和解析功能进行的本地文件包含攻击,这种方式可能适用于更多应用程序,只不过暂时还未被发现,但这只是时间问题。

Linux的某些文件包含了大量关键信息,攻击者可以借此进一步扩大攻击操作的影响力。例如上文介绍的例子中,我们就通过/proc/net/tcp文件获得了Hashnode所用云服务提供商的IP地址。因此对待这类文件同样需要慎重。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/244910.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装宝塔面板后k8s所在节点pod无法正常工作解决方法,kubernetes k8s 与宝塔面板冲突解决方法

在实际项目过程中我们使用了k8s 在生产环境中运行管理服务。 但是对服务器的状态管理我们使用了宝塔面板进行 K8s 版本1.2.8 宝塔面板 版本 8.05 操作步骤是这样的。 1.完成1.2.8 k8s的节点安装,并正常运行服务。 过程略 2.安装宝塔面板 ​ yum install -y …

vue中图片不显示问题 - vue中静态资源加载

文章目录 vue中图片不显示问题静态资源URL 转换规则webpack 静态资源处理 图片不显示问题问题描述解决办法1:使用require引入require is not defined 解决办法2:使用import引入解决办法3:将图片放进公共文件夹static或public vue中图片不显示…

PHP中一些特征函数导致的漏洞总结

第一部分: 特征函数 接触到几个常用的函数: \\ \\\ md5 intval strpos in_array preg_match str_replacephp用这些函数实现过滤一些代码,漏洞可能有一些特性,利用这些特征代码进行对比;账号密码对比;强制检…

ChatGPT无法胜任的五种编程任务

我喜欢把ChatGPT看作是StackOverflow的智能版,它大有帮助,但短期内不会取代专业人士。作为一名前数据科学家,ChatGPT问世后,我花了大量时间来试用它。其编程能力确实给我留下了深刻的印象。它可以从零开始生成非常有用的代码&…

核桃的数量---蓝桥杯

思路&#xff1a; 题目所代表的意思就是a,b,c这三个必须是核桃数量的因子&#xff0c;即a,b,c三个的最小公倍数 #include <iostream> #include <algorithm> using namespace std; // int main() { int a,b,c;cin>>a>>b>>c;int da*b/__gcd(a,b…

大数据处理,Pandas与SQL高效读写大型数据集

大家好&#xff0c;使用Pandas和SQL高效地从数据库中读取、处理和写入大型数据集&#xff0c;以实现最佳性能和内存管理&#xff0c;这是十分重要的。 处理大型数据集往往是一项挑战&#xff0c;特别是在涉及到从数据库读取和写入数据时。将整个数据集加载到内存中的传统方法可…

antdesignvue中使用VNode写法

1、使用场景 如图&#xff1a;消息提示框中&#xff0c;将数据中的数据单独一行显示 2、代码 let errorList res.result; //后端返回的数据例&#xff1a; ["1. 数据格式不正确","2. 数据已存在"]if(errorList&&errorList.length!0){this.$notif…

k8s的图形化工具---rancher

声明式&#xff1a;yaml文件 陈述式&#xff1a;命令行 k8s的图形化工具---rancher racher是一个开源的企业级多集群的k8s关联平台。 rancher和k8s区别&#xff1a; 都是为了容器的调度和编排系统&#xff0c;但是rancher不仅能调度&#xff0c;还能管理k8s集群&#xff0…

mac电脑安卓文件传输工具:Android File Transfer直装版

Android File Transfer&#xff08;AFT&#xff09;是一款用于在Mac操作系统上与Android设备之间传输文件。它允许用户将照片、音乐、视频和其他文件从他们的Android手机或平板电脑传输到Mac电脑&#xff0c;以及将文件从Mac上传到Android设备。 下载地址&#xff1a;https://w…

Unity New Input System 及其系统结构和源码浅析【Unity学习笔记·第十二】

转载请注明出处&#xff1a;&#x1f517;https://blog.csdn.net/weixin_44013533/article/details/132534422 作者&#xff1a;CSDN|Ringleader| 主要参考&#xff1a; 官方文档&#xff1a;Unity官方Input System手册与API官方测试用例&#xff1a;Unity-Technologies/InputS…

【项目日记(四)】第一层: 线程缓存的具体实现

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:项目日记-高并发内存池⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你做项目   &#x1f51d;&#x1f51d; 开发环境: Visual Studio 2022 项目日…

CC工具箱使用指南:【Excel导出图片】

一、简介 这是一个有点娱乐向的小工具。作用就是将Excel的内容导出成一个JPG图片&#xff0c;目前只针对Excel中的第一个sheet表。 说不出来实际作用在哪里&#xff0c;不过把一个长表快速导出图片&#xff0c;有时候也挺有意思&#xff0c;有兴趣可以试试。 二、工具参数介绍…

MySQL-进阶-索引

一、索引概述 1、介绍 2、有误索引搜索效率演示 3、优缺点 二、索引结构 1、B-Tree&#xff08;多路平衡查找树&#xff09; 2、BTree 3、Hash 三、索引分类 四、索引语法 1、语法 2、案例 五、SQL性能分析 1、查看执行频次 2、慢查询日志 3、show-profile 4、explain

【目标跟踪】多相机环视跟踪

文章目录 一、前言二、流程图三、实现原理3.1、初始化3.2、输入3.3、初始航迹3.4、航迹预测3.5、航迹匹配3.6、输出结果 四、c 代码五、总结 一、前言 多相机目标跟踪主要是为了实现 360 度跟踪。单相机检测存在左右后的盲区视野。在智能驾驶领域&#xff0c;要想靠相机实现无…

新能源、新智造、新技术、新未来2024上海国际氢能产业展览会7月魔都开展!

氢能作为一种来源丰富、绿色低碳、应用广泛的二次能源&#xff0c;是实现可再生能源大规模消纳&#xff0c;电网大规模调峰和跨季节、跨地域储能的重要途径&#xff0c;对构建我国新型电力系统和实现碳达峰碳中和目标具有重要意义。 为落实国家关于发展氢能产业的决策部署&…

Springboot+vue的科研工作量管理系统的设计与实现(有报告),Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的科研工作量管理系统的设计与实现&#xff08;有报告&#xff09;&#xff0c;Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的科研工作量管理系统的设计与实现…

首批!鸿蒙千帆起,生态全面启动

在近日举办的鸿蒙生态千帆启航仪式上&#xff0c;华为常务董事、终端BG CEO余承东表示&#xff0c;鸿蒙生态设备已经增至8亿 &#xff0c;将打开万亿产业新蓝海。 在本次论坛上&#xff0c;华为宣布HarmonyOS NEXT鸿蒙星河版&#xff08;开发者预览版&#xff09;已面向开发者…

初识计算机网络 | 计算机网络的发展 | 协议初识

1.计算机网络的发展 “矛盾是普遍存在的&#xff0c;矛盾是事物联系的实质内容和事物发展的根本动力&#xff01;” 计算机在诞生之初&#xff0c;在军事上用来计算导弹的弹道轨迹&#xff01;在发展的过程中&#xff08;商业的推动&#xff0c;国家政策推动&#xff09;&…

NTFS 磁盘管理 :NTFS Disk by Omi NTFS

NTFS Disk by Omi NTFS是一款专为Mac系统设计的NTFS文件系统读写解决方案的工具。它可以帮助Mac用户方便地访问和管理NTFS格式的硬盘、U盘、移动硬盘以及其他存储设备&#xff0c;提供高效稳定的NTFS卷管理功能。 NTFS 磁盘管理 &#xff1a;NTFS Disk by Omi NTFS 该软件的主…

web项目开发的基本过程

一、背景 web项目开发基本过程一般由需求分析&#xff0c;概要设计&#xff0c;详细设计&#xff0c;数据库设计&#xff0c;编码&#xff0c;测试&#xff0c;发布上线这几个过程。这就是经典的瀑布模型。但是随着系统的复杂度越来越高&#xff0c;团队人员技术栈分工越来越小…