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

所属分类: 网络安全 / 脚本攻防 阅读数: 488
收藏 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
更多精彩内容其他人还在看

PHP Mysql 密码暴力破解代码,本机暴力破解 3306 端口

PHP Mysql 密码暴力破解,本机暴力破解 3306 端口,源码。代码简单的不能再简单了,就不解释了,功能很简单
收藏 0 赞 0 分享

PHP+MySQL手工注入语句大全 MySQL手工注入语句总结

PHP + MySQL 手工注入语句大全,MySQL 手工注入语句总结,MySQL,注入语句。暴字段长度 匹配字段 暴字段位置 利用内置函数暴数据库信息 不用猜解可用字段暴数据库信息(有些网站不适用): 操作系统信息
收藏 0 赞 0 分享

PHP 双字节、宽字节编码漏洞

PHP 双字节、宽字节编码漏洞。看了《黑防09精华》这篇《双字节编码 php的隐形杀手》,记录一下。还是用一个demo.php显示效果
收藏 0 赞 0 分享

ODOR1–PHP extract 后门使用方法

这篇文章主要为大家介绍了PHP extract 函数后门的使用方法,大家在检查后门的时候可以多关注一下,需要的朋友可以参考下
收藏 0 赞 0 分享

过安全狗/D盾/360的PHP一句话木马与防范方法

这篇文章主要介绍了过安全狗/D盾/360的PHP一句话木马,需要的朋友可以参考下
收藏 0 赞 0 分享

分享PHP场景中getshell防御思路

本文主要分享一下防御思路。防御方案主要想解决的问题是getshell、主机敏感文件泄漏等问题
收藏 0 赞 0 分享

SQL注入测试实例分析

这篇文章主要为大家介绍了SQL注入测试实例分析,对于数据库安全非常重要,需要的朋友可以参考下
收藏 0 赞 0 分享

帝国备份王(Empirebak)万能cookie及拿shell方法与防御

这篇文章主要介绍了帝国备份王(Empirebak)万能cookie及拿shell方法与防御,需要的朋友可以参考下
收藏 0 赞 0 分享

各种网页挂马方式原理揭密(iframe挂马,script 挂马,图片伪装挂马等)

现在,网站经常被各种网页挂马,为了保障大家网站的安全和互联网用户的安全,有必要对网页挂马有所了解。查了一些资料,由于存在大量的黑客软件,一个菜鸟只需几分钟就可以编写一个木马网页,对别人的网站进行挂马了
收藏 0 赞 0 分享

SQL注入攻击(攻击与防范)

SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉
收藏 0 赞 0 分享
查看更多