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

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

Oracle的使用技巧以及脚本代码

 1. 如何查看ORACLE的隐含参数?   ORACLE的显式参数,除了在INIT.ORA文件中定义的外,在svrmgrl中用"show parameter *",可以显示。但ORACLE还有一些参数是以“_”,开头的。如我们非常熟悉... 查看详情
收藏 0 赞 0 分享

php包含漏洞替代技术的方法与介绍 php文件包含漏洞详解

================ php包含漏洞替代技术 ================ php开发者们犯得一个基本的错误是把一个不正当的变量传递给系统函数,特别是include()和require()这两个函数。 这个常见的错误导致了众所周知的远程文件包含漏洞和本地文件包含漏... 查看详情
收藏 0 赞 0 分享

一次奇遇的渗透

作者:y0umer   打开网站发现   习惯的加了一个引号   确定是注入以后直接丢啊D了。(我懒)   这不悲剧了么,猜不出表段??   扫扫目录看看。   发现del.asp打开看看。。   错误提示的是在查询表达式中"id=&q... 查看详情
收藏 0 赞 0 分享

mssql2005 DB权限导出一句话

网站路径也搞到了,本想使用差异备份,在数据库日志中插入一句话,然后备份到网站目录下拿shell的,估计是用户没有备份数据库的权限,但使用MSSQL2000的备份方法根本行不通,后来才想到MSSQL2005的备份和MSSQL2000有点不同。 后来在网上搜半天没有找到具体的备份语句... 查看详情
收藏 0 赞 0 分享

PHP木马大全 一句话的PHP木马的防范

php后门木马常用的函数大致上可分为四种类型:   1. 执行系统命令: system, passthru, shell_exec, exec, popen, proc_open   2. 代码执行与加密: eval, assert, call_user_func,base64_... 查看详情
收藏 0 赞 0 分享

PoisonIvy Rat 远程溢出实战

From&thx2:http://badishi.com/poison-ivy-exploit-metasploit-module/https://twitter.com/badishi这个Exploit已经集成在最新版本的Msf中了,老外的文章里也有源文件,可以修改后单... 查看详情
收藏 0 赞 0 分享

防止SQL注入攻击的一些方法小结

-----解决方案--------------------------------------------------------过滤URL中的一些特殊字符,动态SQL语句使用PrepareStatement.. ------解决方案-----------------------... 查看详情
收藏 0 赞 0 分享

脚本入侵 入侵ewebeditor编辑器一些技巧

eWebEditor编辑器 建议最好检测下admin_style.asp文件是否可以直接访问 直接到样式管理 默认后台地址:/ewebeditor/admin_login.asp 使用默认密码:admin/admin 或 admin/admin888 不行就默认数据库路径 eWe... 查看详情
收藏 0 赞 0 分享

脚本入侵 ASP网站入侵常用的一些技巧分享

如果是html格式的站我们先打开网站然后单击鼠标右键 按查看源文件-编辑-查找输入asp 看有没有网站ASP文件或ASP带参数1:注入点先把IE菜单=>工具=>Internet选项=>高级=>显示友好 HTTP 错误信息前面的勾去掉。否则,不论服务器返回什... 查看详情
收藏 0 赞 0 分享

脚本入侵-上传漏洞总结篇(臭小子)

1:抓包上传 我们可以用WSockExpert(抓包工具) hkcpost抓包提交软件或等等抓包工具 说下hkcpost有时候电脑打不开WSockExpert(抓包工具) 我们就用这工具 很好用 说到抓包上传 比如一个上传地址http://site/upload.asp 或后台管... 查看详情
收藏 0 赞 0 分享
查看更多