Việc phân tích các tệp javascript có thể dẫn đến thực thi mã từ xa không?

May 08 2022
Trong blog hôm nay, tôi sẽ chỉ cho bạn cách phân tích các tệp javascript có thể dẫn đến việc truy cập các điểm cuối không bị hạn chế và để hiểu cách ứng dụng xử lý nó. Tôi cũng sẽ chỉ cho bạn cách tôi bỏ qua 2 điểm cuối tải lên tệp để có được RCE trong ASP.

Trong blog hôm nay, tôi sẽ chỉ cho bạn cách phân tích các tệp javascript có thể dẫn đến việc truy cập các điểm cuối không bị hạn chế và để hiểu cách ứng dụng xử lý nó. Tôi cũng sẽ chỉ cho bạn cách tôi bỏ qua 2 điểm cuối tải lên tệp để có được RCE trong ứng dụng ASP.NET.

Trước hết , Đây là một chương trình riêng tư, vì vậy tôi sẽ tham khảo nó với target.com.

Tìm điểm cuối:

Sau một vài giờ thử nghiệm với ứng dụng, tôi đã tìm thấy một tên miền phụ cho tôi thông báo “Đang nghỉ ngơi trong thời gian ngắn”, có nghĩa là đó là một dấu hiệu tốt để bắt đầu làm mờ các thư mục.

Tôi bắt đầu làm mờ các thư mục cho đến khi tôi tìm thấy một số điểm cuối trả về mã lỗi 403 Trang bị cấm, ngoại trừ điểm cuối, nó cung cấp cho tôi trang đăng nhập và tôi nghĩ nó chỉ dành cho quản trị viên, hãy xem:

Tôi đã cố gắng đăng nhập bằng thông tin đăng nhập mặc định nhưng không thành công.
Thông thường, khi tôi tìm thấy bảng đăng nhập mà tôi không thể đăng nhập, tôi sẽ xem các tệp javascript vì có thể có rò rỉ thông tin xác thực, khóa API, điểm cuối ẩn, v.v.

Phần lớn các ứng dụng web làm xáo trộn các tệp javascript, vì vậy sẽ rất lãng phí thời gian để hiểu cách thức và chức năng của các tệp này, nhưng bạn có thể tận dụng tính năng tìm kiếm trong trình duyệt của chúng tôi để tìm kiếm một số tiện ích!
Tôi cố gắng tìm kiếm,,,, v.v. , tôi cũng cố gắng tìm kiếm các yêu cầu Ajax và XML.

Và tôi đã tìm thấy một số điểm cuối xác nhận rằng bảng đăng nhập này dành cho quản trị viên.

Tôi đã kiểm tra tất cả các điểm cuối này và tất cả đều cho tôi một phản hồi trống, ngoại trừ điểm cuối này , nó trả về một trang trắng và một số tệp CSS và javascript đã nhập, hãy tìm hiểu thêm về các tệp này, đặc biệt là vì tên của các tệp này cho biết điều gì đó liên quan để tải lên.

Phân tích tệp đầu tiên (xproupload.js):

Bắt đầu với xproupload.js , tôi đã tìm thấy mớ hỗn độn này.

Tôi quyết định sử dụng trình làm đẹp javascript trực tuyến để giúp tôi dễ dàng phân tích nó.

Tệp này có +550 dòng mã, vì vậy tôi sẽ chỉ tập trung vào các đối tượng và chức năng quan trọng.

Tôi đã phân tích tệp này cho đến khi tôi đến một hàm xử lý hàm tải lên phụ trợ, bắt đầu từ dòng 465 , đối tượng “ o ” đã được khai báo và chuẩn bị trở thành phần thân yêu cầu của một yêu cầu Ajax đã khởi tạo ở dòng 473 và chứa các phần tử sau ( thông số):

  • thư mục → Thư mục mà tôi sẽ tải lên.
  • thefile → tham số sẽ có tên tệp của chúng ta và nội dung của nó.
  • currentFilter → chỉ là một chuỗi rỗng, còn từ các phân tích sau này thì không cần nữa.
  • getRS → giá trị trả về từ hàm getAKrs , chúng tôi vẫn chưa biết nó là gì, cũng không có hàm nào trong tệp này trùng tên, vì vậy tôi sẽ tìm kiếm trong các tệp javascript khác sau.
  • akap → trong javascript, giá trị ! 0 có nghĩa là “ true ”.

Ngoài ra, bạn có thể nhận thấy rằng trong dòng 379 , có một số quy tắc tải lên, một trong số đó là phần mở rộng tệp được phép .

Phân tích tệp thứ hai (xprofile.js):

Tệp này có nhiều chức năng, vì vậy tôi cũng sẽ chỉ tập trung vào các đối tượng và chức năng quan trọng.

Các quy tắc tải lên tương tự cũng được khai báo ở đây, ngoài các thuộc tính trình xử lý mới được thêm vào và chúng được gọi từ các điểm cuối khác nhau

  • _fileHandlerfilemgn.ashx
  • _rsHandlerfileUtility.ashx

Tôi đã cố gắng gửi yêu cầu này bằng bộ burp và kết quả là một chuỗi ngẫu nhiên cho mỗi yêu cầu , tôi đoán là mã này có thể xác thực mọi yêu cầu được gửi đến máy chủ, giống như mã thông báo CSRF động, chúng ta sẽ thấy.

Bây giờ tất cả các tham số bắt buộc và giá trị của chúng để tải lên tệp đều có ở đây, hãy tải tệp văn bản lên để kiểm tra xem tôi có quyền tải tệp lên không hay tôi phải đăng nhập với tư cách quản trị viên , tôi cũng đã thay đổi mã hóa của phần thân yêu cầu thành máy chủ. chuẩn bị nhận hồ sơ.

Tốt, nó đã hoạt động! Ngoài ra, phản hồi cung cấp cho tôi thư mục nơi tệp của tôi đã được tải lên và nó nằm trong thư mục , hãy cùng kiểm tra!

Nghe hay đấy, bây giờ chúng ta cần bỏ qua danh sách trắng tiện ích mở rộng của ứng dụng để tải lên shell, hãy nhớ rằng đây là một ứng dụng ASP.NET .

Tôi đã cố gắng vượt qua nó bằng tất cả các phương pháp đã biết, như phần mở rộng kép, byte rỗng, v.v. nhưng nó không hoạt động, cũng đã thử với tất cả các phần mở rộng có thể cấu hình và thực thi hoạt động với ASP.NET và các ứng dụng máy chủ của Microsoft như exe , bat , config , vv, nhưng không có may mắn.

Quay lại tệp xprofile.js , khám phá, có thể có các chức năng khác có thể tận dụng tải lên này.

Số lượng yêu cầu Ajax được sử dụng trong tệp này khiến tôi chú ý, tôi nhận thấy rằng có một số yêu cầu được gửi để xử lý bằng một số loại trình quản lý tệp , có các chức năng như getFiles , deleteFile , createFolder và hơn thế nữa, một trong những hàm này được gọi là renameFile !, và đổi tên các tập tin hoàn toàn là những gì tôi cần!

Bằng cách xem lại hàm này, đó là một yêu cầu Ajax được gửi đến _fileHandler (filemgn.ashx) và nó cần 4 tham số :

  • fn → và nó nhận giá trị chuỗi “ rename_file ” .
  • getRS → giá trị trả về từ hàm getAKrs .
  • akap → như đã đề cập ở trên, nó chỉ là một giá trị “ true ”.
  • param → nhận giá trị của biến “ t ”, được khai báo là một mảng ở dòng 131 được gán ba giá trị ở dòng 132 .

Một vài phút sau, và vì tham số param có nghĩa là được gửi dưới dạng một mảng gồm 3 phần tử , cuối cùng tôi nhận thấy rằng:

  • Tham số thứ nhất [] là thư mục chứa tệp chúng tôi muốn đổi tên.
  • Thứ hai là tên mới.
  • Thứ 3 dành cho tên tệp hiện tại.

Tuyệt vời !, Tôi cũng đã cố gắng thay đổi phần mở rộng tệp thành KHÔNG được phép , như aspx, và nó hoạt động tốt, vì vậy hãy tải lên một tệp độc hại!

Tôi đã sử dụng cmd.aspx nhưng đã đổi thành cmd.txt và tải lên, sau đó đổi tên thành testshell.aspx , sau đó tôi điều hướng đến tệp.

Con tôi đã tải lên thành công và bây giờ tôi có thể chạy các lệnh trên hệ thống!

Báo cáo Dòng thời gian:

25 tháng 3: Được đệ trình.
28/03: Thử nghiệm.
29 tháng 3: Thưởng tiền thưởng.

Đào thêm:

Tôi muốn biết điều gì đằng sau mã này, đặc biệt là bộ lọc được triển khai trên phần mở rộng tệp, vì vậy, vì chúng tôi có đặc quyền viết lệnh trên máy chủ, tôi bắt đầu đọc phần mã này bên trong tệp fileUtility.aspx , và đây là những gì tôi tìm thấy

Ứng dụng chuyển đổi phần mở rộng tệp thành chữ thường và sau đó lọc tất cả các tệp thực thi và tôi nhận ra rằng nó không thể khai thác được nếu không tìm thấy chức năng đổi tên , nhưng trong cùng một tệp, tôi đã tìm thấy điều gì đó liên quan đến việc tải lên tệp zip khiến tôi chú ý!

Như bạn có thể thấy trong dòng 126 , nó kiểm tra hai điều chính:

  • Nếu 4 ký tự cuối cùng trên tên tệp là “ .zip
  • Giá trị của tham số yêu cầu trích xuất .

Sẽ giải nén nó mà không cần bất kỳ bộ lọc nào?
- VÂNG! Đi nào!

Tôi đã sử dụng cùng một tệp shell , nhưng lần này tôi thêm nó vào một kho lưu trữ Zip và tạo một tập lệnh python đơn giản để tải nó lên và thêm tham số giải nén với giá trị true

Bây giờ hãy kiểm tra nó trên trình duyệt

Nhìn vào vỏ con thứ hai của tôi được tải lên thành công!

Tôi muốn gửi một báo cáo mới, nhưng họ đã đóng máy chủ, tôi hy vọng bạn thích đọc và tôi sẽ rất vui nếu bạn có bất kỳ phản hồi nào !

© Copyright 2021 - 2022 | vngogo.com | All Rights Reserved