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

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

分类:脚本攻防 · 发布时间:2022-10-14 06:36 · 阅读:8395

intval函数有个特性:"直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时(\0)结束转换",在某些应用程序里由于对intval函数这个特性认识不够,错误的使用导致绕过一些安全判断导致安全漏洞

一、描述
  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
标签:
intval

相关文章

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

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

PHPCMS 信息泄露以及任意删除文件漏洞

在图片剪切那里,先读取cookie中信息,然后直接删除文件,造成删除任意文件漏洞

MYSQL_OUTPUT 脱裤(脱库)通用脚本(修正版)

感谢各位的测试 , 下次再也不发垃圾脚本了,之前那个大家转走的都修正下吧 ,问题太多了. (几乎都没测试过)下面这个是我重新修改下的.

PHP多字节编码漏洞小结

这篇文章主要介绍了PHP多字节编码漏洞小结,需要的朋友可以参考下

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

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

返回分类 返回首页