PHP Stream Wrapper #1: Introduction

By admin, December 3, 2020

Helo mấy bạn, hôm nay mình sẽ mang đến các bạn 1 series ngắn kì về các dạng lỗi của PHP Stream Wrapper, chia sẻ là phụ, viết bài cho blog đỡ mốc là chính. Enjoy!

PHP Stream là gì?

Tham khảo: https://www.php.net/manual/en/intro.stream.php

Đọc tiếng anh thì hiểu mà dịch ra tiếng Việt chuối cả nải, nên mình sẽ giải thích theo kiểu mình hiểu,

Stream có thể coi là sự truyền dữ liệu từ nguồn đến đích, nguồn và đích ở đây có thể là thể ở bất kì dạng nào, ví dụ như là

  • File
  • TCP/IP hay UDP
  • input, output
  • File upload lên server
  • File Archiving Process

Mặc dù nhìn mấy cái trên có vẻ không liên quan gì nhau, nhưng có chung điểm là: ĐÓ LÀ NHỮNG PROCESS CÓ THỂ ĐỌC VÀ GHI ĐƯỢC

như vậy bạn có thể ghi dữ liệu từ nguồn vào đích, hoặc đọc dữ liệu từ nguồn đến đích, gói gọn lại như này:

  1. Connection established
  2. Data read
  3. Data written
  4. Connection ended

Trong PHP, có nhiều hàm thực hiện các tương tác với Stream, một vài ví dụ

  • file
  • open
  • fwrite
  • fclose
  • file_get_contents
  • file_put_contents

PHP Wrapper

Một Stream cơ bản sẽ gồm 2 phần nhìn giống như này

[scheme]://[target]

Trong đó [scheme] là Wrapper, [target] là các phương thức của wrapper đó, vậy trong php có những wrapper nào?

That’s all 🙂 Mình sẽ đi vào từng wrapper, code lỗi và exploit ở những bài sau.

Tản mạn thêm

Wrapper mặc định trong php là file://, do đó nếu không cung cấp <scheme> thì nó tự add cái file:// vào, ví dụ:

file_get_contents(“/etc/passwd”) sẽ giống y chang file_get_contents(“file:///etc/passwd”)

What do you think?

Leave a Reply

Your email address will not be published. Required fields are marked *

-->