Kiến thức cần có

1. Giới thiệu về PHP Object Injection

  1. Serialize

    1. PHP (và rất nhiều ngôn ngữ khác) cung cấp cho người dùng một hàm gọi là serialize()
    2. Hàm serialize() này sẽ chuyển hóa trạng thái của một đối tượng thành một chuỗi dữ liệu có thể lưu trữ hoặc truyền đi.
    3. Serialization là quá trình chuyển đổi trạng thái thông tin của một đối tượng thành một hình thức có thể được lưu trữ hoặc truyền đi. Các thông tin chuyển đổi có thể được lưu trữ trên một đĩa. Trong quá trình truyền qua mạng, nó có thể ở dạng byte, XML, JSON,…
    4. https://www.php.net/manual/en/function.serialize.php

    image.png

  2. Unserialize

    1. Sau khi chuỗi dữ liệu đã được Serialize, phải có một cách nào đó để chuyển hóa chuỗi dữ liệu này về thành một trạng thái mà hệ thống có thể hiểu được.
    2. Deserialization là quá trình ngược lại của quá trình serialization, thực hiện lấy dữ liệu từ các định dạng có cấu trúc, khôi phục thông tin theo byte, XML, JSON,... thành các đối tượng
    3. Hàm unserialize() sẽ chuyển hóa một chuỗi dữ liệu đã được serialize về value của PHP.
    4. https://www.php.net/manual/en/function.unserialize.php

    image.png

2. Khai thác PHP Objection Injection

  1. Magic Methods trong Object –Oriented Programming (OOP)

    1. __construct():

      1. Hàm __construct() được sử dụng rất thường xuyên trong lập trình OOP.
      2. Hàm này giúp chúng ta khởi tạo thuộc tính của một đối tượng.
      3. PHP sẽ tự động gọi hàm này khi tạo đối tượng từ một lớp.
      4. https://www.php.net/manual/en/language.oop5.decon.php

      image.png

    2. __destruct()

      1. Hàm __destruct() sẽ được tự động được gọi khi đối tượng trong chương trình không còn được tham chiếu đến nữa.
      2. PHP sẽ tự động gọi mọi hàm __destruct() để hủy tất cả các class còn tồn tại sau khi hoàn tất chương trình.
      3. https://www.php.net/manual/en/language.oop5.decon.php#language.oop5.decon.destructor

      image.png

    3. __toString()

      1. __toString() sẽ được tự động gọi (với điều kiện phải định nghĩa hàm này trong class) khi muốn in một Object ra màn hình dưới dạng chuỗi.
      2. https://www.php.net/manual/en/stringable.tostring.php

      image.png

    4. Một số Magic Methods khác

      1. https://www.php.net/manual/en/language.oop5.magic.php

      image.png

  2. Kỹ thuật tấn công POP (Property Oriented Programming)

    https://viblo.asia/p/tong-quan-ve-phuong-phap-tan-cong-deserialization-trong-php-bJzKmR4wZ9N

3. Hình dạng của lỗi

image.png

4. Lab PHP Deserialization

Link lab: