BlogEngine.NET RCE analysis

简介

BlogEngine是一套开源的ASP.NET博客系统。该系统支持Ajax评论、自定义主题等。 BlogEngine.NET 3.3.6.0及之前版本中存在远程代码执行漏洞,该漏洞源于网络系统或产品未能正确地过滤资源或文件路径中的特殊元素。攻击者可利用该漏洞访问受限目录之外位置的资源文件执行特定代码

影响版本

BlogEngine.NET <= 3.3.6.0

下载程序visual studio项目解决方案(地址见文末)打开BlogEngine.NET/Custom/Controls/PostList.ascx.cs定位到line:125

我们看到此处对我们传入的theme参数进行了处理,我们在此处打入一个断点将程序跑起来

根据作者的概述我们在利用之前要先将特定的文件命名为PostView.ascx即用户自定义控件上传到/App_data/files目录下并且启动一个监听用于接收shell,此处我们使用nc启动一个4445端口监听,修改poc文件内的IP地址。关于示例文件作者已经给出我们只需重命名即可(地址见文末)

登录网站后台访问http://localhost/admin/app/editor/editpost.cshtml上传poc文件

接下来我们访问http://localhost/?theme=../../App_Data/files

我们看到程序断在了之前设置的断点处

我们看一下程序做了什么

首先程序接收到前端传来的theme并进行占位符的替换赋值给path,随后判断此路径是否存在,不存在则使用内置的文件。这里我们可以看到不管是自定还是内置的路径最后都是加载PostView.ascx用户控件文件,这也就是为什么要将poc命名为此名称的原因

此时程序得到的path为/Custom/Themes/../../App_Data/files/PostView.ascx,由于未进行安全过滤这样就可以跳出themes目录访问上传的控件文件

随后通过loadcontrol加载资源文件

nc反弹回shell

参考链接

https://github.com/rxtur/BlogEngine.NET

https://www.exploit-db.com/exploits/46353