热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PwningaServerusingMarkdown

背景介绍Hashnode是一个面向开发人员的博客平台,您可以在其中使用自定义域免费托管您的博客,这包含许多功能,其中一项功能是BulkMarkdownImporter当我将我的

背景介绍

Hashnode是一个面向开发人员的博客平台,您可以在其中使用自定义域免费托管您的博客,这包含许多功能,其中一项功能是"Bulk Markdown Importer"

当我将我的博客从Jekyll迁移到Hashnode时,我正在寻找一个导入功能,幸运的是Hashnode有一个markdown导入器,允许批量导入markdown帖子,但需要采用某种特定格式,出于某种原因,我在导入帖子时不断出错,我无法弄清楚,因为UI上没有描述性错误,然后我查看了我的Burp中的响应,就在那时我注意到了导致我写这篇博客的Bug。

这受到本地文件包含漏洞(LFI)的影响,该漏洞允许我们从服务器获取内部文件,我的伙伴Adhyayan通过查找Cloudflare背后服务器的实际IP将其升级为 RCE,以下是我们如何升级易受攻击的Markdown解析器中的错误以在服务器上执行代码

漏洞利用

寻找 LFI

Markdown有自己的语法和功能,允许在文件中引用图像,要在博客文章或任何MD文件中包含图像,以下是常用语法:

![image.png](https://image.url/image_file.png)

Hashnode的Bulk Importer接受一个包含所有要发布的Markdown帖子的ZIP文件,这是他们的示例帖子格式的外观:

---title: "Why I use Hashnode"date: "2020-02-20T22:37:25.509Z"slug: "why-i-use-hashnode"image: "Insert Image URL Here"---Lorem ipsum dolor sit amet

需要将此.md文件压缩到存档中才能上传到平台,这是响应在Burp Suite中的样子

 没什么有趣的,这只是一个正常的markdown解析帖子格式,这让我们想知道 Markdown功能允许用户通过指定路径来插入图像的请求处理

![anotherimage.png](/images/blog.jpg)

在Burp Suite中观察时,令人惊讶的是Hashnode触发了一个ENOENT错误,指出它无法找到该文件,如下面的屏幕截图所示

从这里开始只需连接点以从服务器获取内部文件,我们决定给出一个实际文件的位置,而不是一个不存在的路径,就像/etc/passwd希望它能在响应中给我们文件内容一样

这是我们用作最终有效负载的markdown文件:

---title: "Why I use Hashnode"date: "2020-02-20T22:37:25.509Z"slug: "why-i-use-hashnode"image: "Insert Image URL Here"---![notimage.png](../../../../../etc/passwd)

这一次应用程序尝试使用路径中指定的位置来获取图像,而不是直接使用Markdown正文中显示的图像,应用程序遍历目录并为我们获取passwd文件,但它没有将内容显示在响应中,而是将文件上传到Hashnode CDN

该contentMarkdown参数为CDN URL提供了上传内部文件的路径,我们能够直接下载/etc/passwd

由于我们已经从passwd文件中获得了用户的名称和他们的主目录的路径,因此我们考虑将其升级为进一步尝试RCE

创建SSH密钥时它会存储在~/.ssh/id_rsa私有密钥和~/.ssh/id_rsa.pub公共密钥的默认位置,我们相应地修改了我们的有效负载以从服务器获取私钥并且很幸运,它也被上传到CDN

![notimage.png](../../../../../home/username/.ssh/id_rsa)

现在我们进入服务器所需要做的就是找到IP地址,因为它隐藏在Cloudflare 后面

服务器IP和SSH

我们开始寻找历史DNS记录以找到IP地址,但没有成功,这就是Adhyayan进来的地方,之后我们查看了文件/proc/net/tcp,这些/proc接口提供有关当前活动 TCP连接的信息,这是它在我的服务器上的外观:

kernel.org文档很好地解释了该表

https://www.kernel.org/doc/Documentation/networking/proc_net_tcp.txt

我们感兴趣的列是本地地址,这些地址存储为反向IP地址的十进制表示法的十六进制值,这是我在互联网上找到的一个漂亮的单行代码,可以完成所有工作并以人类可读的格式返回

grep -v "rem_address" /proc/net/tcp | awk  '{x=strtonum("0x"substr($2,index($2,":")-2,2)); for (i=5; i>0; i-=2) x = x"."strtonum("0x"substr($2,i,2))}{print x":"strtonum("0x"substr($2,index($2,":")+1,4))}'

这有效地为我们提供了我们正在寻找的东西-服务器的IP地址以及端口22,它的外观如下:


文末小结

谁会想到 Markdown解析器可以导致服务器上的命令执行呢?当与其他漏洞结合使用时,即使是最小的低严重性问题也可能升级,在这里描述性堆栈跟踪中的一个简单信息泄露错误帮助我们找出了Markdown解析器的行为,这反过来又允许我们从服务器获取内部文件

在代码中实现正确的错误处理和输入验证并在后端记录描述性错误始终是一个好主意,Hashnode团队修复了Markdown解析器中的漏洞,并轮换了他们所有的私钥以修复该错误

相信用户的输入总是一个坏主意


推荐阅读
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
author-avatar
阿尔及利亚奥兰叉
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有