首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>漏洞检测>文章内容
intval()使用不当导致安全漏洞的分析
来源:http://www.80vul.com/pch 作者:xy7 发布时间:2009-04-30  
intval()使用不当导致安全漏洞的分析
 
author: xy7#80sec.com
from:http://www.80vul.com/pch/
 
一 描叙
 
intval函数有个特性:"直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时(\0)结束转换",在某些应用程序里由于对intval函数这个特性认识不够,错误的使用导致绕过一些安全判断导致安全漏洞.
 
二 分析

 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 "<br>";
$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 
[http://superhei.blogbus.com/logs/4255503.html]

 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·MS07-014调试手记
·udp_sendmsg空指针漏洞分析
·一段对perl 木马的分析
·小心我“DIR”溢出你!
·CVE-2010-4258漏洞分析
·Adobe Reader 'CoolType.dll' TT
·PHPBB<+2.0.10 漏洞说明
·袁哥写的漏洞研究方法总结
·利用异常处理执行shellcode实例
·注入点检测新方法
·Apache mod_ssl buffer over分析
·RPC漏洞的通用分析方法
  相关文章
·preg_match(_all)的变量初始化问
·mb_ereg(i)_replace()代码注射漏
·读新术-基于开源代码更新的漏洞
·采众家之长分析及改进Cmail漏洞
·一个CGI程序的漏洞挖掘
·udp_sendmsg空指针漏洞分析
·RPC漏洞的通用分析方法
·小心我“DIR”溢出你!
·对一款国家级内容过滤系统Dos安
·MS07-014调试手记
·Symantec 核心驱动 symtdi.sys
·Rav 核心驱动 memscan.sys 本地
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved