PHP object injection Như chúng ta đã biết những đối tượng trong ngôn ngữ lập trình nói chung là một thực thể sống, chúng tồn tại trên bộ nhớ trong khi chương trình đang được thực thi. Vậy nếu ta muốn lưu trữ chúng lại để có thể tái sử dụng lại nó lần sau thì làm thế nào? Hàm serialize() trong PHP sẽ giúp ta làm được điều này. Hàm này chịu trách nhiệm dump một đối tượng (object) ra thành một chuỗi (string) dạng O:7:"MyClass":2:{s:3:"foo";i:10;s:3:"bar";i:20} . Và đương nhiên cần hàm unserialize() để chuyển từ một chuỗi đã được serialized về object ban đầu. Khi sử dụng hàm unserialize() nếu chúng ta không kiểm soát tốt dữ liệu truyền vào hàm này tốt thì sẽ rất dễ dàng bị hacker tấn công thông qua lỗi PHP object injection. Để hiểu rõ hơn chúng ta hãy cùng xem xét ví dụ sau: Đầu tiên website của bạn nhận vào biến $_GET['in'], khi nhận được giá trị của biến này bạn tiến hành thực thi đoạn code sau  echo unserialize($_GET['in']); Giả sử một hacker viết một đoạn mã khai thác như sau :

PHP Object injection trên WordPress
PHP Object injection trên WordPress

Kết quả trả về của hàm serialize($foo) là chuỗi O:3:"Foo":1:{s:4:"file";s:11:"/etc/passwd";} sẽ được hacker truyền vào biến $_GET['in'] theo request sau: http://yoursite.com?in=O:3:"Foo":1:{s:4:"file";s:11:"/etc/passwd";}. Có lẽ bạn sẽ hình dung được kết quả trả về của request trên:). Với lỗi này Hacker có thể dễ dàng thực thi những code để khai thác website của bạn. Lời khuyên dành cho bạn ở đây đó là kiểm soát kĩ lưỡng data đi vào hàm unserialize() để loại bỏ những dữ liệu fuzz bất hợp lệ. Nguồn : http://tdsec.wordpress.com/2014/02/25/php-object-injection-tren-wordpress-phan-i/

Chia sẻ bài viết này