基于ThinkPHP的2个CMS后台GetShell利用

* 本文作者:Mochazz,本文属FreeBuf原创奖励计划,未经许可禁止转载

文章作者:Mochazz

思路作者:szrzvdny

0×00 前言

ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的,由于其简单易用,很多cms都基于该框架改写。然而 Thinkphp在缓存使用却存在缺陷,生成缓存时,Thinkphp会将数据序列化存进一个php文件,这就产生了很大的安全问题。

0×01 环境搭建

工具

phpstudy

http://www.phpstudy.net/phpstudy/phpStudy20161103.zip

Jymusic cms

http://www.jyuu.cn/topic/t/41

xyhcms

https://pan.baidu.com/s/1qYhTKc8

搭建

安装好phpstudy,把jymusic目录下的所有文件及文件夹拷贝到phpstudy的www目录下,浏览器访问http://localhost/install.php,然后配置一下数据库信息即可。

基于ThinkPHP的2个CMS后台GetShell利用_第1张图片

基于ThinkPHP的2个CMS后台GetShell利用_第2张图片

另外xyhcms安装类似,这里不赘述。

0×02本地后台getshell

Jymusic cms

先看一下管理员登录页面的源代码,看到核心入口为ThinkPHP.php,找到并打开查看

基于ThinkPHP的2个CMS后台GetShell利用_第3张图片

发现应用缓存目录为Temp文件夹

基于ThinkPHP的2个CMS后台GetShell利用_第4张图片

打开Temp文件夹会发现有很多缓存文件,我们随便打开即可看看,可以发现里面的内容有点像网站配置信息,只不过是序列化后的结果

基于ThinkPHP的2个CMS后台GetShell利用_第5张图片

基于ThinkPHP的2个CMS后台GetShell利用_第6张图片

所以我们在后台的网站设置处插入一句话,就会被ThinkPHP写入缓存文件。而且这个缓存文件的文件名都是固定不变的,这也是导致getshell的原因。

基于ThinkPHP的2个CMS后台GetShell利用_第7张图片

基于ThinkPHP的2个CMS后台GetShell利用_第8张图片

基于ThinkPHP的2个CMS后台GetShell利用_第9张图片

成功插入后,我们来执行一下phpinfo()函数看看,菜刀也能成功连接

基于ThinkPHP的2个CMS后台GetShell利用_第10张图片

基于ThinkPHP的2个CMS后台GetShell利用_第11张图片

基于ThinkPHP的2个CMS后台GetShell利用_第12张图片

基于ThinkPHP的2个CMS后台GetShell利用_第13张图片

xyhcms

xyhcms和Jymusic cms一样使用了ThinkPHP框架,这里不赘述,直接给出缓存文件的位置

基于ThinkPHP的2个CMS后台GetShell利用_第14张图片

基于ThinkPHP的2个CMS后台GetShell利用_第15张图片

xyhcms其实还有一个漏洞,在模板管理处可以添加一个php后缀的模板,文件内容也未做任何检测过滤。下面是成功getshell过程

基于ThinkPHP的2个CMS后台GetShell利用_第16张图片

基于ThinkPHP的2个CMS后台GetShell利用_第17张图片

0×03总结

其实现在很多小型网站都是基于ThinkPHP框架开发的,很多都存在这种问题。当你找不到上传点的时候,可以试试这种方法。当然,肯定有人会说,这个要后台登录才能利用,你只是在本地复现,都没实战过,说个锤子。其实,我还真的实战过,只是不方便贴图,使用弱口令做密码还是挺多的,所以锤子未必不可用。还有,有的网站,虽然说你用很简单的方法getshell,但是其实可以研究的东西还有很多,比如你getshell之后发现权限不够,那就可以试试提权,例如用udf提权、使用mysql远程连接结合sqlmap提权等等,虽然有些方法很早就有了,但是并不是每个人都会,而且一些老的思路还有可能启发你新的思考,继续加油吧!

参考文章:

ThinkPHP5.0.10-3.2.3缓存函数设计缺陷可导致Getshell

* 本文作者:Mochazz,本文属FreeBuf原创奖励计划,未经许可禁止转载

发表评论

已有 10 条评论

  • 15903467860  (1级)  2017-09-26 回复 1楼

    老哥,jymusic的这个漏洞补了吗?我下载的源文件内容根目录和你的都不一样,temp文件都找不到,好友thinkphp.php文件也没了

    亮了( 2)
  • 戒了  (1级)  2017-09-26 回复 2楼

    鸡肋

    亮了( 0)
  • 蓝辰  (1级) 做个有趣的IT男。  2017-09-26 回复 3楼

    Po主这种情况很少能实现,毕竟thinkPHP缓存目录文件名是随机的,无法猜测到。。

    亮了( 1)
  • wxxxxxx  2017-09-26 回复 4楼

    哥,重点来了,你shell路径哪里找,求姿势。

    亮了( 0)
  • Mochazz  (2级) 这家伙太懒了,还未填写个人描述!  2017-09-26 回复 5楼

    jymusic cms实战案例可以看这篇:https://bbs.ichunqiu.com/thread-27407-1-1.html

    亮了( 0)
  • sauren  (1级) dodo  2017-09-26 回复 6楼

    现在缓存PHP文件,第一句话肯定会写

    亮了( 0)
  • Mochazz  (2级) 这家伙太懒了,还未填写个人描述!  2017-09-26 回复 7楼

    我遇到的网站是JYmusic_V1.1.1,所以我下载了JYmusic_V1.1.1的源码,它的缓存文件名不会变,xyhcms用的是xyhcms_v3.2.170614,cms基于ThinkPHP5.0.10-3.2.3会受影响

    亮了( 0)
  • peaceoftheworld  (1级)  2017-09-26 回复 8楼

    别人找出来的框架底层漏洞,您落实到基于框架的cms就不算抄袭了?提都不提框架漏洞

    亮了( 0)
  • 974168625  (1级)  2017-09-26 回复 9楼

    欢迎大家阅读 看我如何写入一句话之如何找不到这一句话之求用莫得getshell

    亮了( 0)
  • 974168625  (1级)  2017-09-26 回复 10楼

    freebuf竟然还收这种文章?tp框架的鸡肋漏洞 还自命getshell某两个cms 。。。。那么求问我的dedecms后台getshell求问收不?

你可能感兴趣的:(php-hack)