>  기사  >  백엔드 개발  >  문자 이스케이프에 대한 PHP 역직렬화 상세 분석

문자 이스케이프에 대한 PHP 역직렬화 상세 분석

WBOY
WBOY앞으로
2022-04-14 12:06:495532검색

이 기사에서는 PHP에 대한 관련 지식을 제공하며, 주로 역직렬화 문자 이스케이프에 대한 관련 문제를 소개합니다. PHP 직렬화 후 문자열이 대체되거나 수정되어 문자열 길이가 먼저 직렬화됩니다. 그런 다음 교체하고 수정하여 모두에게 도움이 되기를 바랍니다.

문자 이스케이프에 대한 PHP 역직렬화 상세 분석

추천 학습: "PHP Video Tutorial"

Essence: Closed
카테고리: 더 많은 문자, 더 적은 문자
공통점:

  1. PHP 직렬화 후 문자열이 대체되거나 수정되어 문자열 길이가 됩니다. 변경 사항
  2. 은 항상 먼저 직렬화된 다음 대체 및 수정

분류

문자 증가

  • 아이디어:
    직렬화 후 문자열 형식 및 특성에 따라 문자 수를 식별합니다. 나중에 인식되도록
    속성을 수정하려면 해당 속성을 바꿔야 하며, 이는 들어오는 문자열로 제어할 수 있습니다.
    이전 큰따옴표를 닫은 다음 나중에 생성할 문자를 전달해야 합니다
    하지만 지금은 , 이전 문자열과 다릅니다 길이가 일치하지 않고 구성이 잘못되었습니다
    해결 방법: 대체 문자의 길이 변경에 따라 구성된 문자열을 길이 범위 밖으로 짜내고 다음 부분이 됩니다
    (길이를 사용) 삽입된 문자열의 공백을 채우기 위해 교체 중 변환)
  • tips:
  1. 필터링 후 각 문자에 문자 개수가 나올지 판단)
  2. 예:
  3. 목표: 개체의 값 수정 , 예를 들어 나이를 20으로 변경해야 합니다
    <?php function filter($string){
        $filter = &#39;/p/i&#39;;
        return preg_replace($filter,&#39;WW&#39;,$string);
    }
    $username = &#39;purplet&#39;;
    $age = "10";
    $user = array($username,$age);
    
    var_dump(serialize($user));
    echo "<pre class="brush:php;toolbar:false">";
    $r = filter(serialize($user));
    var_dump($r);
    var_dump(unserialize($r));
    ?>
  • 다음 부분을 템플릿으로 기록할 수 있습니다. 질문을 할 때 먼저 출력하고 살펴보세요
    var_dump(serialize($user));    # 序列化
    echo "<pre class="brush:php;toolbar:false">";
    $r = filter(serialize($user)); # 替换后序列化
    var_dump($r);
    var_dump(unserialize($r));     # 打印反序列化
  • 관찰할 수 있습니다. 대체할 때마다 p가 ww, 즉 매번 문자가 하나 더 추가됩니다 이로 인해 역직렬화 중에 길이 할당 읽기 오류 및 출력 오류가 발생합니다

    따라서 길이 읽기의 특성을 통해 문자 이스케이프 구성을 고려하세요


    10을 20으로 변경하려면 먼저 나중에 구성할 문자열: 문자 이스케이프에 대한 PHP 역직렬화 상세 분석

    原字符串:";i:1;s:2:"10";}
    目标子串:";i:1;s:2:"20";}

    길이 결정: 16(즉, 수신 문자열에 이 문자를 다음 속성에 추가하려면 16자가 더 필요합니다.) 문자가 1개씩 더 있을 때마다 16p가 필요합니다

    따라서 , 입력:


    결과 출력:

    문자 이스케이프에 대한 PHP 역직렬화 상세 분석
    문자 감소
    문자 이스케이프에 대한 PHP 역직렬화 상세 분석값 이스케이프

    값 필터링, 이전 값에는 마지막 키와 값이 포함됩니다(왼쪽 괄호까지)

    대상: 연령을 다음으로 변경 20

      <?php function filter($string){
          $filter = &#39;/pp/i&#39;;
          return preg_replace($filter,&#39;W&#39;,$string);
      }
      $username = "ppurlet"
      $age = "10";
      $user = array($username,$age);
      
      var_dump (serialize($user));    # 序列化
      echo "<pre class="brush:php;toolbar:false">";
      $r = filter(serialize($user)); # 替换后序列化
      var_dump ($r);
      var_dump (unserialize($r));     # 打印反序列
      ?>
    • 2개의 p가 하나의 w로 바뀌고 문자가 줄어든 점을 제외하면 위 코드와 유사합니다.
      동일한 값이 일치하지 않으면 deserialization이 실패합니다
    • username : 이스케이프를 구성하는 데 필요한 코드
      age : 이스케이프 코드 구성


      A 뒤에는 들어오는 age 문자열이 옵니다. 구성 길이

      문자 이스케이프에 대한 PHP 역직렬화 상세 분석第一步
      를 계산합니다. 이는 이 13자를 차지합니다. 2p가 1w로 변경될 때마다 1비트를 이스케이프하는 것과 같습니다. 13*2=26p를 입력하면 문자 길이는 26으로 표시되어 13w가 되고 다음 13자가 나머지 13비트를 차지합니다
      문자 이스케이프에 대한 PHP 역직렬화 상세 분석


      payload:

      username='pppppppppppppppppppppppppp'
      age=A";i:1;s:2:"20";}

      문자 이스케이프에 대한 PHP 역직렬화 상세 분석요약

      문자 증가 첫 번째 매개변수 끝부터 마지막 ​​오른쪽 괄호(대상 문자열)까지 따옴표 길이를 살펴보세요. n

        각 대체 증분을 살펴보세요. x
        1. n/x 대체 문자를 사용하여 코드를 구성하려면 패스하세요. 직렬화된 객체에서
        2. 문자 감소
        3. 두 번째 매개변수로 구성
      1. 시작 부분에 클로저 설정: A" (나중에 구성하는 방법을 고려함)
        1. 첫 번째 매개변수 뒤의 닫는 따옴표를 살펴보세요. A n
        2. 대체로 x자를 줄이는 문자 수
        3. 객체 생성:
        4. 첫 번째 매개변수는 n*(x+1)개의 대체 문자로 전달됩니다.
        5. 두 번째 매개변수는 구성된 문자열로 전달됩니다


        6. 추천 연구: "
        7. PHP 비디오 튜토리얼
        "

      위 내용은 문자 이스케이프에 대한 PHP 역직렬화 상세 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

      성명:
      이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제