您好,欢迎访问一九零五行业门户网

php反序列unserialize的一个小特性_PHP教程

这几天wordpress的那个反序列漏洞比较火,具体漏洞我就不做分析了,看这篇吧http://drops.wooyun.org/papers/596,你也可以去看英文的原文http://vagosec.org/2013/09/wordpress-php-object-injection/。
wp官网打了补丁,我试图去bypass补丁,但让我自以为成功的时候,发现我天真了,并没有成功绕过wp的补丁,但却发现了unserialize的一个小特性,在此和大家分享一下。
1.unserialize()函数相关源码:
if ((yylimit - yycursor) string(4) test [a]=> string(3) aaa } object(__php_incomplete_class)#1 (2) { [__php_incomplete_class_name]=> string(4) test [a]=> string(3) aaa }
其实,不光object类型处理可以多一个'+',其他类型也可以,具体测试不做过多描述。
3.我们看下wp的补丁:
function is_serialized( $data, $strict = true ) { // if it isn't a string, it isn't serialized if ( ! is_string( $data ) ) return false; $data = trim( $data ); if ( 'n;' == $data ) return true; $length = strlen( $data ); if ( $length < 4 ) return false; if ( ':' !== $data[1] ) return false; if ( $strict ) {//output $lastc = $data[ $length - 1 ]; if ( ';' !== $lastc && '}' !== $lastc ) return false; } else {//input $semicolon = strpos( $data, ';' ); $brace = strpos( $data, '}' ); // either ; or } must exist. if ( false === $semicolon && false === $brace ) return false; // but neither must be in the first x characters. if ( false !== $semicolon && $semicolon < 3 ) return false; if ( false !== $brace && $brace < 4 ) return false; } $token = $data[0]; switch ( $token ) { case 's' : if ( $strict ) { if ( '' !== $data[ $length - 2 ] ) return false; } elseif ( false === strpos( $data, '' ) ) { return false; } case 'a' : case 'o' : echo a; return (bool) preg_match( /^{$token}:[0-9]+:/s, $data ); case 'b' : case 'i' :
补丁中的
return (bool) preg_match( /^{$token}:[0-9]+:/s, $data );
可以多一个'+'来绕过,虽然我们通过这个方法把序列值写入了数据库,但从数据库中提取数据,再次验证的时候却没法绕过了,我这个加号没能使数据进出数据库发生任何变化,我个人认为这个补丁绕过重点在于数据进出数据的前后变化。
4.总结
虽热没有绕过wp补丁,但这个unserialize()的小特性可能会被很多开发人员忽略,导致程序出现安全缺陷。
以上的分析有什么错误请留言指出。
5.参考
《wordpress http://vagosec.org/2013/09/wordpress-php-object-injection/
《var_unserializer.c源码》
https://github.com/php/php-src/b ... /var_unserializer.c
《php string序列化与反序列化语法解析不一致带来的安全隐患》 转自
http://zone.wooyun.org/content/1664
转自: https://forum.90sec.org/thread-6694-1-1.html
作者: l.n.
http://www.bkjia.com/phpjc/532682.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/532682.htmltecharticle这几天wordpress的那个反序列漏洞比较火,具体漏洞我就不做分析了,看这篇吧http://drops.wooyun.org/papers/596,你也可以去看英文的原文http://va...
其它类似信息

推荐信息