wordwrap php,PHP wordwrap()缓冲区溢出漏洞

%3A%2F%2F%2Fhtml%2FPHPjichubiancheng%2Fjichuwenzhang%2F20071210%2F1210I200773.html&w=336&h=280&re=1024x768&sz=36&r=http%3A%2F%2F%2Fhtml%2FPHPjichubiancheng%2Fjichuwenzhang%2Flist_20_12.html&cg=e43509b174cda99a75b1e4ce1eea1590&prn=65757765&cas=prn&cah=734&caw=1024&ccd=32&ctz=8&chl=0&cja=1&cpl=0&cmm=0&cf=9.0&sx=307&sy=583&cbw=1003&cbh=578

受影响系统:

PHP PHP 5.1.2

PHP PHP 4.4.2

描述:

--------------------------------------------------------------------------------

CVE(CAN) ID: CVE-2006-1990,CVE-2006-1991

php程序员站

PHP是广泛使用的通用目的脚本语言,特别适合于Web开发,可嵌入到HTML中。

php程序员之家

PHP的wordwrap()函数实现上存在漏洞,远程攻击者可能利用此漏洞对PHP执行堆溢出攻击,可能导致拒绝服务或执行任意指令。 phperz.com

由于错误的整数计算,如果向PHP的wordwrap()函数发送了超长字符串的话,就会触发堆溢出漏洞。在下文的[1]或[2]中,整数“alloced”是从用户输入字符串的长度计算出来的。如果设置了长字符串(大约1MB)的话在乘法操作时就会溢出产生小正整数,在[3]中使用进行内存分配。在[4]中用户输入拷贝到新分配的缓冲区“newtext”,而这个缓冲区过小,在memcpy()中会溢出。拷贝大小“current”会包含用户提供字符串“text”的长度。

php-4.4.2/ext/standard/string.c中的有漏洞代码:

php程序员站

--------------------------------------------------------

PHP_FUNCTION(wordwrap)

{

const char *text, *breakchar = "\n";

char *newtext;

int textlen, breakcharlen = 1, newtextlen, alloced, chk;

long current = 0, laststart = 0, lastspace = 0;

long linelength = 75;

zend_bool docut = 0;

...

if (linelength > 0) {

chk = (int)(textlen/linelength + 1);

[1] alloced = textlen + chk * breakcharlen + 1;

} else {

chk = textlen;

[2] alloced = textlen * (breakcharlen + 1) + 1;

}

if (alloced <= 0) {

RETURN_FALSE;

}

[3] newtext = emalloc(alloced);

php程序员站

...

if (laststart != current) {

[4] memcpy(newtext+newtextlen, text+laststart, current-laststart);

newtextlen += current - laststart;

}

...

}

--------------------------------------------------------

如果memory_limit的值过高,还可能导致内存拒绝服务。 phperz.com

链接:http://secunia.com/advisories/19803/print/

http://www.infigo.hr/hr/in_focus/advisories/INFIGO-2006-04-02

http://secunia.com/advisories/23155/

http://security.gentoo.org/glsa/glsa-200605-08.xml

ftp://patches.sgi.com/support/free/security/advisories/20060701-01-U.asc

*>

php程序员站

测试方法:

-------------------------------------------------------------------------------- php程序员之家

警 告

phperz.com

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负! php程序员站

$a = str_repeat ("A",438013);

$b = str_repeat ("B",951140);

wordwrap ($a,0,$b,0);

?>

www~phperz~com

建议:

--------------------------------------------------------------------------------

厂商补丁: php程序员之家

PHP

---

目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:

php程序员之家

RedHat

------

RedHat已经为此发布了安全公告(RHSA-2006:0501-02,RHSA-2006:0568-01)以及相应补丁:

RHSA-2006:0501-02:Moderate: php security update

链接:

RHSA-2006:0568-01:Moderate: php security update

链接: php程序员站

SGI

---

SGI已经为此发布了一个安全公告(20060701-01-U)以及相应补丁:

20060701-01-U:SGI Advanced Linux Environment 3 Security Update #60

链接:ftp://patches.sgi.com/support/free/security/advisories/20060701-01-U.asc

Gentoo

------

Gentoo已经为此发布了一个安全公告(GLSA-200605-08)以及相应补丁:

GLSA-200605-08:PHP: Multiple vulnerabilities

链接:http://security.gentoo.org/glsa/glsa-200605-08.xml php程序员之家

所有PHP用户都应升级到最新版本:

# emerge --sync

# emerge --ask --oneshot --verbose dev-lang/php

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值