Rate this post

Một cuộc tấn công Function injection bao gồm việc chèn hoặc “tiêm” tên hàm từ máy khách vào ứng dụng. Một khai thác chèn hàm thành công có thể thực thi bất kỳ chức năng nào được cài sẵn hoặc do người dùng xác định. Các cuộc tấn công tiêm hàm là một loại tấn công tiêm, trong đó các tên hàm tùy ý, đôi khi với các tham số được đưa vào ứng dụng và thực thi. Nếu các tham số được chuyển cho Function injection, nó sẽ dẫn đến việc thực thi mã từ xa.

Các bài viết liên quan:

Các yếu tố rủi ro

  • Các loại lỗ hổng bảo mật này có thể từ rất khó tìm đến dễ tìm
  • Nếu được tìm thấy, thường khó khai thác ở mức độ vừa phải, tùy thuộc vào kịch bản.
  • Nếu khai thác thành công, tác động có thể bao gồm việc mất tính bảo mật, mất tính toàn vẹn, mất tính khả dụng và / hoặc mất trách nhiệm

Các ví dụ

ví dụ 1

Nếu một ứng dụng chuyển một tham số được gửi qua một yêu cầu GET tới PHP và sau đó tham số được đánh giá là một hàm bằng cách bao gồm () sau tên biến, thì biến đó sẽ được coi là một hàm và sẽ được thực thi.

URL bên dưới chuyển tên hàm cho tập lệnh.

http://testsite.com/index.php?action=edit

Tệp index.php chứa đoạn mã sau.

<?php

$action = $_GET['action'];

$action();

?>

Trong trường hợp này, kẻ tấn công có thể chuyển bất kỳ tên hàm nào vào tập lệnh, ví dụ: phpinfo

http://testsite.com/index.php?action=phpinfo

Ví dụ 2

Ví dụ này là một phiên bản mở rộng và nguy hiểm hơn của “Ví dụ 1”, trong trường hợp này, ứng dụng không chỉ cho phép cung cấp tên hàm mà còn cung cấp các tham số cho hàm đó.

http://testsite.com/index.php?action=edit&pageid=1

Index.php chứa đoạn mã sau.

<?php

$action = $_GET['action'];
$pageid = $_GET['pageid'];

$action($pageid);

?>

Trong trường hợp này, kẻ tấn công không chỉ truyền tên hàm mà còn cả tham số cho hàm đó mà có thể dẫn đến việc thực thi mã từ xa bằng cách chuyển hàm hệ thống bằng các lệnh tùy ý.

http://testsite.com/index.php?action=system&pageid=ls

Thao tác này sẽ thực hiện lệnh “ls” trên hệ thống.

Ví dụ 3

Ví dụ này cho thấy một cách khác để đánh giá các chức năng của người dùng bằng cách sử dụng call_user_func thay vì sử dụng dấu ngoặc.

http://testsite.com/index.php?action=edit

Index.php chứa đoạn mã sau.

<?php

$action = $_GET['action'];

call_user_func($action);
?>

Tương tự như “ví dụ 1”, kẻ tấn công có thể chuyển bất kỳ tên hàm nào vào tập lệnh, ví dụ: phpinfo

http://testsite.com/index.php?action=phpinfo

Ví dụ 4

Ví dụ này là một phiên bản mở rộng và nguy hiểm hơn của “Ví dụ 3”, trong trường hợp này, ứng dụng chuyển một tham số khác cho call_user_func. Tham số này sẽ được truyền dưới dạng tham số cho hàm được cung cấp trong đối số đầu tiên của call_user_func, nhiều tham số có thể được truyền cho call_user_func dưới dạng một mảng.

http://testsite.com/index.php?action=edit&pageid=1

Index.php chứa đoạn mã sau.

<?php

$action = $_GET['action'];
$pageid = $_GET['pageid'];

call_user_func($action,$pageid);

?>

Trong trường hợp này, kẻ tấn công không chỉ truyền tên hàm mà còn cả tham số cho hàm đó mà có thể dẫn đến việc thực thi mã từ xa bằng cách chuyển hàm hệ thống bằng các lệnh tùy ý.

http://testsite.com/index.php?action=system&pageid=ls

Thao tác này sẽ thực hiện lệnh “ls” trên hệ thống.

Xem thêm Kiểm tra lỗ hổng bảo mật HTTP Parameter Pollution(HPP)

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now