由于下午学校搞得什么垃圾活动,坐在那里三个小时,听着一群小天真巴拉巴拉的问些目前来讲毫无意义的问题,我真的是很无语好吗!也不知道今天要学些什么了,就还是按照之前没有完成的任务来吧。。。(明天有个考试,emmmmm…)
php序列化时候类的三个属性
- private:会引入不可见字符%00,格式是
%00类名%00属性名
- protected:同样会引入不可见字符%00,格式是
%00*%00属性名
- public:序列化没什么异常
例:
<?php
class dodo{
private $a="f";
protected $b="x";
public $c="an";
}
$d=new dodo();
echo serialize($d);
echo"\r\n";
echo urlencode(serialize($d));`
可以看到,private属性,protected属性按照其序列化后的格式来看,加上%00(不用urlencode编码是不可见的)字符个数是合适的。
phar协议漏洞利用
1、phar文件要能上传到服务器端
2、要有可用的魔术方法作为“跳板”
3、文件操作函数的参数可控,且:、/、phar的特殊字符没有被过滤
将phar伪造成其他格式的文件
基于phar的文件结构,php识别phar文件是通过其文件头的stub,也就是__HALT_COMPILER()
,其前后的内容是没有要求的,那么也就可以通过添加任意的文件头+修改后缀名的方式将phar伪装成其他格式的文件。
例:
$phar->setStub("GIF89I"."<?php __HALT_COMPILER(); ?>"); //设置stub,通过增加gif文件头可以绕过很多上传检测
实际利用:wordpress(一种cms:网站内容管理系统)
(额,,,没太看懂,看懂再写。。。)