php intval()函数使用不当的安全漏洞分析

所属分类: 网络安全 / 脚本攻防 阅读数: 380
收藏 0 赞 0 分享
一、描述
  intval函数有个特性:"直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时(\0)结束转换",在某些应用程序里由于对intval函数这个特性认识不够,错误的使用导致绕过一些安全判断导致安全漏洞.
二、分析 php程序员站

复制代码
代码如下:

  PHP_FUNCTION(intval)
  {
  zval **num, **arg_base;
  int base;
  switch (ZEND_NUM_ARGS()) {
  case 1:
  if (zend_get_parameters_ex(1, &num) == FAILURE) {
  WRONG_PARAM_COUNT;
  }
  base = 10;
  break;
  case 2:
  if (zend_get_parameters_ex(2, &num, &arg_base) == FAILURE) {
  WRONG_PARAM_COUNT;
  }
  convert_to_long_ex(arg_base);
  base = Z_LVAL_PP(arg_base);
  break;
  default:
  WRONG_PARAM_COUNT;
  }
  RETVAL_ZVAL(*num, 1, 0);
  convert_to_long_base(return_value, base);
  }
  Zend/zend_operators.c->>convert_to_long_base()
  ……
  case IS_STRING:
  strval = Z_STRVAL_P(op);
  Z_LVAL_P(op) = strtol(strval, NULL, base);
  STR_FREE(strval);
  break;

  当intval函数接受到字符串型参数是调用convert_to_long_base()处理,接下来调用Z_LVAL_P(op) = strtol(strval, NULL, base);通过strtol函数来处理参数。
  函数原型如下:
  long int strtol(const char *nptr,char **endptr,int base);
  这个函数会将参数nptr字符串根据参数base来转换成长整型数,参数base范围从2至36,或0.参数base代表采用的进制方式,如base值为10则采用10进制,若base值为16则采用16进制等。
  流程为:
  strtol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时(\0)结束转换,并将结果返回。
  那么当intval用在if等的判断里面,将会导致这个判断实去意义,从而导致安全漏洞.
  三、测试代码

复制代码
代码如下:

  //intval.php
  $var="20070601";
  if (intval($var))
  echo "it's safe";
  echo '$var='.$var;
  echo "";
  $var1="1 union select 1,1,1 from admin";
  if (intval($var1))
  echo "it's safe too";
  echo '$var1='.$var1;
  ?>

  四、实际应用
  WordPress <= 2.0.6 wp-trackback.php Zend_Hash_Del_Key_Or_Index / sql injection exploit
更多精彩内容其他人还在看

用JavaScript防止网站被挂IFRAME木马的方法

网站挂马的最常见形式就是IFRAME挂马,即在你的网页中加入一段框架网页代码,这个框架网页中的内容便是带木马病毒的网页。
收藏 0 赞 0 分享

ewebeditor 上传遇到防火墙限制的解决办法 图文

今天看了前面的原创帖子说到eweb遇到asp,asa,cer被限制访问拿不了shell,正好这个问题我是知道的。应该很多大牛都会的吧,估计还是有些不会的,就将就看看吧
收藏 0 赞 0 分享

Phpcms本地包含漏洞导致的写shell漏洞和删除任意文件漏洞

phpcms本地包含类漏洞,如果该文件包含了/include/common.inc.php就可以包含执行很多后台才能执行的文件了
收藏 0 赞 0 分享

收藏 0 赞 0 分享

php版shell.users加管理员帐号的方法

09年的时候 LCX 写出了 js版 和vbs 版的shell.users 加管理员帐号的方法,后来我就想把它改成PHP 版,由于对代码分析得不够准确,所以到最近才写出来
收藏 0 赞 0 分享

讯时系统(xuas)最新通杀漏洞0day图文说明

讯时系统(xuas)最新通杀漏洞0day图文说明,使用讯时网站管理系统的朋友可以参考下。
收藏 0 赞 0 分享

讯时漏洞一小结

在网上也有什么讯时三板斧的文章..但我个人觉得有时候靠那三种还是入侵不了(随着版本的更新)
收藏 0 赞 0 分享

DedeCms V5.6漏洞 变量未初始化 导致鸡助漏洞

DedeCMS内容管理系统软件采用XML名字空间风格核心模板:模板全部使用文件形式保存,对用户设计模板、网站升级转移均提供很大的便利
收藏 0 赞 0 分享

dedecms v5.6 GBK 注入漏洞利用(member/index.php)

会员中心首页(../member/index.php)函数过滤不严格造成盲注,数据库错误模式,XSS
收藏 0 赞 0 分享

DEDECMS 5.6最新Get Shell漏洞 DEDECMS 5.3/5.6

DedeCms 基于PHP+MySQL的技术开发,支持Windows、Linux、Unix等多种服务器平台,从2004年开始发布第一个版本开始,至今已经发布了五个大版本。
收藏 0 赞 0 分享
查看更多