仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 580|回复: 8
打印 上一主题 下一主题

[学习教程] PHP编程:php反序列unserialize的一个小特征

[复制链接]
变相怪杰 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:13:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
小试一下身手,大概是没问题了,那么交给你个任务,做个留言本吧,这和HELLOWORLD有一比啊!^_^,同是新手面临的第一道关。这几天wordpress的谁人反序列毛病对照火,详细毛病我就不做剖析了,看这篇吧http://drops.wooyun.org/papers/596,你也能够往看英文的原文http://vagosec.org/2013/09/wordpress-php-object-injection/。wp官网打了补钉,我试图往bypass补钉,但让我自觉得乐成的时分,发明我无邪了,并没有乐成绕过wp的补钉,但却发明了unserialize的一个小特征,在此和人人分享一下。1.unserialize()函数相干源码:
  1. if((YYLIMIT-YYCURSOR)<7)YYFILL(7);yych=*YYCURSOR;switch(yych){caseC:caseO:gotoyy13;caseN:gotoyy5;caseR:gotoyy2;caseS:gotoyy10;casea:gotoyy11;caseb:gotoyy6;cased:gotoyy8;casei:gotoyy7;caseo:gotoyy12;caser:gotoyy4;cases:gotoyy9;case}:gotoyy14;default:gotoyy16;}
复制代码
上边这段代码是判别序列串的处置体例,如序列串O:4:"test":1:{s:1:"a";s:3:"aaa";},处置这个序列串,先猎取字符串第一个字符为O,然后caseO:gotoyy13yy13:yych=*(YYMARKER=++YYCURSOR);if(yych==:)gotoyy17;gotoyy3;从上边代码看出,指针挪动一名指向第二个字符,判别字符是不是为:,然后gotoyy17
  1. yy17:yych=*++YYCURSOR;if(yybm[0+yych]&128){gotoyy20;}if(yych==+)gotoyy19;.......yy19:yych=*++YYCURSOR;if(yybm[0+yych]&128){gotoyy20;}gotoyy18;
复制代码
从上边代码看出,指针挪动,判别下一名字符,假如字符是数字间接gotoyy20,假如是+就gotoyy19,而yy19中是对下一名字符判别,假如下一名字符是数字gotoyy20,不是就gotoyy18,yy18是间接加入序列处置,yy20是对object性的序列的处置,以是从上边能够看出:O:+4:"test":1:{s:1:"a";s:3:"aaa";}O:4:"test":1:{s:1:"a";s:3:"aaa";}都可以被unserialize反序列化,且了局不异。2.实践测试:
  1. <?phpvar_dump(unserialize(O:+4:"test":1:{s:1:"a";s:3:"aaa";}));var_dump(unserialize(O:4:"test":1:{s:1:"a";s:3:"aaa";}));?>输入:object(__PHP_Incomplete_Class)#1(2){["__PHP_Incomplete_Class_Name"]=>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的补钉:
  1. functionis_serialized($data,$strict=true){//ifitisntastring,itisntserializedif(!is_string($data))returnfalse;$data=trim($data);if(N;==$data)returntrue;$length=strlen($data);if($length<4)returnfalse;if(:!==$data[1])returnfalse;if($strict){//output$lastc=$data[$length-1];if(;!==$lastc&&}!==$lastc)returnfalse;}else{//input$semicolon=strpos($data,;);$brace=strpos($data,});//Either;or}mustexist.if(false===$semicolon&&false===$brace)returnfalse;//ButneithermustbeinthefirstXcharacters.if(false!==$semicolon&&$semicolon<3)returnfalse;if(false!==$brace&&$brace<4)returnfalse;}$token=$data[0];switch($token){cases:if($strict){if("!==$data[$length-2])returnfalse;}elseif(false===strpos($data,")){returnfalse;}casea:caseO:echo"a";return(bool)preg_match("/^{$token}:[0-9]+:/s",$data);caseb:casei:
复制代码
补钉中的return(bool)preg_match("/^{$token}:[0-9]+:/s",$data);能够多一个+来绕过,固然我们经由过程这个办法把序列值写进了数据库,但从数据库中提取数据,再次考证的时分却没法绕过了,我这个加号没能使数据收支数据库产生任何变更,我团体以为这个补钉绕太重点在于数据收支数据的前后变更。4.总结虽热没有绕过wp补钉,但这个unserialize()的小特征大概会被良多开辟职员疏忽,招致程序呈现平安缺点。以上的剖析有甚么毛病请留言指出。5.参考《WordPress<3.6.1PHPObjectInjection》http://vagosec.org/2013/09/wordpress-php-object-injection/《var_unserializer.c源码》https://github.com/php/php-src/b.../var_unserializer.c《PHPstring序列化与反序列化语法剖析纷歧致带来的平安隐患》转自http://zone.wooyun.org/content/1664转自:https://forum.90sec.org/thread-6694-1-1.html作者:L.N.即使你理解不了PHP,但是也必须先跟它混个脸熟,看,一遍遍的看,看的同时一边琢磨,一边按照它所教的打代码,即使你搞不清楚那些代码到底是干嘛的,但是起码你应该找找感觉。
深爱那片海 该用户已被删除
沙发
发表于 2015-1-19 05:15:34 | 只看该作者
学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql
莫相离 该用户已被删除
板凳
发表于 2015-1-27 21:57:00 | 只看该作者
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
只想知道 该用户已被删除
地板
发表于 2015-2-5 15:06:36 | 只看该作者
对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。
谁可相欹 该用户已被删除
5#
发表于 2015-2-12 10:49:20 | 只看该作者
我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
因胸联盟 该用户已被删除
6#
发表于 2015-3-3 03:21:25 | 只看该作者
对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。
再现理想 该用户已被删除
7#
发表于 2015-3-11 09:38:09 | 只看该作者
,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。
柔情似水 该用户已被删除
8#
发表于 2015-3-18 04:15:05 | 只看该作者
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
小魔女 该用户已被删除
9#
发表于 2015-3-25 12:51:47 | 只看该作者
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-20 16:28

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表