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

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

mysql的user.MYD数据库连接密码hash值无法用winhex打开等

提权时,当下载mysql的user.MYD数据库连接密码hash值无法用winhex等十六进制编辑器查看时
收藏 0 赞 0 分享

反常规and 1=1的or 1=2注入技巧

春节呆在家里上网,我表哥突然找我说要一个DJ网站的VIP会员,说搞定后请我吃KFC,于是就答应了。
收藏 0 赞 0 分享

利用星外虚拟机的入侵 经验分析

近日帮朋友搞一个小站,本来以为很快就能搞定 结果花了不少时间。不得不说能力有限呀。
收藏 0 赞 0 分享

webshell提权经验分享

可能有很多人,看到关闭了wscript.shell,就感觉没提权的希望了。就会放弃。
收藏 0 赞 0 分享

MSSQL中两种特别的执行命令的方法

现在很多计算机可以执行命令的方法都被人封得抓狂,就算有幸可以执行,也有可能CMD被改了权限,所以我推荐的办法是有能力的同学自己开发DLL,然后把DLL写入到对方计算机中,再注册为存储过程.
收藏 0 赞 0 分享

Ecshop后台拿shell方法总结

Ecshop后台拿shell方法总结,正在使用ecshop建站的朋友一定要注意升级。
收藏 0 赞 0 分享

Z-blog后台拿SHELL方法总结

Z-blog后台拿SHELL方法很多关键看你有没有本事进后台,逍遥复仇整理三种常用简单后台拿SHELL的方法供大家参考
收藏 0 赞 0 分享

php注入基本步骤小结

php注入基本步骤小结,我们在编写代码的时候一定要注意注入点。
收藏 0 赞 0 分享

upfile asp文件上传 又一奇迹般的突破

不知道各位。在上传的时候。 有没需要过。 一个上传。 不修改名字。。然后上传目录已经被程序所定义了。
收藏 0 赞 0 分享

浅说双引号被过滤时一句话的插入与防范

昨日小刀刀在群里抛了一个问题,说后台插入一句话老是出错,群里的朋友出了很多主意,但是最后还是没搞定。后来这小子把问题抛给了我,昨天我就测试了一下。这里把情况介绍给大家。
收藏 0 赞 0 分享
查看更多