Hướng dẫn smallest php shell - shell php nhỏ nhất
Để có trải nghiệm người dùng tốt nhất, vui lòng nâng cấp trình duyệt của bạn Show
Các đồng nghiệp của chúng tôi tại PTP Consulting dành phần lớn thời gian của họ để khai thác các vi phạm dữ liệu gian lận thẻ tín dụng thay mặt cho các thương hiệu thẻ tín dụng. Một trong những kỹ thuật phổ biến nhất để dữ liệu thẻ snaffling từ các nhà bán lẻ thương mại điện tử là tải shell web lên một trang web dựa trên PHP. Điểm xâm nhập ban đầu thường là bao gồm tệp, lỗ hổng tiêm hoặc tín dụng quản trị viên mặc định cũ tốt. Mã nhỏ hơn và ít rõ ràng hơn, càng có thể phát hiện ra. Có nhiều cách để làm xáo trộn vỏ, nhưng kích thước là tất cả mọi thứ, hoặc ít nhất là một số thời gian. Vì vậy, họ đã thử thách bản thân để thấy họ nhỏ có thể tạo ra một vỏ PHP chức năng như thế nào. Dưới đây là những nỗ lực của họ cho đến nay. Đây có phải là nhỏ như người ta có thể đi? Bạn có thể làm tốt hơn thế này không? Xin vui lòng cho chúng tôi biết nếu bạn có thể! Họ bắt đầu với điều này: Không có nghĩa là kỳ công. Nó khá linh hoạt và ít dễ dàng phát hiện hơn các mã shell khác trong các yêu cầu đã ghi lại nhưng một con mắt sắc sảo có thể thấy những gì đang xảy ra. Bước tiếp theo là xuất các chức năng ra URL để cung cấp: [email protected]$_GET[3];([email protected]$a1($_GET[2])).$b2 = @$_(@$a1(@$_GET[1])); echo ” $b2”? > Nó có cùng chức năng nhưng lần này, nó ngắn hơn nhiều, cũng có thể mã hóa có thể là bất cứ điều gì bạn muốn (strrev, base64decode, v.v.). Nó ngắn hơn một chút, nhưng sau đó họ đã đưa ra: Nó có cùng chức năng nhưng lần này, nó ngắn hơn nhiều, cũng có thể mã hóa có thể là bất cứ điều gì bạn muốn (strrev, base64decode, v.v.). Nó ngắn hơn một chút, nhưng sau đó họ đã đưa ra: Đó là các lệnh ngắn nhất cho hệ thống (shell) mà họ có thể đưa ra. Đầu ra từ đó hơi lộn xộn, vì vậy một phiên bản tốt hơn một chút là: You call it by putting the command in URL variable ‘1’ e.g. www.somewebsite.com/index.html?1=ipconfig Mặc dù bạn có thể đạt được cùng một đầu ra sạch bằng cách sử dụng phương pháp URI nguồn xem trong Chrome:Bạn gọi nó bằng cách đặt lệnh vào biến URL ‘1, ví dụ: www.somewebsite.com/index.html?1=ipconfig <%@Page Language=”C#”%><%var p=new System.Diagnostics.Process{StartInfo={FileName=Request[“c”],UseShellExecute=false,RedirectStandardOutput=true}};p.Start();%><%=p.StandardOutput.ReadToEnd()%> Nó có cùng chức năng nhưng lần này, nó ngắn hơn nhiều, cũng có thể mã hóa có thể là bất cứ điều gì bạn muốn (strrev, base64decode, v.v.).Nó ngắn hơn một chút, nhưng sau đó họ đã đưa ra: Đó là các lệnh ngắn nhất cho hệ thống (shell) mà họ có thể đưa ra. 1.Giới thiệuTrong 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ư upoad hình nền làm avatar hoặc gửi file video các thứ. Tuy nhiên nếu chúng ta không đảm bảo file upload lên được kiểm soát chặt chẽ, hacker rất có thể sẽ sử dụng các shell giả mạo dưới dạng file ảnh nhằm thực thi mã và chiếm 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 đầu vào kiểm soát chưa được chặt chẽ. Vậy let's go. 2.Các cách khai tháca. 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 nhằm upload file như sau: Phần code php khi không có sự kiểm soát đầu vào sẽ có dạng: Giao diện trang web sẽ cho ta 1 chỗ để upload file: Sau khi upload thì file được lưu vào địa chỉ ./uploads/file_name. Ta sẽ thử gửi lên 1 ảnh 1 bất kỳ là test.jpg. Sau khi gửi lên thành công, ta có thể vào ./uploads/test.jpg để xem trực tiếp ảnh: Như vậy là upload thành công.Bây giờ ta sẽ thử up shell php lên, ở đây mình sử dụng tool pony shell để up: Sau khi upload và chạy ./uploads/shell.php thì đã vào được bảng terminal, tại đây ta có thể khai thác để chạy lệnh linux, từ đó lấy được thông tin: b.Bypass MMI-TypeTiếp đến các trang web có thể giới hạn định dạng file, gọi là MMI file extension. Ta sẽ thêm 1 đoạn code như sau vào trang trước: Đoạn code trên sẽ sử dụng Đến đây ta sẽ sử dụng burpsuite để khai thác. Bắt request bằng burpsuite ta được: Do file ta up lên là file php nên tại phần header sẽ có dạng Vậy là upload thành công. c. Bypass getimagesize()Hàm getimagesize () sẽ đọc 1 lượng byte ban đầu nhất định nhằm xác định xem về định dạng file, chiều rộng cũng như chiều cao của file. Đoạn code sẽ được thêm như sau: Để bypass thì ta sẽ chỉnh sửa phần đầu của file php để hàm check sẽ nghĩ là file ảnh. Hoặc ta chỉ cần thêm đoạn Vậy là upload thành công. Khá tiếc là cái pony shell sử dụng cách này lại không chạy được, Bạn có thể sử dụng các shell khác như mini shell hoặc r57 shell đều được. d. Bypass pathinfo()Hàm pathinfo() sẽ lấy thông tin về đường dẫn truyền vào: Extension sẽ được check bởi đoạn sau dấu chấm cuối cùng. Ví dụ shell.php.jpg thì hàm pathinfo() sẽ check đây là 1 file jpg. Tuy nhiên nếu ta để như thế thì khi truyền url đoạn 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 null byte %00, hiểu đơn giản thì ta sẽ để file dạng e. Một vài cách khai thác khác
3.Cách khắc phục
Up file lên sẽ được: Như vậy thì 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 được lệnh do đã bị đổi định dạng sang file ảnh. All rights reserved |