intval()使用不当导致安全漏洞的分析 's

admin 2017年4月30日18:29:11评论249 views字数 1836阅读6分7秒阅读模式
摘要

author: xy7#80sec.com
from:http://www.80vul.com/pch/一 描叙intval函数有个特性:”直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时(/0)结束转换”,在某些应用程序里由于对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]

—————-我是分割线(# 鬼仔:面属于注释)—————
# 鬼仔注:这是 Superhei 搞的 Php Codz Hacking 的第一篇,相关的介绍在这里

http://www.80vul.com近期推出[PCH]Php Codz Hacking项目,该项目主要是对一些php应用安全有影响的’特性’或者’漏洞’在php源代码的基础上进行一些分析和探讨.

对于这个项目开始我们想了一个名称:”some features of php app sec”,主要是源之80vul发表在即将面市的pstzine0x3里的一篇文章:

* 分析php源代码,发现新的漏洞函数“特性”或者漏洞。(在上一节里介绍的那些“漏洞审
计策略”里,都没有php源代码的分析,如果你要进一步找到新的字典,可以在php源代码的基础
上分析下成因,然后根据这个成因来分析寻找新的漏洞函数“特性”或者漏洞。)(我们以后会
陆续公布一些我们对php源代码的分析)

因为我们认为发现更多的php本身的特性或者漏洞,是以后php应用程序安全的主要的一个方向:).

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2017年4月30日18:29:11
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   intval()使用不当导致安全漏洞的分析 'shttps://cn-sec.com/archives/44707.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息