网安干货 | PHP反序列化基础利用链
一、准备漏洞代码
二、 准备POC代码
将上述POC进行简化:
三、执行漏洞利用

四、变量存在访问修饰符的利用
1、为漏洞代码添加修饰符
2、构造存在修饰符的POC
3、事实上的输出

上述输出中包含了多个不可见字符,即%00字符,所以需要使用URL转码使用。
4、进行URL转码后利用
(1)修改uspoc.php中输出反序列化字符串的代码为:
(2)在浏览器中访问usdemo.php并传参为:
http://192.168.112.188/security/unserial/usdemo.php?code=O%3A5%3A%22Woniu%22%3A1%3A%7Bs%3A4%3A%22%00%2A%00a%22%3BO%3A3%3A%22Vul%22%3A1%3A%7Bs%3A9%3A%22%00Vul%00data%22%3Bs%3A10%3A%22phpinfo%28%29%3B%22%3B%7D%7D
五、反序列化的常用手段
1、反序列化的常见起点:
(1)__wakeup 一定会调用
(2)__destruct 一定会调用
(3)__toString 当一个对象被反序列化后又被当做字符串使用
2、反序列化的常见中间跳板:
(1)__toString 当一个对象被当做字符串使用
(2)__get 读取不可访问或不存在属性时被调用
(3)__set 当给不可访问或不存在属性赋值时被调用
(4)__isset 对不可访问或不存在的属性调用isset()或empty()时被调用,形如$this->$func();
(5)__call 调用不可访问或不存在的方法时被调用
3、反序列化的常见终点:
(1)call_user_func 一般php代码执行都会选择这里
(2)call_user_func_array 一般php代码执行都会选择这里
(3)执行指令、文件操作、执行代码等敏感操作
4、常用的函数调用方式