seacms<=9.92前台getshell

漏洞原理

mysql语句执行错误,fwrite函数写入报错数据至php文件中.

参考链接:https://xz.aliyun.com/t/6191

变量注册

将传入的全局数组GET、POST、COOKIE循环遍历置为变量

1567588663074

漏洞分析

/comment/api/index.php第18行进入ReadData函数,将定义的全局变量$rlist经implode字符操作赋值为$x

1567589057585

跟进Readmlst函数,会对$rlist进行危险字符过滤,调用str_ireplace过滤,可以使用双写绕过。

1567590104592

跟进Readlist函数, sql执行语句$ids使用小括号包裹,并没有使用引号

1567590157080

Excute函数执行sql语句,sql.clsss.php第256行,如果sql执行出错,会执行DisplayError.传入参数为$this->queryString带有sql语句.

1567590271276

DisplayError将$msg参数写入文件,php文件格式

1567590480904

复现

1567591016822