0

0

PHP函数一些漏洞集合分享

小云云

小云云

发布时间:2018-03-13 13:53:56

|

4491人浏览过

|

来源于php中文网

原创


本文主要和大家分享PHP函数一些漏洞集合分享,希望能帮助到大家。

1.弱类型比较

这里写图片描述

2.MD5 compare漏洞

php在处理哈希字符串时,如果利用”!=”或”==”来对哈希值进行比较,它把每一个以”0x”开头的哈希值都解释为科学计数法0的多少次方(为0),所以如果两个不同的密码经过哈希以后,其哈希值都是以”0e”开头的,那么php将会认为他们相同。  
常见的payload有

0x01 md5(str)
    QNKCDZO
    240610708
    s878926199a
    s155964671a
    s214587387a
    s214587387a
0x02 sha1(str)
    sha1('aaroZmOk')  
    sha1('aaK1STfY')
    sha1('aaO8zKZF')
    sha1('aa3OFF9m')

同时MD5不能处理数组,若有以下判断则可用数组绕过

if(@md5($_GET['a']) == @md5($_GET['b']))
{
    echo "yes";
}
//http://127.0.0.1/1.php?a[]=1&b[]=2

3.ereg函数漏洞:00截断

ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE

字符串对比解析  
在这里如果 $_GET[‘password’]为数组,则返回值为NULL  
如果为123 || asd || 12as || 123%00&&&**,则返回值为true  
其余为false

4.$key是什么?

别忘记程序可以把变量本身的key也当变量提取给函数处理。

 $value)
    {        print $key."\n";
    }?>

5.变量覆盖

主要涉及到的函数为extract函数,看个例子

立即学习PHP免费学习笔记(深入)”;

";
    extract($_GET); 
    if($auth == 1){  
        echo "private!";  
    } else{  
        echo "public!";  
    }  
?>

extract可以接收数组,然后重新给变量赋值,过程页很简单。

这里写图片描述

同时!PHP的特性$可以用来赋值变量名也能导致变量覆盖!

 $value) {        echo $key."
".$value; $$key = $value; } print "
".$a;?>

构造http://127.0.0.1:8080/test.php?a=12 即可达到目的。

6.strcmp

如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。 
先将两个参数先转换成string类型。 
当比较数组和字符串的时候,返回是0。 
如果参数不是string类型,直接return

构造http://127.0.0.1:8080/test.php?password[]=

7.is_numeric

无需多言:

8.preg_match

如果在进行正则表达式匹配的时候,没有限制字符串的开始和结束(^ 和 $),则可以存在绕过的问题

9.parse_str

与 parse_str() 类似的函数还有 mb_parse_str(),parse_str 将字符串解析成多个变量,如果参数str是URL传递入的查询字符串(query string),则将它解析为变量并设置到当前作用域。
时变量覆盖的一种

";
    parse_str($_SERVER['QUERY_STRING']);  
    echo $_SERVER['QUERY_STRING']."
"; print $var;?>

10.字符串比较

11.unset

unset(bar);用来销毁指定的变量,如果变量bar 包含在请求参数中,可能出现销毁一些变量而实现程序逻辑绕过。

Pic Copilot
Pic Copilot

AI时代的顶级电商设计师,轻松打造爆款产品图片

下载
$value) {      // $key == _CONFIG
      // $$key == $_CONFIG
      // 这个函数会把 $_CONFIG 变量销毁
      unset($$key);
    }
}if ($_CONFIG['extraSecure'] == false) {    echo 'flag {****}';
}?>

12.intval()

int转string:

$var = 5;  
方式1:$item = (string)$var;  
方式2:$item = strval($var);

string转int:intval()函数。

var_dump(intval('2')) //2  var_dump(intval('3abcd')) //3  var_dump(intval('abcd')) //0 可以使用字符串-0转换,来自于wechall的方法

说明intval()转换的时候,会将从字符串的开始进行转换直到遇到一个非数字的字符。即使出现无法转换的字符串,intval()不会报错而是返回0
顺便说一下,intval可以被%00截断

if($req['number']!=strval(intval($req['number']))){     $info = "number must be equal to it's integer!! ";  
}

如果当$req[‘number’]=0%00即可绕过

13.switch()

如果switch是数字类型的case的判断时,switch会将其中的参数转换为int类型,效果相当于intval函数。如下:

14.in_array()

$array=[0,1,2,'3'];  
var_dump(in_array('abc', $array)); //true  var_dump(in_array('1bc', $array)); //true

在所有php认为是int的地方输入string,都会被强制转换

15.serialize 和 unserialize漏洞

这里我们先简单介绍一下php中的魔术方法(这里如果对于类、对象、方法不熟的先去学学吧),即Magic方法,php类可能会包含一些特殊的函数叫magic函数,magic函数命名是以符号__开头的,比如 __construct, __destruct,__toString,__sleep,__wakeup等等。这些函数都会在某些特殊时候被自动调用。 
例如__construct()方法会在一个对象被创建时自动调用,对应的__destruct则会在一个对象被销毁时调用等等。 
这里有两个比较特别的Magic方法,__sleep 方法会在一个对象被序列化的时候调用。 __wakeup方法会在一个对象被反序列化的时候调用。
username."
"."password: ".$this->password ; } public function __toString() { return file_get_contents($this->file); } }$a = new test();$a->file = 'C:\Users\YZ\Desktop\plan.txt';echo serialize($a);?>//tostring方法会在输出实例的时候执行,如果实例路径是隐秘文件就可以读取了

echo unserialize触发了__tostring函数,下面就可以读取了C:\Users\YZ\Desktop\plan.txt文件了

username."
"."password: ".$this->password ; } public function __toString() { return file_get_contents($this->file); } }$a = 'O:4:"test":3:{s:8:"username";s:0:"";s:8:"password";s:0:"";s:4:"file";s:28:"C:\Users\YZ\Desktop\plan.txt";}';echo unserialize($a);?>

16.session 反序列化漏洞

主要原因是  
ini_set(‘session.serialize_handler’, ‘php_serialize’);  
ini_set(‘session.serialize_handler’, ‘php’);  
两者处理session的方式不同 \Users\YZ\Desktop\plan.txt";}';echo unserialize($a);?>

16.session 反序列化漏洞

主要原因是  
ini_set(‘session.serialize_handler’, ‘php_serialize’);  
ini_set(‘session.serialize_handler’, ‘php’);  
两者处理session的方式不同
相关推荐:

php网站常见的一些安全漏洞及相应防范措施

php关于反序列化对象注入漏洞

有关文件漏洞的文章推荐9篇

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

37

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

37

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

16

2026.01.13

PHP缓存策略教程大全
PHP缓存策略教程大全

本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.13

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

交互式图表和动态图表教程汇总
交互式图表和动态图表教程汇总

本专题整合了交互式图表和动态图表的相关内容,阅读专题下面的文章了解更多详细内容。

45

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

9

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.6万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 7万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号