我是如何通过CSRF拿到Shell的

织梦内容管理系统(DedeCms) 以简单、实用、开源而闻名,是国内最知名的PHP开源网站管理系统,也是使用用户最多的PHP类CMS系统,在经历多年的发展,目前的版本无论在功能,还是在易用性方面,都有了长足的发展和进步,DedeCms免费版的主要目标用户锁定在个人站长,功能更专注于个人网站或中小型门户的构建,当然也不乏有企业用户和学校等在使用本系统。

最近我在搭建这个系统的时候偶然间发现了一个有趣的现象,织梦的后台竟然有一个可以直接执行SQL语句的功能,出于职业敏感,能直接执行SQL语句的地方往往会有一些漏洞。又经过一番查找发现了它后台存在一个CSRF的漏洞,一般情况下像这种漏洞都是不怎么能引起人们的关注的,毕竟是要通过交互才能起作用,而且起的作用还不大。以为到此就结束了吗?并不是。

这里根本形不成一个有效的攻击链,不过我又发现了一个很有意思的地方,这个cms是可以在前台直接提交友链申请的,那么问题来了?你提交了友链申请管理员审核的时候怎么可能不去浏览一下你的网站。于是有了下面的一套getshell的流程。

受影响的版本<=官方最新版本(V57UTF8SP2)这是一个0day哦!!

实验环境 :win10,wamp

1.首先我们构造一个向数据库中插入SHELL语句的恶意页面

(这里我多次清除cookie,多次关闭浏览器进行测试发现,该页面的效果不受其他因素影响均可正常执行),这段代码的作用就是像数据库中插入我们的shell code。

页面的代码如下:

2.此时我将该页面放置在我自己的服务器上

这里就可以随便放置一个地方,为了更加形象,你可以在页面上做一些操作,比如加上JS代码使得管理员访问页面的时候不会跳转,这样更神不知鬼不觉了。

3.然后我去受害网站上提交一个友链申请

将我自己网站上的恶意页面链接填入。这个链接直接对应你构造好的恶意页面。

4.然后提交,等待管理员审核

管理员审核友链时定会查看友链所链接的内容。(管理员既然可以看到该链接证明此时一定处于登陆状态)

5.只要是管理员查看了我们申请友链的链接那么就触发了恶意代码的执行

此时我们可以看到数据库中被插入了恶意代码。这里的代码可以自定义,根据你想做的操作自定义就可以了。这里我就是做实验,就是用了<?php phpinfo() ?>

6.此时无论管理员通过或者是不通过,我们的代码已经插入

此时我们构造生成shell的恶意页面,页面代码如下,构造完成之后同样放在我们自己的服务器上。(这里构造时,我们需要知道网站的路径,这里知道相对路径或者时绝对路径都是可以的。路径的获取方式:一个网站的搭建大多数采用 phpstudy wamp 或者原生态的在PHP下的www目录,这里很好猜测。或者直接请求一个网站上不存在的资源一般会爆出相对路径,或者去访问一篇文章分析路径,再或者用AWVS直接拿到路径,反正这里获取路径的方式特别多)

下面这段代码的作用是把我们刚刚插入的shell code生成一个php页面。

7.此时我们如上步骤3所示,提交一个该页面的友链申请

当管理员查看该页面时触发代码的执行,在服务器端生成一个我们自定义名称的shell。然后我们去访问我们的SHELL。可以看到执行成功。

这就是在一次测试环境中找到的一个逻辑漏洞,有时候我们会经常发现一些微不足道的小漏洞之类的,单个的看起来是没有什么作用但是多个微不足道的小漏洞结合起来往往会收到超出预期的效果。

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2017-09-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

评测告诉你:那些免费代理悄悄做的龌蹉事儿

笔者2013年曾发表过一篇文章《免费代理服务器为何免费?》——文中提及代理服务器之所以免费,是因为其可以轻松浸染用户的上网行为并收集数据。而最新上线的Proxy...

3035
来自专栏Android开发实战

Android P新增检测项 应用热修复受重大影响

最近关于热修复崩溃在Android P 版本的内容持续增高,也许这个commit可以帮到你.

5143
来自专栏蓝天

选择设置好ext3日志模式

Linux是一种开放的、因Internet而产生的操作系统。Internet的发展、以网络为中心的计算模式如电子商务被迅速接受和普及,都为 Linux提供了更巨...

932
来自专栏喔家ArchiSelf

老曹眼中的缓存技术

缓存是系统快速响应中的一种关键技术,是一组被保存起来以备将来使用的东西,介于应用开发和系统开发之间,是产品经理们经常顾及不到的地方,算是技术架构中的非功能性约束...

1402
来自专栏腾讯云serverless的专栏

使用 SCF 无服务器云函数定时拨测站点并邮件告警

利用无服务器架构中提供的定时触发能力,在运维监控场景有很多种用处,例如定时备份、定时拨测、定时统计等。

9.5K2
来自专栏IT技术精选文摘

微服务架构中的进程间通信

介绍 在单体应用程序中,组件通过语言级的方法或函数调用进行彼此的调用。相比之下,基于微服务的应用程序是在多台机器上运行的分布式系统。每个服务实例通常是一个进程...

5205
来自专栏云计算教程系列

如何在Ubuntu 18.04上安装Python 3并设置本地编程环境

Python是一种灵活的多功能编程语言,可用于许多实例中,在脚本撰写,自动化,数据分析,机器学习和后端开发方面具有优势。1991年首次出版,其名称灵感来自英国喜...

7662
来自专栏翻译

在Ubuntu 14.04/14.10上搭建Minecraft Spigot服务器

本文介绍了如何在Ubuntu 14.04 / 14.10上搭建自己的Minecraft服务器,搭建一个让我们可以与朋友远程开黑的私服,甚至是搭建一个几百人的公共...

2112
来自专栏有趣的Python

最新Django2.0.1在线教育零基础到上线教程(十二)

演示地址: http://mxonline.mtianyan.cn 教程仓库地址1: https://github.com/mtianyan/DjangoGe...

3146
来自专栏腾讯移动品质中心TMQ的专栏

应用宝基于Robotium自动化测试(下)

基于Robotium自动化测试(上)》一文中小编介绍了框架选择、测试环境搭建、用例编写、跨应用处理等等内容,本文将承接上文,继续介绍测试报告生成、持续集成等等相...

1986

扫码关注云+社区

领取腾讯云代金券