Shell php là gì?

Trong thực tế chúng ta bắt gặp rất nhiều trang web cho phép chúng ta upload file từ máy lên. Đơn giản như tải lên hình nền làm hình đại diện hoặc gửi tệp video thứ cấp. Tuy nhiên, nếu chúng ta không chắc chắn rằng tệp tải lên được kiểm tra chặt chẽ, tin tặc rất có thể sẽ sử dụng trình bao giả mạo dưới dạng tệp ảnh để thực thi mã và sử dụng quyền điều khiển. Bài viết này sẽ chỉ cho bạn 1 vài cách khai thác cơ bản khi bắt đầu vào kiểm soát chưa chặt chẽ. Vì vậy chúng ta hãy đi

2. Các cách khai thác

a. Khai thác cơ bản

Đầu tiên cũng là đơn giản nhất. Đó là trang web tin tưởng hoàn toàn vào người dùng và không có bất kỳ biện pháp bảo vệ nào. Ta sẽ code 1 trang web đơn giản upload file như sau.

Shell php là gì?

Nguyễn Xuân Chiến @Chibi

Theo dõi

1. 6K 45 58

Đã đăng vào ngày 15 tháng 3 năm 2021 1. 02 SA

trong

Nhóm An ninh mạng Sun*

Hãy hack tất cả mọi thứ

Shell php là gì?
Shell php là gì?

Người theo dõi bởi 648 người.

Theo dõi

Sun* Cyber Security Team

6 phút đọc

3. 5K

6

2

Khai báo lỗi truy cập Tải lên tệp trên php để up shell

Chúc mừng năm mới

  • Report
  • Add to series of me

1. Giới thiệu

Trong thực tế chúng ta bắt gặp rất nhiều trang web cho phép chúng ta upload file từ máy lên. Đơn giản như tải lên hình nền làm hình đại diện hoặc gửi tệp video thứ cấp. Tuy nhiên, nếu chúng ta không chắc chắn rằng tệp tải lên được kiểm tra chặt chẽ, tin tặc rất có thể sẽ sử dụng trình bao giả mạo dưới dạng tệp ảnh để thực thi mã và sử dụng quyền điều khiển. Bài viết này sẽ chỉ cho bạn 1 vài cách khai thác cơ bản khi bắt đầu vào kiểm soát chưa chặt chẽ. Vì vậy chúng ta hãy đi

2. Các cách khai thác

a. Khai thác cơ bản

Đầu tiên cũng là đơn giản nhất. Đó là trang web tin tưởng hoàn toàn vào người dùng và không có bất kỳ biện pháp bảo vệ nào. Ta sẽ code 1 trang web đơn giản upload file như sau.

Phần mã php khi không có kiểm soát đầu vào sẽ có định dạng

Giao diện trang web sẽ cho ta 1 chỗ để tải tệp lên.

Sau khi tải lên, tệp được lưu vào địa chỉ. /uploads/file_name. Ta sẽ thử gửi lên 1 ảnh 1 bất kỳ là thử nghiệm. jpg. Sau khi gửi lên thành công, ta có thể vào. /tải lên/kiểm tra. jpg to view direct image

Như vậy là upload thành công. Bây giờ ta sẽ test shell php up, ở đây mình dùng tool pony shell để up

Sau khi tải lên và chạy. /tải lên/vỏ. php thì đã vào bảng terminal, tại đây ta có thể khai thác để chạy lệnh linux, từ đó lấy thông tin

b. Loại bỏ qua MMI

Tiếp đến các trang web có thể giới hạn định dạng tệp, được gọi là phần mở rộng tệp MMI. Ta sẽ thêm 1 đoạn mã như sau vào trang trước.

Đoạn mã trên sẽ sử dụng _FILES['userfile']['type'] để lấy phần mở rộng của tệp. Sau đó sử dụng hàm in_array để chỉ cho phép các tệp định dạng jpg, gif và png. Ta try up shell up thì xuất hiện lỗi

Đến đây ta sẽ sử dụng burpsuite để khai thác. Bắt đầu yêu cầu bằng burpsuite ta được

File ta up lên là file php nên ở phần header sẽ có dạng Content-Type: application/x-php. Với đoạn mã trên thì trang sẽ chỉ kiểm tra xem Content-type có đúng định dạng hay không, còn không kiểm tra nội dung bên trong. Nên ta chỉ cần sửa đổi Content-typecho phù hợp với tệp ảnh đang được, ở đây ta sẽ sử dụng Content-Type: image/jpeg.

There is up to public

c. Bỏ qua getimagesize()

Hàm getimagesize () sẽ đọc 1 lượng byte ban đầu được xác định rõ nhất để xác định xem định dạng tệp, chiều rộng cũng như chiều cao của tệp. Đoạn mã sẽ được thêm vào như sau.

To bypass thì ta sẽ chỉnh sửa phần đầu của file php để hàm check có nghĩa là file ảnh. Hoặc ta chỉ cần thêm đoạn GIF89a vào shell trước là được. Khi đó hàm sẽ check đây là 1 file gif. Cố gắng kết hợp 2 lỗi trên và khai thác, sử dụng burpsuite để bắt và thay đổi loại nội dung, sau đó thêm vào trình bao giai đoạn đầu GIF89a ta được.

There is up to public. Khá tiếc là cái pony shell cách sử dụng này lại không chạy được, các bạn có thể sử dụng các shell khác như mini shell hay r57 shell đều được

d. Bỏ qua thông tin đường dẫn()

Hàm pathinfo() sẽ lấy thông tin về đường truyền vào.

Tiện ích mở rộng sẽ được kiểm tra bởi đoạn sau dấu chấm cuối cùng. vỏ ví dụ. php. jpg thì hàm pathinfo() sẽ check đây có phải là 1 file jpg. Tuy nhiên, nếu ta để như thế thì khi truyền đoạn url chứa shell vào sẽ không chạy được. Đến đây ta có 1 cách để khai thác. Đó là sử dụng byte rỗng %00, hiểu đơn giản thì ta sẽ định dạng tệp shell.php%00.jpg hoặc shell.php/x00.jpg. Khi đó hàm sẽ hiểu là file ảnh. Tuy nhiên, khi thực hiện tải ảnh lên thì đoạn sau %00 sẽ bị xóa, nên tệp sẽ quay trở lại thành shell. php và thực hiện khai thác bình thường. Tuy nhiên, lỗi này đã được chỉnh sửa từ phiên bản php 5. 3. 4 trở đi

e. Một vài cách khai thác khác nhau

  • Bên Cạnh những cách khai thác trên. Đôi khi trang sẽ loại bỏ các tệp php bằng cách đưa các ký tự không được phép vào danh sách đen. Thì ta có thể bỏ qua bằng cách sử dụng các đuôi như sau. Php, PhP, PHP5, php1, php2 vv
  • Một vài trang web sẽ chỉ cho phép ta upfile với 1 dung lượng rất nhỏ. Khi đó ta chỉ có thể khai thác bằng cách sử dụng các shell đơn giản, ví dụ.
3. Cách giải quyết
  • Trên đây là 1 vài cách trang web xử lý kiểm tra file upload đi kèm với cách khai thác cơ bản
  • Có rất nhiều cách để 1 trang web có thể giải quyết vấn đề này. Với mình thì cách hay nhất là kiểm tra xem nó thuộc tập tin gì sau đó ta có thể đổi tên và sửa định dạng cứng cho nó. Còn nếu tệp không nằm trong các định dạng cho phép thì sẽ bị loại bỏ và không cho tải lên.

Up file lên sẽ được.

Như vậy, cho dù kẻ tấn công có vượt qua và up shell lên được thì vẫn không thể thực thi lệnh đã được định dạng sang tệp ảnh