当前位置:   article > 正文

PHP反序列化---字符串逃逸(增加/减少)

PHP反序列化---字符串逃逸(增加/减少)

一、PHP反序列化逃逸--增加:

首先分析源码:

  1. <?php
  2. highlight_file(__FILE__);
  3. error_reporting(0);
  4. class A{
  5. public $v1 = 'ls';
  6. public $v2 = '123';
  7. public function __construct($arga,$argc){
  8. $this->v1 = $arga;
  9. $this->v2 = $argc;
  10. }
  11. }
  12. $a = $_GET['v1'];
  13. $b = $_GET['v2'];
  14. $data = serialize(new A($a,$b));
  15. $data = str_replace("ls","pwd",$data);
  16. var_dump(unserialize($data));

通过分析代码,后台将我们输入的字符串中的 'ls' 全部都替换为了 'pwd'。

我们可以利用这个漏洞构造以下payload:

原有字符串的长度为66,加长后的字符串超出了66之后,就将我们想要写入的序列化语句挤了出来,并且挤出的字符串的末尾为 ;} 将序列化语句闭合,将闭合符号后面的语句直接注释掉,达到了我们的目的。


二、PHP反序列化逃逸--减少:

  1. <?php
  2. highlight_file(__FILE__);
  3. error_reporting(0);
  4. class A{
  5. public $v1 = "abcsystem()system()system()";
  6. public $v2 = '123';
  7. public function __construct($arga,$argc){
  8. $this->v1 = $arga;
  9. $this->v2 = $argc;
  10. }
  11. }
  12. $a = $_GET['v1'];
  13. $b = $_GET['v2'];
  14. $data = serialize(new A($a,$b));
  15. $data = str_replace("system()","",$data);
  16. var_dump(unserialize($data));
  17. ?>

逃逸减少的代码通过 str_replace()函数将输入字符串中的 'system()' 替换成了 "" 空字符。

通过这个特性构造payload:

利用溢出的长度将事先准备的后面的字符串吃掉,并且衔接上我们自己想要写入的字符串,达到我们的目的。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/267174
推荐阅读
相关标签
  

闽ICP备14008679号