PHP(续)
PHP代码执行漏洞
1.PHP中代码漏洞的概念
代码执行漏洞就是在代码中若存在eval、assert等能将所接收的参数作为代码去执行,并且拼接的内容可被访问者控制,也就是把传入的参数给拼接进去了,造成了额外的代码执行,也就造成了代码执行漏洞。(大概原理:原本正常访问/?method=method1,eval接收到参数,拼接出来的代码是(newTestController())->method1();",正常调用method1。但如果传入的参数是method1();phpinfo,那么拼接出来的代码就是“(new TestController())->method1(); phpinfo();"运行的结果就很有意思了,除了method1被调用了以外ohpinfo也被调用执行了。)
2.PHP代码执行漏洞函数
(1)eval,(assert)
直接把输入的字符串作为PHP代码去执行。eval结尾需要用;号结束,assert不用,现在不用assert了,现在主要用于断言条件是否为真
(2)call_user_func
call_user_func ($_GET ['req'] ) ; // /?req[]=TestController&req[]=method1
这样输入,得到参数为['TestController','method1'],而如果只是单纯地访问/?req=phpinfo,调用的就是phpinfo。
(3)array_walk. array_map. array_filter
具体用法参考我的另一篇文章array_walk. array_map. array_filter -CSDN博客
array_walk对每个元素执行回调函数,直接改变原数组
array_map可以一次性处理多个数组返回一个新的数组,原数组不变
array_filter过滤数组元素
等效于
PHP反序列化漏洞
1.PHP的类与对象
类像是一个模板,对象是通过这个模板做出来的,属性和方法是模板规定的创建出来的对象所有的性质(这是我大概的理解应该没错吧,具体概念很晦涩就不写了)
2.PHP的序列化与反序列化
存储和与其他程序交换这些类所实例化出来的对象用的两个函数serialize(序列化)和unserialize(反序列化)
把一个对象转换成一段文本(可传输),而转换的这个过程就叫序列化还可以进行包裹,例子
反序列化并将对象放到变脸p中得到age
3.PHP中的反序列化漏洞