Injection Là Gì

Một trong những thứ hạng tấn công thịnh hành độc nhất được biết đến so với áp dụng website là SQL injection. SQL injection là 1 trong kiểu tiến công nhắm vào đại lý tài liệu SQL, được cho phép người dùng cấp cho những tđam mê số của riêng họ cho 1 truy vấn vấn SQL. Và thông thường vấn đề này thường xuyên dẫn đến một cửa hàng tài liệu bị xâm phạm do các quyền được update trải qua những lệnh SQL injection truyền vào.

Bạn đang xem: Injection là gì

Squốc lộ injection là dạng injection phổ biến nhất, nhưng chưa hẳn là dạng tốt nhất. Các cuộc tấn công injection bao gồm nhì nguyên tố chính: một trình thông ngôn cùng payload từ bỏ người dùng bằng cách nào này được đọc vào trình thông dịch. Điều này Tức là các cuộc tiến công injection rất có thể xảy ra chống lại nhỏng FFMPEG (một bộ xử lý video) cũng như chống lại cửa hàng tài liệu (như ngôi trường đúng theo injection SQL truyền thống)

Squốc lộ Injection

*

Squốc lộ injection là bề ngoài injectioncổ điển độc nhất vô nhị. Một chuỗi Squốc lộ được đặt trong một HTTP payload, dẫn mang lại những truy nã vấn SQL tùy chỉnh thiết lập được thực thi chuyển đổi quyền mang đến over user.

*
Thông thường các tập PMNM được kiến thiết bằng cách sử dụng phối hợp PHPhường. với SQL (hay là MySQL). Nhiều lỗ hổng SQL injection đã xảy ra bởi vì quan điểm thoải mái và dễ chịu của PHPhường về luồng thân những view, súc tích với data code. Các đơn vị cải tiến và phát triển PHP cũ đã đan xen sự phối hợp của Squốc lộ, HTML và PHPhường. vào các tệp PHP. của họ — một quy mô tổ chức triển khai được cung cấp vì chưng PHP. sẽ ảnh hưởng sử dụng, dẫn mang đến một lượng bự mã PHP dễ dẫn đến tấn công.

Hãy xem ví dụ về một đoạn mã PHPhường cho phép người dùng đăng nhập:

if ($_SERVER<"REQUEST_METHOD"> != "POST") emang lại "
Sign In
"; else // the user has already filled out the login khung. // pull in database info from config.php $servername = getenv("IP"); $username = $mysqlUsername; $password = $mysqlPassword; $database = $mysqlDB; $dbport = $mysqlPort; $database = new mysqli( $servername, $username, $password, $database, $dbport ); if ($database->connect_error) echo "ERROR: Failed khổng lồ connect to MySQL"; die; $sql = "SELECT userId, username, admin, moderator FROM users WHEREusername ="" . $_POST<"username"> . "" AND password ="" . sha1($_POST<"password">) . "";"; $result = mysqli_query($database, $sql);Như chúng ta có thể thấy vào mã singin này, PHPhường., SQL với HTML các được đặt lẫn với nhau. Nhiều hơn, tróc nã vấn SQL được sản xuất dựa trên việc nối những tđắm say số truy tìm vấn nhưng không tồn tại sự khởi chế tạo ra nào xảy ra trước lúc chuỗi truy vấn được chế tạo.Sự đan xen của mã HTML, PHP và Squốc lộ chắc hẳn rằng khiến cho câu hỏi chuyển vào SQL dễ dãi rộng các cho những áp dụng website dựa vào PHPhường. Ngay cả một vài áp dụng PHPhường OSS béo nlỗi WordPress, đã có lần là nàn nhân của vấn đề đó trong vượt khứ đọng.

Trong trong thời gian vừa mới đây, những tiêu chuẩn chỉnh mã hóa PHP. vẫn trsinh sống đề nghị nghiêm khắc rộng những và ngôn từ này sẽ thực hiện những hình thức để giảm năng lực xẩy ra SQL injection. ngoại giả, sự lựa chọn PHP.. của những nhà cách tân và phát triển vận dụng sẽ giảm so với trước. Theo chỉ số TIOBE, một đội chức giám sát mức phổ biến của ngôn từ lập trình, việc sử dụng PHP. sẽ sút đáng kể Tính từ lúc năm 2010.

Các bài học bảo mật thông tin đúc kết từ PHP đã trường tồn trong những ngôn từ khác cùng việc tìm ra các lỗ hổng cyếu SQL trong những ứng dụng web thời nay đang nặng nề hơn các. Tuy nhiên, nó vẫn có thể xảy ra cùng vẫn thông dụng trong những vận dụng không thực hiện các cách thức tốt tốt nhất về mã hóa an ninh.

Hãy lưu ý một Node.js / Express.js hệ thống dễ dàng không giống :

const sql = require("mssql");/** Recieve a POST request to /users, with a user_id param on the requestbody.** An Squốc lộ lookup will be performed, attempting khổng lồ find a user in thedatabase* with the `id` provided in the `user_id` param.** The result of the database query is sent bachồng in the response.*/phầm mềm.post("/users", function (req, res) const user_id = req.params.user_id; /* * Connect to the SQL database (hệ thống side). */ await sql.connect("mssql://username:/database"); /* * Query the database, providing the `user_id` param from the HTTP * request toàn thân. */ const result = await sql.query("SELECT * FROM users WHERE USER = " + user_id); /* * Return the result of the Squốc lộ query to lớn the requester in the * HTTP response. */ return res.json(result););Trong ví dụ này, một nhà trở nên tân tiến vẫn thực hiện nối chuỗi thẳng nhằm đi cùng tmê say số truy vấn vấn vào truy vấn SQL. Như vậy đưa định rằng tđam mê số truy nã vấn được gửi qua không biến thành hàng fake.Trong trường hòa hợp user_id thích hợp lệ, tầm nã vấn này đã trả về một đối tượng người dùng. Trong trường thích hợp chuỗi user_id ô nhiễm và độc hại rộng, các đối tượng khác rất có thể được trả về trường đoản cú các đại lý tài liệu. Hãy xem một ví dụ:

const user_id = "1=1"Bây tiếng, truy tìm vấn SELECT * FROM users where USER = true, được dịch thành "trả lại tất cả các đối tượng người tiêu dùng người dùng cho những người thưởng thức.

Điều gì vẫn xẩy ra nếu như bọn họ vừa ban đầu một câu lệnh bắt đầu bên phía trong đối tượng người sử dụng user_id ?

user_id = "123abc; DROP TABLE users;";Bây giờ truy vấn của bọn họ trông y như sau: SELECT * FROM người dùng WHERE USER = 123abd; DROPhường TABLE users ;. Ơ, bọn họ sẽ thêm 1 truy vấn vấn khác lên trên truy vấn ban sơ. Và hiện thời chúng ta buộc phải kiến thiết lại tài liệu của users.

Một ví dụ trúc zị hơn có thể là một cái nào đó như thế này:

const user_id = "123abc; UPDATE users SET credits = 10000 WHERE user = 123abd;"Bây tiếng, nắm vì chưng yêu cầu danh sách tất khắp cơ thể dùng hoặc drop người tiêu dùng, công ty chúng tôi vẫn thực hiện truy tìm vấn trang bị nhì để update thông tin tài khoản người dùng của chính mình trong cửa hàng tài liệu — vào trường hợp này, trường đoản cú tạo cho mình nhiều sô tín dụng trong vận dụng hơn đa số gì họ đã bao gồm.

Xem thêm: Game Fix / Crack: Age Of Empires 3: The Asian Dynasties V1

Code Injection

Trong quả đât injection, SQL injection chỉ nên một trong những phần nhỏ của các cuộc tấn công giao diện “injection”. Squốc lộ injection được phân một số loại là injection vày nó liên quan cho một trình phiên dịch (trình thông dịch SQL) được nhắm mục tiêu vì payload được hiểu vào trình phiên dịch. Code injection dựa trên vấn đề xúc tiến bên trên giao diện command-line (CLI) gọi một API endpoint được cung cấp thêm những lệnh không mong muốn bởi vì thiếu sanitization.

*

SQL injection đầu tiên là 1 trong những cuộc tiến công injection cùng đồ vật hai là 1 trong cuộc tấn công ckém mã. Như vậy là vì tập lệnh injection chạy dưới trình phiên dịch hoặc CLI (lệnh injection).Nlỗi đã đề cập trước kia, có không ít đẳng cấp cnhát mã ít được nghe biết rộng cơ mà không dựa vào các đại lý dữ liệu. Những điều đó không nhiều thông dụng hơn vì chưng một trong những lý do. Thứ nhất, phần lớn phần nhiều áp dụng web phức tạp thời nay mọi phụ thuộc cơ sở tài liệu nhằm lưu trữ cùng truy xuất tài liệu người tiêu dùng. Vì vậy, nhiều khả năng bạn sẽ kiếm tìm thấy SQL hoặc ckém cơ sở dữ liệu khác gắng vày đưa vào CLI không nhiều thông dụng hơn đang chạy trên thiết bị chủHãy để mắt tới một sever nén hình ảnh / đoạn Clip nhưng mà MegaBank vẫn phân chia nhằm sử dụng trong các chiến dịch tiếp thị tìm hiểu người sử dụng của chính mình. Máy công ty này là một trong những tập vừa lòng các API REST được đặt ở https://media.megabank.com. Nó bao gồm một số API:

uploadImage (POST)uploadVideo (POST)getImage (GET)getVideo (GET)

Endpoint uploadImage() là 1 trong những endpoint Node.js đơn giản nhỏng sau:

const imagemin = require("imagemin");const imageminJpegtran = require("imagemin-jpegtran");const fs = require("fs");/** Attempts khổng lồ upload an image provided by a user to lớn the server.** Makes use of imagemin for image compression khổng lồ reduce impact onserver* drive space.*/ứng dụng.post("/uploadImage", function (req, res) if (!session.isAuthenticated) return res.sendStatus(401); /* * Write the raw image to lớn disk. */ fs.writeFileSync(`/images/raw/$req.body toàn thân.name.png`, req.toàn thân.image); /* * Compresses a raw image, resulting in an optimized image with lower disk * space required. */ const compressImage = async function () const res = await imagemin(<`/images/raw/$req.body toàn thân.name.png`>, `/images/compressed/$req.toàn thân.name.jpg`); return res; ; /* * Compress the image provided by the requester, continue script * expecution when compression is complete. */ const res = await compressImage(); /* * Return a links to lớn the compressed image to the client. */ return res.status(200) .json( url: `https://media.megabank.com/images/$req.toàn thân.name.jpg` ););Đây là 1 endpoint tương đối dễ dàng hoàn toàn có thể biến hóa hình ảnh PNG thành JPG. Nó sử dụng tlỗi viện imagemin cùng không rước bất kỳ thông số nào trường đoản cú fan dùng để làm xác minh kiểu dáng nén, ngoài thương hiệu tệp.Tuy nhiên, có thể một người tiêu dùng lợi dụng câu hỏi xào nấu tên tệp với khiến cho thỏng viện imagemin ghi đè lên những hình ảnh hiện gồm. Đó là thực chất của tên tệp bên trên số đông những hệ điều hành quản lý.

khi bỏ thêm những tuỳ chọn option giữa các tập lệnh và những lệnh cung cấp hệ thống, điều cần thiết là bắt buộc để ý mang đến cụ thể về kiểu cách một chuỗi được sanitized trước khi được thực thi trên hệ quản lý điều hành nhà (Linux, Macintosh, Windows, v.v.) hoặc trình phiên dịch (Squốc lộ, CLI, v.v.) ) nhằm ngăn chặn bài toán tiêm lệnh cùng chèn mã.

Commvà Injection

Với câu hỏi cnhát lệnh, một endpointi API tạo thành những lệnh Bash, bao hàm cả một yên cầu tự đồ vật client. Người dùng đã thêm các lệnh tùy chỉnh sửa thay đổi hoạt động thông thường của endpoint API.Cho đến lúc này, chúng ta vẫn biết rằng Việc ckém mã liên quan tới sự việc lợi dụng một API được viết bất ổn phương pháp để khiến trình thông dịch hoặc CLI thực hiện các hành động nhưng bên cách tân và phát triển không hề muốn. Chúng ta cũng đã hiểu được Injection Command là 1 trong hình thức Injection code nâng cao, trong đó gắng vì chưng tiến hành những hành động không mong muốn đối với CLI hoặc trình phiên dịch, họ sẽ thực hiện các hành động không hề muốn so với một hệ điều hành.

*
Hãy lùi lại một chút ít và chu đáo ảnh hưởng của một cuộc tấn công sinh hoạt Lever này. Đầu tiên, kỹ năng triển khai các lệnh (thường xuyên là Bash) so với hệ quản lý điều hành dựa vào Unix (Macintosh hoặc Linux) bao gồm rủi ro khủng hoảng hết sức cực kỳ nghiêm trọng đi kèm theo cùng với nó. Nếu bọn họ có quyền truy cập thẳng vào hệ điều hành Unix lưu trữ (rộng 95% máy chủ dựa vào Unix) và các lệnh của chúng ta được gọi nlỗi một super user, chúng ta cũng có thể có tác dụng bất kể điều gì họ mong cùng với hệ quản lý và điều hành kia.Hệ quản lý và điều hành bị xâm nhập có thể bị đánh mất một vài biết tin chẳng hạn như:

/etc/passwdGiữ hầu như thông tin thông tin tài khoản người dùng trên OS/etc/shadowChứa mật khẩu đăng nhập được mã hóa của fan dùng~/.sshChứa hẹn những khóa SSH để giao tiếp với những khối hệ thống khác/etc/apache2/httpd.confCấu hình mang lại máy chủ Apache/etc/nginx/nginx.confCấu hình mang đến sever Nginx

Ngoài ra, việc chèn lệnh có thể cung cấp cho cái đó quyền ghi đối với những tệp này bên cạnh quyền đọc. Một lỗ hổng như vậy này đã xuất hiện thêm hàng loạt các cuộc tiến công ẩn chứa nhưng bạn có thể sử dụng lệnh injection để tạo ra nhiều hủy diệt hơn dự loài kiến bao gồm:

Đánh cắp tài liệu từ bỏ sever .Viết lại các tệp nhật ký kết nhằm ẩn dấu tích.Thêm một người tiêu dùng trong cơ sở dữ liệu với quyền ghi nhằm thực hiện trong tương lai.Xóa các tệp quan trọng đặc biệt bên trên máy chủ.Xóa máy chủ với tấn công sập nó.Sử dụng tích phù hợp với các sever / API khác (ví dụ: áp dụng các khóa Sendgrid của sản phẩm công ty để gửi tlỗi rác).Tgiỏi thay đổi một biểu mẫu singin độc nhất vô nhị vào ứng dụng website thành một biểu mẫu lừa đảo gửi mật khẩu ko được mã hóa mang đến website.Khóa quản lí trị viên và tống tiền chúng ta.

Nhỏng bạn có thể thấy, injection lệnh là 1 trong trong những hình trạng tấn công gian nguy tốt nhất mà hacker bao gồm vào bộ pháp luật của mình. Nó mở đầu vào các thang nhận xét khủng hoảng về lỗ hổng bảo mật thông tin cùng vẫn tiếp tục sinh sống đó vào một thời hạn lâu năm sắp tới đây, trong cả cùng với các giải pháp bớt tphát âm được vận dụng trên những sever web văn minh.

Một trong những phương án giảm tgọi điều này bên trên những hệ điều hành quản lý dựa trên Unix là 1 trong khối hệ thống phân quyền to gan lớn mật có thể sút thiểu một số khủng hoảng bằng phương pháp bớt thiệt hại rất có thể gây nên bởi một enpoint bị xâm phạm. Hệ quản lý và điều hành dựa trên Unix chất nhận được vận dụng những quyền chi tiết cho tệp, thư mục, người tiêu dùng với lệnh. Việc tùy chỉnh cấu hình đúng chuẩn các quyền này hoàn toàn có thể vứt bỏ nguy hại của đa số tai hại trước kia bằng phương pháp buộc một API chạy với tư cách người tiêu dùng không có đặc quyền. Thật rủi ro, số đông các ứng dụng có nguy cơ injection lệnh không triển khai quá trình này để tạo ra làm hồ sơ quyền người tiêu dùng nâng cấp mang lại mã của mình.

Cùng đi nhanh khô sang 1 ví dụ dễ dàng khác về injection code:

const exec = require("child_process").exec;const fs = require("fs");const safe_converter = require("safe_converter");/** Upload a đoạn Clip to lớn be stored on the hệ thống.** Makes use of the `safe_converter` library to lớn convert the raw video* prior to lớn removing the raw video from disc & returning an HTTP 200status* code khổng lồ the requester.*/ứng dụng.post("/uploadVideo", function (req, res) if (!session.isAuthenticated) return res.sendStatus(401); /* * Write the raw đoạn phim data lớn disk, where it can be later * compressed và then removed from disk. */ fs.writeFileSync(`/videos/raw/$req.body.name`, req.toàn thân.video); /* * Convert the raw, unoptimized video—resulting in an optimized * đoạn Clip being generated. */ safe_converter.convert(`/videos/raw/$req.body toàn thân.name`, `"/videos/converted/$req.toàn thân.name`) .then(() => /* * Remove the raw đoạn Clip file when it is no longer needed. * Keep the optimized video file. */ exec(`rm /videos/raw/$req.toàn thân.name`); return res.sendStatus(200); ););Có một số thao tác làm việc vào ví dụ này:

Chúng ta ghi dữ liệu video clip vào disk vào tlỗi mục / videos / raw.Chúng ta biến đổi tệp đoạn Clip, ghi ra / video/converted.

// name to be sent in POST requestconst name = "myVideo.mp4 &và rm -rf /videos/converted/";Trong quá trình thực thi mã, một nguồn vào được sanitized đúng chuẩn ở chỗ này hoàn toàn có thể dẫn mang đến các lệnh bổ sung được thực hiện đối với hệ quản lý điều hành chủ — cho nên mang tên là “command injection”.