专栏首页Web技术布道师PHP弱类型引发的漏洞实例

PHP弱类型引发的漏洞实例

我们知道PHP 是一门弱类型语言,不必向 PHP 声明该变量的数据类型,PHP 会根据变量的值,自动把变量的值转换为正确的数据类型,但在这个转换过程中就有可能引发一些安全问题。

类型转换

1、会先进行类型转换,再进行对比

2、会先比较类型,如果类型不同直接返回false,参考如下

注意:

1 . 当一个字符串被当作一个数值来取值,其结果和类型如下:如果该字符串没有包含’.',’e',’E'并且其数值值在整形的范围之内,该字符串被当作int来取值。其他所有情况下都被作为float来取值,该字符串的 开始部分 决定了它的值,如果该字符串以合法的数值开始,则使用该数值, 否则其值为0 。

2. 在进行比较运算时,如果遇到了 0e 这类字符串,PHP会将它解析为 科学计数法 。

3. 在进行比较运算时,如果遇到了 0x 这类字符串,PHP会将它解析为 十六进制 。

实例:DedeCMS(20180109)任意用户密码重置

在找回密码时,当$dopost = safequestion时,通过传入的member_id查询出对应id用户的安全问题和答案信息,当我们传入的问题和答案不为空,而且等于之前设置的问题和答案,就进入sn()函数。

这里如果用户设置了问题和答案,我们并不知道问题和答案是什么,就无法进入sn()函数。但是如果此用户没有设置问题和答案呢?此时系统默认问题0″,答案是空。0.、0.1、0e1、利用PHP弱类型即可绕过if判断

直接发送如下请求即可获取重置密码的链接:

http://localhost/DedeCMS-V5.7-UTF8-SP2/member/resetpassword.php?dopost=safequestion&safequestion=0e1&safeanwser=&id=1

然后获取的重置面链接为:(只有没有设置安全问题的用户才能重置)

http://localhost/DedeCMS-V5.7-UTF8-SP2/member/resetpassword.php?dopost=getpasswd&id=1&key=D2kIQomh

函数松散性

switch()

如果switch是数字类型的case的判断时,switch会将其中的参数转换为int类型。

实例:HDwikiSQL注入

实际执行的语句:

in_array()

in_array(search,array,type): 如果给定的值 search 存在于数组 array 中则返回 true( 类似于==)。如果第三个参数设置为 true,函数只有在元素存在于数组中且数据类型与给定值相同时才返回 true( 类似于=== )。如果没有在数组中找到参数,函数返回 false。

实例:Piwigo SQL注入

is_number()

is_numeric在做判断时候,如果攻击者把payload改成十六进制0x…,is_numeric会先对十六进制做类型判断,十六进制被判断为数字型为真,就进入了条件语句,如果再把这个代入进入sql语句进入mysql数据库,mysql数据库会对hex进行解析成字符串存入到数据库中,如果这个字段再被取出来二次利用,就可能造成二次注入漏洞。

实例:PHPYun二次注入

strcmp()

strcmp(string1,string2):比较括号内的两个字符串string1和string2,当他们两个相等时,返回0;string1的大于string2时,返回>0;小于时返回<0。在5.3及以后的php版本中,当strcmp()括号内是一个数组与字符串比较时,也会返回0。

md5()

string md5 ( string $str [, bool $raw_output = false ] )

md5()需要是一个string类型的参数。但是当你传递一个array时,md5()不会报错,只是会无法正确地求出array的md5值,返回null,这样就会导致任意2个array的md5值都会相等。

以上就是常见的利用PHP弱类型产生的一些安全问题,在CTF、PHP代码审计中也会遇到这种利用弱类型来绕过逻辑判断,进而引发更大问题的漏洞。希望这个小结能帮助到大家,谢谢 ~ ~

参考

http://php.net/manual/zh/types.comparisons.php

http://wooyun.org/bugs/wooyun-2015-089892

http://wooyun.org/bugs/wooyun-2015-0122884

http://blog.nsfocus.net/dedecms-20180109/

https://blog.formsec.cn/2018/02/05/php-weak-type/

https://www.cnblogs.com/Mrsm1th/p/6745532.html

http://www.jsdaima.com/blog/117.html

http://www.freebuf.com/articles/web/55075.html

本文分享自微信公众号 - PHP技术大全(phpgod)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-04-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 推荐2-Nginx Unit 1.10.0 发布,动态 Web 应用服务器

    NGINX Unit 是一个动态的网络应用服务器,它的设计初衷就是可运行多种编程语言的。1.10.0 版本已经发布,这个版本包括对各种语言模块的一些改进,最后是...

    猿哥
  • php计算字符串相似度similar_text

    因为发送邮件要限制发送频率,有一些邮件都是同类型的邮件,只是时间不一样,这样就需要判断发送邮件内容的相似度。网上找了相关方法,发现这个 similar_text...

    猿哥
  • Golang实现web文件共享服务

    http.Handle("/", http.FileServer(http.Dir("./"))) //把当前文件目录作为共享目录

    猿哥
  • 业界 | 如何与医生更有效地进行数据沟通?

    近期,有团队在开展了一项深入研究,旨在观察医生们对临床诊断差异的认知以及哪些因素会影响医生们对药物和诊治手段的选择。

    大数据文摘
  • 一个远程代码执行漏洞搞定Yahoo, Microsoft, Orange

    写在前面: 一个埃及黑客通过一个文件上传,拿下了多个大型厂商旗下网站。而且这个哥们说话蛮逗的,很有喜剧效果。英文原文看这里。 http://www.sec-do...

    FB客服
  • 【直播】我的基因组49:Y染色体的SNV不能用常规流程来找?

    在上一次直播中,我们说到了一个不符合我们的认知的问题。就是我的全基因组测序数据里找到的SNV的纯合杂合比例失衡,这着实让我非常纠结。在朋友圈大量求助中,肿瘤所的...

    生信技能树
  • 框架升级后某个类型所在程序集发生转移,应用还能正常运行吗?

    所谓类型转移(Type Forwarding)就是将定义在某个程序集中的类型转移到另一个程序集中。我们先通过一个简单的实例让读者朋友们对类型转移有一个感官上的认...

    蒋金楠
  • 终于有招了,微信免费提现!这下可以省不少钱

    终于来了! 微信收款,能免费提现了 ? 最近,微信正式推出“可免费提现的收款码”。从现在开始,只要你经常使用微信二维码进行收款,就可以申请得到! 申请之后,由微...

    企鹅号小编
  • css基本语法及引用方法

    选择器是将样式和页面元素关联起来的名称,属性是希望设置的样式属性每个属性有一个或多个值。代码示例:

    Devops海洋的渔夫
  • 初学者|今天掌握SnowNLP好不好

    本文简绍了SnowNLP的使用方法,这是一个处理中文文本内容的python类库,其主要功能包括分词、词性标注、情感分析、汉字转拼音、繁体转简体、关键词提取以及文...

    yuquanle

扫码关注云+社区

领取腾讯云代金券