PHP chạy shell_exec với tư cách quản trị viên

Trong phần 1 của loạt bài này, chúng ta đã xem web shell là gì và tại sao kẻ tấn công lại tìm cách sử dụng nó. Trong phần 2 của loạt bài này, chúng ta sẽ xem xét một số ví dụ cụ thể về web shell được phát triển bằng ngôn ngữ lập trình PHP


Vỏ web tồn tại cho hầu hết mọi ngôn ngữ lập trình web mà bạn có thể nghĩ đến. Chúng tôi chọn tập trung vào PHP vì đây là ngôn ngữ lập trình được sử dụng rộng rãi nhất trên web

Trình bao web PHP không làm gì khác hơn là sử dụng các hàm PHP dựng sẵn để thực thi các lệnh. Sau đây là một số hàm phổ biến nhất được sử dụng để thực thi các lệnh shell trong PHP

Ghi chú. Vì mục đích của bài viết này, chúng tôi đã chỉnh sửa tệp máy chủ của mình và chỉ tên miền www. ví dụ. com đến một máy chủ thử nghiệm

hệ thống()

Hàm



--> total 12
drwxrwxr-x 2 secuser secuser 4096 Feb 27 20:43 .
drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 ..
-rw-rw-r-- 1 secuser secuser 26 Feb 27 20:41 shell.php
3 chấp nhận lệnh dưới dạng tham số và nó xuất kết quả

Ví dụ sau trên máy Microsoft Windows sẽ chạy lệnh



--> total 12
drwxrwxr-x 2 secuser secuser 4096 Feb 27 20:43 .
drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 ..
-rw-rw-r-- 1 secuser secuser 26 Feb 27 20:41 shell.php
4 để trả về danh sách thư mục chứa thư mục mà tệp PHP được thực thi



--> Volume in drive C has no label.
Volume Serial Number is A08E-9C63

Directory of C:\webserver\www\demo

02/27/2020 10:21 PM  .
02/27/2020 10:21 PM  ..
02/27/2020 10:19 PM 22 shell.php
1 File(s) 22 bytes
2 Dir(s) 31,977,467,904 bytes free

Thực thi lệnh



--> total 12
drwxrwxr-x 2 secuser secuser 4096 Feb 27 20:43 .
drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 ..
-rw-rw-r-- 1 secuser secuser 26 Feb 27 20:41 shell.php
5 trên máy Linux cũng đạt được kết quả tương tự



--> total 12
drwxrwxr-x 2 secuser secuser 4096 Feb 27 20:43 .
drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 ..
-rw-rw-r-- 1 secuser secuser 26 Feb 27 20:41 shell.php

Các lệnh khác có tác dụng tương tự



--> www-data

giám đốc điều hành ()

Hàm



--> total 12
drwxrwxr-x 2 secuser secuser 4096 Feb 27 20:43 .
drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 ..
-rw-rw-r-- 1 secuser secuser 26 Feb 27 20:41 shell.php
6 nhận lệnh dưới dạng tham số nhưng không xuất kết quả. Nếu tham số tùy chọn thứ hai được chỉ định, kết quả sẽ được trả về dưới dạng một mảng. Nếu không, chỉ dòng cuối cùng của kết quả sẽ được hiển thị nếu được lặp lại



-->

Sử dụng



--> total 12
drwxrwxr-x 2 secuser secuser 4096 Feb 27 20:43 .
drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 ..
-rw-rw-r-- 1 secuser secuser 26 Feb 27 20:41 shell.php
7 với hàm


--> total 12
drwxrwxr-x 2 secuser secuser 4096 Feb 27 20:43 .
drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 ..
-rw-rw-r-- 1 secuser secuser 26 Feb 27 20:41 shell.php
6 sẽ chỉ in dòng cuối cùng của đầu ra lệnh



--> -rw-rw-r-- 1 secuser secuser 29 Feb 27 20:49 shell.php

Nếu một tham số thứ hai được chỉ định, kết quả được trả về trong một mảng



--> Array(
[0] => total 12
[1] => drwxrwxr-x 2 secuser secuser 4096 Feb 27 20:55 .
[2] => drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 ..
[3] => -rw-rw-r-- 1 secuser secuser 49 Feb 27 20:54 shell.php )

shell_exec()

Hàm



--> total 12
drwxrwxr-x 2 secuser secuser 4096 Feb 27 20:43 .
drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 ..
-rw-rw-r-- 1 secuser secuser 26 Feb 27 20:41 shell.php
9 tương tự như hàm


--> total 12
drwxrwxr-x 2 secuser secuser 4096 Feb 27 20:43 .
drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 ..
-rw-rw-r-- 1 secuser secuser 26 Feb 27 20:41 shell.php
6, tuy nhiên, nó xuất ra toàn bộ kết quả dưới dạng một chuỗi

-->
total 12
drwxrwxr-x 2 secuser secuser 4096 Feb 28 18:24 . 
drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 . 
-rw-rw-r-- 1 secuser secuser 36 Feb 28 18:24 shell.php

passthru()

Hàm



--> www-data
1 thực thi một lệnh và trả về đầu ra ở định dạng thô



-->
total 12
drwxrwxr-x 2 secuser secuser 4096 Feb 28 18:23 . 
drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 . 
-rw-rw-r-- 1 secuser secuser 29 Feb 28 18:23 shell.php

proc_open()

Hàm



--> www-data
2 có thể khó hiểu (bạn có thể tìm thấy mô tả chi tiết về hàm trong tài liệu PHP). Bằng cách sử dụng


--> www-data
2, chúng tôi có thể tạo một trình xử lý (quy trình) sẽ được sử dụng để liên lạc giữa tập lệnh của chúng tôi và chương trình mà chúng tôi muốn chạy

đánh dấu ngược

Đáng ngạc nhiên là không nhiều nhà phát triển PHP nhận thức được điều này nhưng PHP sẽ thực thi nội dung của backticks (`) dưới dạng lệnh shell

Ghi chú. Không nên nhầm lẫn ký tự backtick (`) với ký tự trích dẫn đơn (‘)

$output
"; ?> --> www-data

Dựa trên những điều trên, sau đây là trình bao web PHP ở dạng đơn giản nhất



--> total 12
drwxrwxr-x 2 secuser secuser 4096 Feb 27 20:43 .
drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 ..
-rw-rw-r-- 1 secuser secuser 26 Feb 27 20:41 shell.php
0

Nó sử dụng hàm system() để thực thi các lệnh đang được truyền qua tham số GET yêu cầu HTTP ‘cmd’

PHP chạy shell_exec với tư cách quản trị viên

Chúng tôi đã xác định rằng các chức năng này (và một số chức năng khác) có thể rất nguy hiểm. Điều nguy hiểm hơn nữa là tất cả các lệnh PHP có sẵn này được bật theo mặc định khi PHP được cài đặt và phần lớn quản trị viên hệ thống không tắt chúng

Nếu bạn không chắc liệu chúng có được bật trên hệ thống của mình hay không, thao tác sau đây sẽ trả về danh sách các chức năng nguy hiểm đã được bật



--> total 12
drwxrwxr-x 2 secuser secuser 4096 Feb 27 20:43 .
drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 ..
-rw-rw-r-- 1 secuser secuser 26 Feb 27 20:41 shell.php
1

Trong cài đặt mặc định, chúng ta có thể thấy rằng tất cả các chức năng được đề cập ở trên đều được bật



--> total 12
drwxrwxr-x 2 secuser secuser 4096 Feb 27 20:43 .
drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 ..
-rw-rw-r-- 1 secuser secuser 26 Feb 27 20:41 shell.php
2

 

Phần 1

Giới thiệu về Web Shell

Phần 2

Web Shell 101 Sử dụng PHP

Phần 3

Giữ vỏ bọc web dưới vỏ bọc

Phần 4

Web Shell đang hoạt động

Phần 5

Phát hiện & Phòng ngừa

Các câu hỏi thường gặp

vỏ web là gì?

Vỏ web là một ứng dụng nhỏ mà kẻ tấn công chạy trên máy chủ web của bạn. Sau đó, họ có thể sử dụng ứng dụng này để truy cập từ xa vào máy chủ của bạn và chạy các lệnh trên đó. Bản thân vỏ web không bao giờ là một cuộc tấn công, nó là hậu quả của một cuộc tấn công thành công vào trang web hoặc ứng dụng web của bạn. Điều này có nghĩa là nếu bạn có web shell, bạn sẽ phải lo lắng về một vấn đề nghiêm trọng hơn nhiều

Xem cách web shell hoạt động trong thực tế

Làm thế nào để tin tặc độc hại sử dụng vỏ web?

Tin tặc độc hại sử dụng vỏ web để kiểm soát máy chủ đã bị xâm phạm. Đầu tiên, chúng khai thác lỗ hổng trong trang web hoặc ứng dụng web của bạn, chẳng hạn như SQL injection, thực thi mã từ xa hoặc các lỗ hổng khác. Sau đó, họ tải web shell lên máy chủ web của bạn. Từ bây giờ, họ có thể chạy bất kỳ lệnh nào họ thích trên máy chủ của bạn

Xem ví dụ từng bước về cuộc tấn công dẫn đến xâm phạm toàn bộ máy chủ

Làm cách nào tôi có thể phát hiện web shell?

Bạn có thể phát hiện vỏ web bằng cách phân tích nhật ký. Tuy nhiên, bạn không nên tập trung vào việc phát hiện web shell mà thay vào đó, bạn nên phát hiện các lỗ hổng có thể cho phép kẻ tấn công kiểm soát máy chủ của bạn. Ngay cả khi bạn phát hiện ra web shell, điều đó sẽ không ngăn được kẻ tấn công giành lại quyền kiểm soát nếu các lỗ hổng vẫn còn đó. Để phát hiện các lỗ hổng web và tìm hiểu cách loại bỏ chúng, hãy sử dụng Acunetix

Xem những gì Acunetix Premium có thể làm cho bạn

Làm cách nào tôi có thể tự bảo vệ mình trước web shell?

Cách tốt nhất để tự bảo vệ mình trước web shell là làm cho hệ thống của bạn không thể sử dụng chúng. Bạn có thể làm điều đó bằng cách làm cứng máy chủ của mình – xóa tất cả các quyền thừa, chặn các chức năng nguy hiểm tiềm ẩn, hạn chế thực thi tập lệnh trong các thư mục tải lên, v.v. Tuy nhiên, tốt nhất là bảo vệ máy chủ khỏi bị xâm nhập ngay từ đầu bằng cách sử dụng Acunetix thường xuyên

Đọc thêm về phát hiện và bảo vệ web shell

Nhận nội dung mới nhất về bảo mật web
trong hộp thư đến của bạn mỗi tuần

Chúng tôi tôn trọng quyền riêng tư của bạn

CHIA SẺ BÀI NÀY

TÁC GIẢ

PHP chạy shell_exec với tư cách quản trị viên

Agathoklis Prodromou
Quản trị viên/Nhà phát triển hệ thống web

Akis đã làm việc trong lĩnh vực CNTT hơn 13 năm, phát triển các kỹ năng của mình từ góc độ phòng thủ với tư cách là Quản trị viên hệ thống và Nhà phát triển web cũng như từ góc độ tấn công với tư cách là người kiểm tra thâm nhập. Anh ấy có nhiều chứng chỉ chuyên môn liên quan đến đạo đức hack, pháp y kỹ thuật số và ứng phó sự cố

Làm cách nào để bật shell_exec trong PHP?

Cách bật exec() .
Mở php của bạn. ini và tìm phần sau
Xóa exec khỏi dòng và nhấp vào Lưu thay đổi
Nếu bạn cũng cần tắt show_source, system hoặc shell_exec, chỉ cần thêm chúng trở lại dòng và lưu các thay đổi

Làm cách nào để sử dụng shell_exec trong PHP?

hàm shell_exec(). .
cú pháp. chuỗi shell_exec( $cmd )
Thông số. Hàm này chấp nhận một tham số $cmd được sử dụng để giữ lệnh sẽ được thực thi
Giá trị trả về. Hàm này trả về lệnh đã thực hiện hoặc NULL nếu xảy ra lỗi
Thí dụ
đầu ra. gfg. chỉ mục php. chuyên viên máy tính html. php
hàm exec()

Làm cách nào để chạy exec trong PHP?

Xem thêm ¶ .
system() - Thực thi một chương trình bên ngoài và hiển thị đầu ra
passthru() - Thực thi chương trình bên ngoài và hiển thị đầu ra thô
escapeshellcmd() - Siêu ký tự shell thoát
pcntl_exec() - Thực thi chương trình đã chỉ định trong không gian quy trình hiện tại
toán tử backtick

Sự khác biệt giữa exec và shell_exec trong PHP là gì?

shell_exec trả về tất cả luồng đầu ra dưới dạng chuỗi. exec trả về dòng cuối cùng của đầu ra theo mặc định, nhưng có thể cung cấp tất cả đầu ra dưới dạng một mảng được chỉ định làm tham số thứ hai . Nếu bạn cần giá trị thoát VÀ tất cả đầu ra, có lẽ bạn vẫn nên sử dụng "exec" thay vì "shell_exec".